1:前奏请容许我说一些废话,呵呵,很久以来都说要自己手动更新一下linux的kernel,这个情节现在总算是了了。如果操作过程中提示缺少什么东西,请自行用
apt-get install 安装,该安装问题不在本文范围内,请问google即可。
2:步骤A: get kernel from http://www.kernel.org/pub/linux/kernel/v2.6/这里我选了
linux-2.6.36.2.tar.bz2 http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.36.2.tar.bz2B: 解压 :
- cd /usr/src
- tar -xjf /home/mayer/all/smb_share/linux-2.6.36.2.tar.bz2 #我下载的文件放在了这里
- cd linux-2.6.36.2/
C: 编译
- su #切换到root用户,以免每次在下面的命令前都加sudo
- pwd
/usr/src/linux-2.6.36.2 #该行是pwd的输出,不是命令哦,下划线输出的均是命令的输出,下同- ls /usr/src/ | grep "linux"
linux-2.6.36.2
linux-headers-2.6.32-25
linux-headers-2.6.32-25-generic
linux-headers-2.6.32-27
linux-headers-2.6.32-27-generic - cp /usr/src/linux-headers-2.6.32-27-generic/.config .config #拷贝一个上一个的config文件过来,注意文件有一个点,是个隐藏文件
- cp /boot/config-`uname -r` .oldconfig #这两步cp拷贝的动作不是必须的,只是减少一些在下面的kernel的配置中省事一些,如果你不进行这两步也没关系
-
- make menuconfig #在这里你要根据直接的需求决定是否需要新的kernel的某些新功能(输入N/m/y来决定),如果你进行了上面两步的话。否则会让你在界面中选择你需要的东东
-
- make bzImage #编译kernel
-
- make modules #编译模块
D: 安装kernel
- make modules_install #必须先安装模块,成功后会在/lib/modules/目录生成一个以kernel名字命名的目录
- ls /lib/modules
2.6.32-21-generic 2.6.32-25-generic 2.6.32-27-generic 2.6.36.2- ls /boot/
abi-2.6.32-25-generic memtest86+.bin
abi-2.6.32-27-generic System.map-2.6.32-25-generic
config-2.6.32-25-generic System.map-2.6.32-27-generic
config-2.6.32-27-generic vmcoreinfo-2.6.32-25-generic
grub vmcoreinfo-2.6.32-27-generic
initrd.img-2.6.32-25-generic vmlinuz-2.6.32-25-generic
initrd.img-2.6.32-27-generic vmlinuz-2.6.32-27-generic- make install
sh /usr/src/linux-2.6.36.2/arch/x86/boot/install.sh 2.6.36.2 arch/x86/boot/bzImage System.map "/boot"- ls /boot/
abi-2.6.32-25-generic System.map-2.6.32-25-generic
abi-2.6.32-27-generic System.map-2.6.32-27-generic
config-2.6.32-25-generic System.map-2.6.36.2
config-2.6.32-27-generic vmcoreinfo-2.6.32-25-generic
config-2.6.36.2 vmcoreinfo-2.6.32-27-generic
grub vmlinuz-2.6.32-25-generic
initrd.img-2.6.32-25-generic vmlinuz-2.6.32-27-generic
initrd.img-2.6.32-27-generic vmlinuz-2.6.36.2
memtest86+.bin- mkinitramfs 2.6.36.2 -o /boot/initrd.img-2.6.36.2
如果不进行这一步可能不能成功引导kernel,原因是:在grub引导kernel的时候无法识别kernel所在的位置,即没有驱动程序来加载硬盘的分区,而initrd恰好是干这件事的。
- ls /boot/
abi-2.6.32-21-generic config-2.6.36.2 memtest86+.bin vmcoreinfo-2.6.32-25-generic
abi-2.6.32-25-generic grub System.map-2.6.32-21-generic vmcoreinfo-2.6.32-27-generic
abi-2.6.32-27-generic initrd.img-2.6.32-21-generic System.map-2.6.32-25-generic vmlinuz-2.6.32-21-generic
config-2.6.32-21-generic initrd.img-2.6.32-25-generic System.map-2.6.32-27-generic vmlinuz-2.6.32-25-generic
config-2.6.32-25-generic initrd.img-2.6.32-27-generic System.map-2.6.36.2 vmlinuz-2.6.32-27-generic
config-2.6.32-27-generic initrd.img-2.6.36.2 vmcoreinfo-2.6.32-21-generic vmlinuz-2.6.36.2 - update-grub #更新grub,让我们的kernel能被grub识别并添加到启动菜单中去
Generating grub.cfg ...
Found linux image: /boot/vmlinuz-2.6.36.2
Found initrd image: /boot/initrd.img-2.6.36.2
Found linux image: /boot/vmlinuz-2.6.32-27-generic
Found initrd image: /boot/initrd.img-2.6.32-27-generic
Found linux image: /boot/vmlinuz-2.6.32-25-generic
Found initrd image: /boot/initrd.img-2.6.32-25-generic
Found linux image: /boot/vmlinuz-2.6.32-21-generic
Found initrd image: /boot/initrd.img-2.6.32-21-generic
Found memtest86+ image: /boot/memtest86+.bin
done执行上面的命令后,可以在中发现我们的新kernel被添加进去了,见下面的vi部分输出,自动为我们添加了两项哦
- vi /boot/grub/grub.cfg
### BEGIN /etc/grub.d/10_linux ###
menuentry "Ubuntu,Linux 2.6.36.2" --class ubuntu --class gnu-linux --class gnu --class os {
recordfail
insmod ext2
set root="(hd0,1)"
search --no-floppy --fs-uuid --set 62a097ef-4767-4b5e-8494-ef5fa3298037
linux /boot/vmlinuz-2.6.36.2 root=UUID=62a097ef-4767-4b5e-8494-ef5fa3298037 ro quiet splash
initrd /boot/initrd.img-2.6.36.2
}
menuentry "Ubuntu,Linux 2.6.36.2 (恢复模式)" --class ubuntu --class gnu-linux --class gnu --class os {
recordfail
insmod ext2
set root="(hd0,1)"
search --no-floppy --fs-uuid --set 62a097ef-4767-4b5e-8494-ef5fa3298037
echo "载入 Linux ..."
linux /boot/vmlinuz-2.6.36.2 root=UUID=62a097ef-4767-4b5e-8494-ef5fa3298037 rosingle
echo "载入引导虚拟磁盘 ..."
initrd /boot/initrd.img-2.6.36.2
}
menuentry "Ubuntu,Linux 2.6.32-27-generic" --class ubuntu --class gnu-linux --class gnu --class os {
recordfail
insmod ext2
set root="(hd0,1)"
search --no-floppy --fs-uuid --set 62a097ef-4767-4b5e-8494-ef5fa3298037
linux /boot/vmlinuz-2.6.32-27-generic root=UUID=62a097ef-4767-4b5e-8494-ef5fa3298037 ro quiet splash
initrd /boot/initrd.img-2.6.32-27-generic
}E: 重启验证为了以防万一,在重启验证前我们修改一个地方,显示启动菜单,默认可能不会显示的:
- vi /etc/default/grub<strong>
- </strong>
GRUB_DEFAULT=0 #默认选择第几个菜单选项,第一个是0
#GRUB_HIDDEN_TIMEOUT=0 #注释掉这一行
GRUB_HIDDEN_TIMEOUT_QUIET=true
GRUB_TIMEOUT=10
GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian`
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
GRUB_CMDLINE_LINUX="" 如果你按照上述步骤来操作的话,you can enter you desktop with new kernel, and view current kernel with command:
uname- uname -r
2.6.36.2- uname -a
Linux mayer-ubuntu 2.6.36.2 #1 SMP Sat Sep 3 01:28:58 CST 2011 i686 GNU/Linux
3:后悔药哈哈,这里提供一剂良方来处理意外的情况,理论上,如果你按照上述步骤操作的话,可以正常进行桌面的,如果不可以,我们可以选择前一个kernel来进行启动系统,当然,这需要你进行步骤2中的重启验证中的修改,如果你忘记了修改,而又不能正常引导。而又没有出现grub菜单让我选择以前的kernel来启动怎么办?有人说可以在开机的时候按shift键来显示,不过我在虚拟机vmware player中发现这个方法不灵光还有一个救命的招数:用一个ubuntu 10.04或以后的版本来引导进入桌面,不要选择安装,选择试用就行:进入系统后将原来的 包含 /etc 分区的分区(多半是根分区了)挂载到试用的linux中,然后按照步骤2中的重启验证中的修改默认的启动kernel即可
比如 我的/etc 没有单独分区,所以即在根分区/, 并且我的根分区在 /dev/sda1 (sudo fdisk -l #可以看到当前硬盘的分区状况)
- mkdir /tmp/sda1
- sudo mount -t etx4 /dev/sda1 /tmp/sda1 #如果你不知道分区格式,可以省略 -t ext4
- sudo vi /tmp/sda1/etc/default/grub #按照步骤2中的重启验证中的修改默认的启动kernel
4:后记茫茫天数此中求,世道兴衰不自由。万万千千说不尽,不如推背去归休。Linux这种宏内核的前途如何呢?哎,算了。DirectFB-1.5.0移植 支持3D硬件支持Linux选项-getopt/getopt_long相关资讯 Ubuntu教程
- Ubuntu教程 - 使用Ubuntu拷贝CD和 (12/18/2013 14:38:16)
- 让Ubuntu 12.10支持RAR和7Z文件解 (11/15/2012 18:51:50)
- Windows 7硬盘安装Ubuntu 12.10图 (11/03/2012 19:22:47)
| - 完美安装Ubuntu 12.10最新AMD显卡 (11/27/2012 08:17:47)
- Win 7硬盘安装Ubuntu 12.10 (11/05/2012 13:30:34)
- 虚拟机上Ubuntu 11.10升级到12.04 (10/12/2012 20:00:38)
|
本文评论 查看全部评论 (0)