下载内核:wget
解压至/usr/src/
tar jxvf linux-2.6.35.tar.bz2 -C /usr/src/ |
编译步骤:
cd /usr/src/linux-2.6.35 make mrproper //会清理多余文件(如果有,比如目录下有.config会clean之) make menuconfig //字符界面选择编译内容 make all //等同于3个命令(make && make zImage && make modules ) make modules_install //模块安装 make install //完成mkinitrd命令及内核(bzImage)和System.map的拷贝以及grub添加 |
如果只是按上述步骤完成编译重启加载新内核启动会报如下类似错误:
mount: could not find filesystem '/dev/root' setuproot: moving /dev/failed: no such file or directory setuproot: error mounting /proc: No such file or directory. setuproot: error mounting /sys: No such file or directory. switchroot: mount failed: No such file or directory. Kernel panic - not syncing: Attempted to kill init! |
解决办法:来自CU社区
在执行完 “make all”之后“linux-2.6.35”文件夹下会生成配置文件“.config” 编辑此文件。大约在110行。 改“# CONFIG_SYSFS_DEPRECATED_V2 is not set”为“CONFIG_SYSFS_DEPRECATED_V2=y” 或者直接用下面命令更改: Sed -i 's/# CONFIG_SYSFS_DEPRECATED_V2 is not set/CONFIG_SYSFS_DEPRECATED_V2=y/' ./.config 修改完此配置文件后再次“make all”以及完成后续步骤。 |
解压initrd
cp /boot/initrd-2.6.35.img /tmp
cd /tmp/
mkdir newinitrd
cd newinitrd/
zcat ../initrd-2.6.35.img |cpio -i
编辑init文件,删掉重复的两行其中一行
vi init
echo "Loading dm-region-hash.ko module"
insmod /lib/dm-region-hash.ko
echo "Loading dm-region-hash.ko module"
insmod /lib/dm-region-hash.ko
重新打包文件
find .|cpio -c -o > ../initrd
cd ../
gzip -9 < initrd > initrd-2.6.35.img
rm -rf /boot/initrd-2.6.35.img
cp initrd-2.6.35.img /boot
修改启动项
vi /boot/grub/grub.conf
把default=1改为default=0
最后从新启动 reboot