linux手动换kernel,Ubuntu 10.04手动更新kernel

1:前奏

请容许我说一些废话,呵呵,很久以来都说要自己手动更新一下linux的kernel,这个情节现在总算是了了。

如果操作过程中提示缺少什么东西,请自行用apt-get install安装,该安装问题不在本文范围内,请问google即可。

2:步骤

A:  get kernel from http://www.kernel.org/pub/linux/kernel/v2.6/

B: 解压 :

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

mkinitramfs2.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

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 -r2.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这种宏内核的前途如何呢?哎,算了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值