分类: LINUX
2011-06-15 10:31:03
升级内核实验 编译Linux内核 [root@/ ]#
cp /mnt/hgfs/share/linux-2.6.30.4.tar.bz2 /usr/src/ [root@ src]#
cd /usr/src/ [root@ src]#
tar jxf linux-2.6.30.4.tar.bz2 [root@ src]#
cp /boot/config-2.6.9-42.EL /usr/src/linux-2.6.30.4/.config [root@ src]#
cd linux-2.6.30.4 [root@
linux-2.6.30.4 ]# make menuconfig 在vmware下编译内核,硬盘用的是scsi的,以下三个选项必选: Device Drivers ---><*>SCSI device
support (此项不选的话,下面两项就选择不上) Device Drivers ---><*>SCSI device
support ---><*>SCSI disk support Device Drivers---><8>SCSI device
support--->SCSI low-level drivers---><*>; BusLogic SCSI support 去掉下面两项 DeviceDrivers--->[*]Networkdevicesupport--->[*]Ethernet(1000Mbit)---> Device Drivers--->[*]USB
support---> 另外建议: 因为原始系统的内核配置文件将许多驱动设置为编译为模块, 如果你对自己机器的硬件非常了解,可以去掉这些驱动,节省大量的编译时间和精减内核; 有一些对系统实时性影响较大的模块可以酌情考虑去掉或不使用,如硬盘开启DMA传输, 使用X服务器加速,USB Legacy Support,CPU requency, SMI等等。 添加NFS支持等PC常用功能。 [root@linux-2.6.30.4]#
make bzImage 内核编译成功后,会在/usr/src/linux/arch/i386/boot目录中生成一个新内核的映像文件bzImage。 如果用 make zImage编译,内核很大的话,系统会提示你使用make bzImage命令来编译,所以直接用make bzImage来编译。 [root@linux-2.6.30.4]#
make modules [root@linux-2.6.30.4]#
make modules_install 安装成功后,系统会在/lib/modules目录下生成一个2.6.30.4子目录,里面存放着新内核的所有可加载模块。 3、安装新编译的linux内核 [root@linux-2.6.30.4]#
make install 看看/boot目录下是不是一切都为我们准备好了,包括initrd-2.6.30.4-.img、vmlinuz-2.6.30.4-XXX和System.map-2.6.30.4-XXX。 而且,grub引导项也自动为我们添加了,当然对于引导项后面还要作一点小的修改。 **************************************************************************************************** 如果在/boot下没有我们生成的三个目标文件,则需要将新内核和System.map文件拷贝到/boot目录下,依次执行以下命令: # cp /usr/src/linux-2.6.30.4/arch/i386/boot/bzImage /boot/vmlinuz-2.6.30.4 # cp /usr/src/linux-2.6.30.4/System.map /boot/System.map-2.6.30.4 # cd /boot
(进入boot目录) 在/boot目录下,执行以下命令: # new-kernel-pkg
--mkinitrd --depmod --install 2.6.30.4 (这时候你的/boot下会生成一个initrd-2.6.30.4.img,并且你的grub.conf文件也作了相应更改) # rm –rf
System.map (删除原来的连接) # ln –s System.map-2.6.30.4 System.map
(重新建立连接) ****************************************************************************************************** [root@linux-2.6.30.4]#
df -h Filesystem 容量 已用 可用 已用% 挂载点 /dev/sda1 9.7G
5.3G 3.9G 58% / none 125M 0 125M 0% /dev/shm /dev/sda2 4.2G 160M 3.9G
4% /home 可知,/目录的挂载点是/dev/sda1,这在下面的引导项中root要用到。 [root@linux-2.6.30.4]# vi /boot/grub/grub.conf 在make install之后生成了如下的引导项: default=1 timeout=5 splashimage=(hd0,0)/grub/splash.xpm.gz title Red Hat Enterprise Linux AS (2.6.30.4-XXX) root (hd0,0) kernel /boot/vmlinuz-2.6.30.4-XXX
ro root=LABEL=/ rhgb quiet initrd /boot/initrd-2.6.30.4-XXX.img title Red Hat
Enterprise Linux AS (2.*.*.*-*) //旧内核 root (hd0,0) kernel /boot/vmlinuz-***** ro
root=LABEL=/ rhgb quiet initrd /boot/initrd-*****.img 将其修改为:(区别在default和root处) default=0 timeout=5 splashimage=(hd0,0)/grub/splash.xpm.gz title Red Hat
Enterprise Linux AS (2.6.30.4-XXX) root (hd0,0) kernel /boot/vmlinuz-2.6.30.4-XXX
ro root=LABEL=/ enforcing=0 rhgb quiet initrd /boot/initrd-2.6.30.4-XXX.img title Red Hat
Enterprise Linux AS (2.*.*.*-*) //旧内核 root (hd0,0) kernel /boot/vmlinuz-***** ro
root=LABEL=/ rhgb quiet initrd /boot/initrd-*****.img 做两处修改: (1) 将default=1改为default=0(不改的话也可以,只不过重启之后会默认进入之前的内核) (2) 将kernel行的“LABEL=/”换成根目录所在的分区(上一步查看的就是) 此步很重要,修改错误将可能导致进不去系统 (3)Enforcing mode requested but no policy loaded, halting now. Kernel panic - not syncing : Attempted to
kill init! 然后就死机了,解决方法: 1、修改/etc/selinux/config 将selinux=enforcing或permissive改成disabled就ok了. 还有一种方法: 比如我在kernel
/vmlinuz-2.6.18.8 ro
root=/dev/VolGroup00/LogVol00 rhgb quiet 中修改为:kernel
/vmlinuz-2.6.18.8 ro
root=/dev/VolGroup00/LogVol00 enforcing=0 rhgb quiet 4、重启以使用新编译内核 [root@linux-2.6.30.4]#
reboot 引导时,选择“Red Hat
Enterprise Linux AS (2.6.30.4-XXX)”项 [root@haitao-desktop
~]# uname –a Linux haitao-desktop
2.6.30.4-XXX #1 Wed Apr 23 03:09:26 CST 2008 i686 athlon i386
GNU/Linux