编译升级linux内核,Linux 内核手动编译升级

以前升级内核都是通过apt或者yum之类的包管理软件进行升级,最近想把一台机器升级到最新版内核,所以只能手动编译内核进行升级了。作为一名linuxer,内核编译应该是必会的。

获取最新内核

wget 'https://www.kernel.org/pub/linux/kernel/v3.0/linux-3.8.tar.gz'

建立内核编译目录

mkdir -p /opt/linux

mv linux-3.8.tar.gz /opt/linux/

解压

tar zxvf linux-3.8.tar.gz

#结果如下

[root@localhost:/opt/linux]# ls

linux-3.8 linux-3.8.tar.gz

内核配置被保存在内核源码树下顶级目录的.config文件中,不过刚解压的内核源码树中是没有该文件,需要我们手动建立,我们可以一步一步从头建立,也可以获取当前正在运行的内核的配置。

从头配置内核

make config

eb5483d78c53567e099249e04f934bd8.png

内核配置程序会逐步跟踪每一个选项,通常有几个选项供你选择,其中大写字母是默认选项,y 直接构建到内核中称为静态模块,n 完全不构建到内核中,m 构建到内核中,成为动态模块,在需要时加载,? 打印提示信息。选择好后,按回车配置下一个选项。

这时才发现内核选项好几千个,光是按回车都得好长时间,所以换方案,换成该内核版本默认的内核配置,然后在此基础上进行修改。

获取该版本的默认配置

每个内核版本都有一个默认配置,该配置是基于内核维护者计算机得出的配置。

make defconfig

107d37fe49660bac4358a19a04083fc7.png

可以看到生成一个默认的内核配置,既然该配置是基于维护者的计算机得出的配出,所以我们需要修改配置以适应我们的计算机。

修改默认的内核配置

make menuconfig

1440d93ebfde2dda6ca8216c4d14711e.png

修改完毕后,保存退出。

开始构建内核

内核构建系统能够很好的把任务划成小分片,将其分配给不同的处理器,这样就可以充分利用多处理器计算机的全部能力。在使用多线程构建内核时,需要使用-j参数,-j参数的大小一般是两倍的处理器数量,由于我用的Xeon E5504的4核处理器,所以我使用-j8

make -j8

3dcee9e6f09765ea4cb143b9f45503b5.png

可以看到新的内核已经生成,并给出了具体目录。

安装新的内核模块

make modules_install

c97ca8701989001af6c48159df6644f0.png

以上把新构建好的模块安装到文件系统中,一般内核模块位于/lib/modules/目录下相应的内核版本目录下。

9a91a1a5b1e9a6186c913199a7bef517.png

2.6.32-5-amd64目录是目前的内核模块目录,3.8.0目录是编译的内核模块的目录。

安装主内核镜像

make install

7a7d063ef7a5a7f622660da6e49a230b.png

安装过程如下:

1 内核构建系统验证内核是否构建成功。

2 系统把内核的静态部分安装到/boot目录,并以所购建的内核版本号命名此文件

如果想亲自尝试安装过程,也可以手动安装主内核镜像。

cp arch/x86/boot/bzImage /boot/vmlinuz-3.8.0

cp System.map /boot/System.map-3.8.0

至此,内核主镜像安装完毕,如果你把所有的模块都是静态的打入内核,下一步就是修改grub配置文件了,如果所有模块不是静态打入内核,就需要生成initrd.img,initrd.img的具体作用参见:http://my.oschina.net/guol/blog/37166

所以,我门还需要生成initrd.img,可以通过mkinitramfs、update-initramfs等命令生成initrd.img。

先看用update-initramfs的生成法:

update-initramfs -c -k 3.8.0

或者使用mkinitramfs来生成

mkinitramfs -o initrd.img-3.8.0 3.8.0

由于内核版本过于新,在生成的过程中提示我缺少网卡驱动,可以装好网卡驱动后继续生成(DELL 410)。

修改Grub:/boot/grub/grub.cfg

### BEGIN /etc/grub.d/10_linux ###下面添加

menuentry 'Debian GNU/Linux, with Linux 3.8.0' --class debian --class gnu-linux --class gnu --class os {

insmod part_msdos

insmod ext2

set root='(hd0,msdos1)'

search --no-floppy --fs-uuid --set 1f8c8198-15b9-4ddc-a4f3-e8456e145ed1

echo 'Loading Linux 3.8.0 ...'

linux /boot/vmlinuz-3.8.0 root=/dev/sda1 console=ttyS1,115200 ro quiet

echo 'Loading initial ramdisk ...'

initrd /boot/initrd.img-3.8.0

}

重启机器,收获成果...

eb9c531376ade479b63aaff82a12a503.png

参考:https://www.kernel.org/

https://www.kernel.org/pub/linux/kernel/v3.0/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值