下面的安装过程在
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
原文出处:
http://www.linuxforum.net/books/linuxsos.pdf
第41页到49页内容,略有删节。