编译内核
作者: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