土豆不好吃

[备忘录]:Linux4.9内核的正确编译之路

文章目录[显示]
这篇文章在 2016年12月30日22:35:30 更新了哦~

几天前脱袜子大叔放出了LTS版本的Linux Kernel 4.9,听说增加了一个新的TCP拥塞控制算法BBR,想着自己从来没有编译过内核,那就试试嘛,纯当积累经验了。

在这个过程中遇到了一些比较可怕的问题,比如说build出了300M的initrd.img,这……好吧!

我的环境是:Ubuntu 16.04 64位,主要参考教程戳我吧

下面就备忘一下我编译过程的整个经过吧

前置条件

用包管理器把你的系统升级到最新吧,另外,最好别玩跨越太大的升级啊。

sudo apt update
sudo apt upgrade

解决依赖

老生常谈了,该装的都装好吧

sudo apt install libncurses5-dev gcc make git exuberant-ctags bc libssl-dev

准备目录

通常来说我们选择在/usr/src下存放内核源码。实际上这并不是必须的。请注意,编译内核的时候并不需要root权限,安装的时候才需要。为了方便管理、patch内核、保持一致性起见,我们还是老实地用这个目录吧。从现在起就切换到root啦

下载、准备内核源码

在kernel.org下载内核,如果你的速度太慢,可以试试阿里云的源。

#官网
wget https://cdn.kernel.org/pub/linux/kernel/v4.x/linux-4.9.tar.xz
#阿里云
wget http://mirrors.aliyun.com/linux-kernel/v4.x/linux-4.9.tar.xz
tar xvf linux-4.9.tar.xz
cd linux-4.9

配置内核

编译内核之前,我们需要创建出来一个.config文件,由这个文件决定编译什么、编译进内核还是模块。通常来说我们有这么几种方式生成这个.config

使用你原来内核的config

cp /boot/config-`uname -r`* .config

使用默认的config(会覆盖已有的.config文件)

make defconfig

我们这里当然要使用原来的内核配置文件啦,所以来一句cp /boot/config-`uname -r`* .config即可。

或者干脆来一句

make localmodconfig

就OK了。假如我们要对内核配置进行微调,那就执行

make menuconfig

会酱紫

 

 

 

 

 

 

 

 

 

 

 

是不是很神奇能在终端里画出这么漂亮的界面?ncurses啦

为了防止它没加载我们刚刚复制过来的旧内核配置文件,我们选择 Load - ok手动加载下。

之后导航到Kernel Hacking - Compile-time checks and compiler options,按N取消对Compile the kernel with debug info的勾选

剩下的一些配置就看个人需求啦,比如说我需要编译BBR并使它成为默认的TCP 拥塞算法,那就酱紫

 

 

 

 

 

 

 

 

 

 

 

你需要支持XFS,就自己去开启。

全都配置完了之后,导航到save 保存。

下面我们就要准备开始编译啦!

警告
如果你是第一次编译内核,那么就按照上文所述即可。如果你已经编译过了,那么请运行
make clean 来清除编译过程中产生的可能导致编译失败的各种文件
make mrproper
不但会执行make clean的所有操作,还会删除.config文件,请谨慎使用

编译内核

在编译内核之前,建议大家想想以下几个问题:你是给自己电脑编译?还是虚拟机?还是VPS?

你电脑是啥处理器?几个核心几个线程的?

多大物理内存,有没有Swap?

如果是用的虚拟机,那么推荐在虚拟机的界面里开终端而不是通过OpenSSH服务;

如果是VPS,请一定要这样screen -S kernel然后再开始编译,否则SSH连接断开编译也就终止了。

你的内存比较小,比如说只有2G、4G,建议开个swap吧,免得内存耗尽编译失败

如果你自觉内存比较大不会耗尽,那就大胆的进行吧;

如果你不知道自己是啥CPU ,你就lscpu下,CPU(s)写了个4,那你就当成4核心的。(我这货是双核四线程)

 

总之,这些以防万一的准备工作是要做好的,因为编译内核是个比较消耗时间的事情,万一因为些小问题失败了,再重新来太糟心。

嗷对了,如果你是笔记本,请做好散热……

说了这么多,我就当你已经准备好了!

那么,果断的敲

make

编译内核吧!(make会包含make bzImage等操作,详见make help)

但是……忘记了我们上面说的双核四核吗?并行编译不好吗?

那么就

make -jX
X是一个整数,假如你是双核,2和3就是比较好的选择;4核那么4或6就会是比较好的选择。双核四线程请将其视作四核。千万不要尝试双核来个make -j10,这样你的电脑就得比狗还慢啦。

我就make -j4

该约妹子的约妹子,该睡觉的睡觉……

 

小提示:开启Swap的方法(128M的Swap为例)
sudo dd if=/dev/zero of=test bs=1M count=128
sudo chmod 600 test
sudo mkswap test
sudo swapon test

free确定swap已开启
为了避免出现权限的问题,就全是用root啦

安装内核和模块

进过了很长时间,终于编译完啦。那就安装吧,ls -lh一下就会发现vmlinuz其实很小的。

sudo make modules_install install

之后reboot体验新内核吧!
重启之后uname -a即可查看新内核哦,如果旧的内核没有留下来的必要了,那就使用类似

sudo apt remove linux-headers-版本号

等移除旧版本的内核

 

服务器上的4.9

后记

Some of us get dipped in flat, some in satin, some in gloss. But every once in a while you find someone who's iridescent, and when you do, nothing will ever compare.

Nothing will ever compare.  


文章版权归原作者所有丨本站默认采用CC-BY-NC-SA 4.0协议进行授权|
转载必须包含本声明,并以超链接形式注明原作者和本文原始地址:
https://dmesg.app/compile-kernel.html
退出移动版