ubuntu下编译2.6.36内核

学习LDD3的开始遍要求编译内核
现将编译的过程整理如下:
1.准备工作
下载源码:
到http://www.kernel.org/下载2.6.36内核并解压
我开启了root, 并解压到/root/src/linux-2.6.36/下
下载工具:
apt-get install build-essential kernel-package libncurses5-dev libqt3-headers
其中libqt3-headers可选, 此包用于make xconfig

2.配置
进入源代码目录
运行
make menuconfig
注意主菜单最后有两项:
load a kernel configuration...
save a kernel configuration...
先选第一项load 利用当前的内核配置详单来设置将要编译的内核,然后选save这一项保存,最后退出配置界面。
实践证明从2.3.35-22升级至2.6.36这样做是可行的

3.编译
执行:sudo make  -j4 (建议开2或4个线程,然后出去运动下)
然后:sudo make install
再:sudo make modules  (编译模块)
再:sudo make modules_install  (安装模块)
最后创建 initrd文件:
mkinitramfs -o /boot/initrd.img-2.6.36

4. 配置grub
编译好内核后,还需要配置grub,以便从新内核启动
gedit /boot/grub/grub.cfg
我的grub.cfg添加如下:
#my kernel
menuentry 'Ubuntu, with Linux 2.6.36-generic' --class ubuntu --class gnu-linux --class gnu --class os {
recordfail
insmod part_msdos
insmod ext2
set root='(hd0,msdos1)'
search --no-floppy --fs-uuid --set 24bffd39-bd32-4597-a5e2-429989e30bb0
linux /boot/vmlinuz-2.6.36 root=UUID=24bffd39-bd32-4597-a5e2-429989e30bb0 ro   quiet splash
initrd /boot/initrd.img-2.6.36
}

下面是2.6.35-22的grub选项,就在它上面添加上述grub选项
menuentry 'Ubuntu, with Linux 2.6.35-22-generic' --class ubuntu --class gnu-linux --class gnu --class os {
recordfail
insmod part_msdos
insmod ext2
set root='(hd0,msdos1)'
search --no-floppy --fs-uuid --set 24bffd39-bd32-4597-a5e2-429989e30bb0
linux /boot/vmlinuz-2.6.35-22-generic root=UUID=24bffd39-bd32-4597-a5e2-429989e30bb0 ro   quiet splash

5.修正
尽管编译过程结束, 但启动失败
warning:can't open directory /lib/modules/2.6.36/modules.dep,no such files or directory
在grub菜单中选择旧内核登录
运行:
cd /boot
cp initrd.img-2.6.36 initrd-2.6.36.old (先备份,make一次很费时)
depmod -a
update-initramfs -k 2.6.36 -c
cd /tmp
gzip -dc /boot/initrd.img-2.6.36| cpio -id
touch lib/modules/2.6.36/modules.dep
find ./ | cpio -H newc -o > /boot/initrd.img-2.6.36.new
gzip /boot/initrd.img-2.6.36.new
cd /boot
mv initrd.img-2.6.36.new.gz initrd.img-2.6.36

重启后OK
运行
uname -a
显示:
Linux sunyu-ubuntu 2.6.36 #1 SMP Mon Nov 8 09:29:02 CST 2010 i686 GNU/Linux
证明大功告成

PS:在使用模块时,printk的输出不再控制台,而是在/var/log/syslog中
可运行
tail /var/log/syslog查看

你可能感兴趣的:(linux,工作,ubuntu,OS)