当前位置:操作系统 > Unix/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

  

上一个:Linux2.4内核下的代理ARP和透明防火墙
下一个:Linux内核源代码的阅读和工具介绍

更多Unix/Linux疑问解答:
路由原理介绍
子网掩码快速算法
改变网络接口的速度和协商方式的工具miitool和ethtool
Loopback口的作用汇总
OSPF的童话
增强的ACL修改功能
三层交换机和路由器的比较
用三层交换机组建校园网
4到7层交换识别内容
SPARC中如何安装Linux系统(2)
SPARC中如何安装Linux系统(1)
用Swatch做Linux日志分析
实战多种Linux操作系统共存
浅析Linux系统帐户的管理和审计
Linux2.6对新型CPU的支持(2)
电脑通通透
玩转网络
IE/注册表
DOS/Win9x
Windows Xp
Windows 2000
Windows 2003
Windows Vista
Windows 2008
Windows7
Unix/Linux
苹果机Mac OS
windows8
安卓/Android
Windows10
如果你遇到操作系统难题:
访问www.zzzyk.com 试试
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,