当前位置导航:炫浪网>>网络学院>>操作系统>>Linux教程

编译内核


  作者:meichaol
  
  下面的安装过程在 RedHat Linux 6.1 Server 上测试,安装过程使用 root 用户,当时新的内核版本
  为2.2.13,现在最新的稳定版本时2.2.15 (请到 http://www.kernel.org 查询最新的内核版本信息)。
  
  (下述的编译、安装步骤我本人已经在HP LC3 PII 300 机器上测试过的。)
  
  
  一、 创建紧急启动盘
  察看/etc/lilo.conf文件,确定你是用哪个内核映像文件启动的。例如:
   [root@deep]# cat /etc/lilo.conf
  boot=/dev/sda
  map=/boot/map
  install=/boot/boot.b
  prompt
  timeout=50
  image=/boot/vmlinuz-2.2.12-20
  label=linux
  root=/dev/sda6
  initrd=/boot/initrd-2.2.12-20.img
  read-only
  
  上述例子说明系统使用/boot/vmlinuz-2.2.12-20 内核映像文件启动。现在,使用root登录,然后
  放入一张1.44M 软盘。
  [root@deep]# mkbootdisk --device /dev/fd0 2.2.12-20
  Insert a disk in /dev/fd0. Any information on the disk will be lost.
  Press to continue or ^C to abort:
  
  使用上述的命令建立一张可以启动的软盘,当你升级内核出现错误的时候可以使用这张软盘恢复。
  建议使用这张软盘重新启动机器确保能正常使用。
  
  二、 内核优化
  解压缩下列 .tar.gz 文件
  进入 /usr/src/ 目录
  [root@deep]# cp linux-version.tar.gz /usr/src/
  [root@deep]# rm -rf linux
  [root@deep]# rpm -e --nodeps kernel-headers kernel
  [root@deep]# rm -rf /usr/src/linux-2.2.12/
  [root@deep]# rm -rf /lib/modules/2.2.12-20/
  [root@deep]# tar xzpf linux.version.tar.gz
  [root@deep]# chown -R 0.0 /usr/src/linux/
  [root@deep]# rm -f linux-version.tar.gz
  
  增加任务数
  为了增加系统允许的任务数,应该编辑头文件/usr/src/linux/include/linux/tasks.h 并对下列
  参数进行修改。
  [root@deep]# vi /usr/src/linux/include/linux/tasks.h
  把 NR_TASKS 从 512 改为 3072
  把 MIN_TASKS_LEFT_FOR_ROOT 从 4 改为 24
  
  使用 vi /usr/src/linux/Makefile 编辑 Makefile 文件修改下列代码行:
  把
  CFLAGS = -Wall -Wstrict-prototypes -O2 -fomit-frame-pointer
  修改为
  CFLAGS = -Wall -Wstrict-prototypes -O6 -mcpu=pentiumpro -march=pentiumpro
  -fomit-frame-pointer-fno-exceptions
  
  把
  HOSTCFLAGS = -Wall -Wstrict-prototypes -O2 -fomit-frame-pointer
  修改为
  HOSTCFLAGS = -Wall -Wstrict-prototypes -O6 -mcpu=pentiumpro -march=pentiumpro
  -fomit-frame-pointer-fno-exceptions
  
  三、 编译
  确定 /usr/include/asm, /usr/include/linux, and /usr/include/scsi 这三个符号连接正确
  地连接到内核源代码的相关位置。
  你可以使用下列的命令:
  [root@deep]# cd /usr/include
  [root@deep]# rm -rf asm linux scsi
  [root@deep]# ln -s /usr/src/linux/include/asm-i386 asm
  [root@deep]# ln -s /usr/src/linux/include/linux linux
  [root@deep]# ln -s /usr/src/linux/include/scsi scsi
  
  使用下列命令清楚从前编译内核时残留的.o 文件和不必要的关联:
  [root@deep]# cd /usr/src/linux/
  [root@deep]# make mrproper
  
  安装好源代码后,现在可以进行内核的配置了。
  [root@deep]# cd /usr/src/linux/
  [root@deep]# make config
  
  有三种配置内核的方法:
  第一种方法是 make config 命令,它提供了一种基于字符的界面来进行各种内核的配置。 系统会提示
  你各种内核的配置选项。
  第二种方法是 make menuconfig 命令,它提供了一个易于使用的菜单界面来进行内核的配置。
  第三种方法智 make xconfig 命令,它提供了一种图形界面来进行内核的配置。
  配置完成后,保存选项,然后返回 /usr/src/linux/ 目录,然后使用下列的命令完成内核的编译。
  [root@deep]# make dep; make clean; make bzImage
  
  编译的时间根据你的机器配置会花费十几分钟到一个多小时不等,请耐心的等候就是:-)
  
  编译完成后,你可以安装编译并压缩好的内核映像文件了。如果在内核配置时选择了可装载模块选项的话
  (CONFIG_MODULES),你还要使用下列的命令编译相应的模块。
  
  [root@deep]# make modules
  [root@deep]# make modules_install
  
  之后拷贝内核影像文件 /usr/src/linux/arch/i386/boot/bzImage 到 /boot 并给它一个合适的名字:
  [root@deep]# cp /usr/src/linux/arch/i386/boot/bzImage /boot/vmlinuz-kernel.version.number
  
  拷贝 /usr/src/linux/System.map 到 /boot 并给它一个合适的名字:
  [root@deep]# cp /usr/src/linux/System.map /boot/System.map-kernel.version.number
  
  然后用 cd 命令转到 /boot 目录并重新建立连接 vmlinuz 和 System.map :
  [root@deep]# cd /boot
  [root@deep]# ln -fs vmlinuz-kernel.version.number vmlinuz
  [root@deep]# ln -fs System.map-kernel.version.number System.map
  
  删除不必要的文件:
  
  [root@deep]# rm -f module-info
  [root@deep]# rm -f initrd-2.2.12-20.img (如果你有SCSI设备的话)
  
  最后,编辑 /etc/lilo.conf 文件让系统启动的时候使用新的内核:
  [root@deep]# vi /etc/lilo.conf
  
  boot=/dev/sda
  map=/boot/map
  install=/boot/boot.b
  prompt
  timeout=20
  restricted
  password=somepasswd
  image=/boot/vmlinuz-kernel.version.number #(在这里是你的内核映像文件的名称).
  label=linux
  root=/dev/sda6
  read-only
  
  (上面的仅是例子而已,跟你的文件会略有不同)
  别忘了修改 /etc/lilo.conf 后及时更新lilo:
  [root@deep]# /sbin/lilo -v
  
  特别注意:如果你在配置 Unix98 PTY support (CONFIG_UNIX98_PTYS)选择了 NO ,那么你还要修改
  /etc/fstab 文件,删除下列的行:
  none /dev/pts devpts gid=5,mode=620 0 0
  
  编辑 /etc/conf.modules 并删除没有必要的模块
  [root@deep]# vi /etc/conf.modules
  例如
  Alias scsi_hostadapter model (如果有 SCSI 驱动).
  Alias eth0 Ethernet model card (以太网卡).
  Alias parport_lowlevel parport-pc (并口).
  Pre_install pcmcia_core /etc/rc.d/init.d/pcmcia start (如果是笔记本的话).
  
  如果这些模块在配置新内核的时候没有选择编译或者已经编译到内核里,那么就应该删除它们。修改之后
  必须重新运行LILO ,重新启动机器。
  
  重新创建紧急启动软盘
  
  如果一切正常,那么恭喜你,内核升级就算完成了!这时你应该重新创建一张紧急启动软盘。
  以 root 登录,插入一张新的软盘:
  [root@deep]# mkbootdisk --device /dev/fd0 2.2.13
  Insert a disk in /dev/fd0. Any information on the disk will be lost.
  Press to continue or ^C to abort:
  
  更新 /dec 入口
  如果你升级了内核或者添加了一个新的设备,那么你应该更新 /dev 入口。
  以root用户登录:
  [root@deep]# cd /dev
  [root@deep]# ./MAKEDEV update
相关内容
赞助商链接