【硬核】手摸手教你修改编译安装linux内核

2020/12/06 21:31:31

阅读须知:这一篇文章写于我当时联创夏令营时做的一个任务,大概就是需要我们修改linux内核的网络协议栈,然后达到发送特定的网络包可以知道这台电脑是否被后门(安装了我们修改的linux内核)或者在这台电脑上面执行shell命令等。之后为了避免答辩的时候卡壳,所以写了一份提纲,也就是这篇文章啦,同样,不打算做修改,毕竟该有的步骤都有了。

查看当前的内核版本

uname -r

然后到官网去找一个内核版本进行下载

传送门

我这是第二次安装,选了一个稍微低一点的版本,第一次选的高版本默认配置编译出来的东西19个G, SSD顶不住了

https://mirrors.edge.kernel.org/pub/linux/kernel/v4.x/linux-4.15.3.tar.xz

下载的话,wget就可以了

解压的话一条命令就够了:

sudo tar -xvJf linux-xxxxx

源码还挺大,害怕

然后编译的时候你会遇到一系列的错误,但是概括而言其实错误有两类,一个是缺少必要的包或者工具,再一个是这个版本的内核打了patch,小心处理就好。记得换源,下载快一点。

然后就需要准备文本配置文件 .config

其实文本配置文件就是指定启用哪一些模块,以及哪些模块打入内核里面,哪些放在modules文件夹里面

启用的方法可以是直接复制你自己内核里面的配置,也可以用make defconfig默认配置,或者make menuconfig然后save,还有很多,不一一列举了。

我们用默认的就好

这个默认配置才四千多行,比5.x的一万多行小太多了,估计编译出来的也要小不少

然后make mrproper清除编译中产生的中间文件,当你编译失败然后解决问题重新编译后可以运行一下

啊,把配置文件也删了,太狠了

接下来很多命令要root权限,我们直接进入root模式吧

make开始编译

这里由于我给虚拟机分了两个cpu,所以我就make -j 2了,快一点

然后就开始编译了,耐心等待即可,可以去看一部电影或者喝一杯卡布奇诺

神奇,怎么4.x版本安装得这么快,十分钟吧就安装好了,而且,为什么这么小,不管了,先试试吧

编译完成后就make modules_install

这一步是安装内核模块,他会把这些模块安装到 /lib/modules这个目录里面

可以看到现在这个目录下面一开始只有我当前内核得模块得文件

然后咱们执行以下这个模块安装命令试试

这什么情况?怎么一秒就安装好了。。。

但是现在内核文件还没有生成

我们接下来生成内核文件

再然后就make install

这一步就是安装内核了,这一步具体干了什么事情呢?

安装了内核相关的模块,安装bzImage, 生成initramfs文件以及会修改grub的配置文件,但是你还得设置成开机选择内核版本, 编辑/etc/default/grub这个文件,不过不同版本的不太一样,我之前的5.x的是修改两个条目,其中一个改成menu,还有一个是等待时间,我改成了10

我傻了,怎么安装得这么快,算了,先试试吧

然后sudo update-grub

然后重启一下试试

可以启动,但是是一个最小的linux,图形界面都没有,我就说为啥编译这么快,我人傻了

然后查看一下版本,发现确实没毛病

暂且不管这个busybox是否支持网络功能,我先用它来做一下实验,看能否打印我的printk

这个是在init/main.c下面的start_kernel函数下面

然后重新make,增量编译很快就结束了

然后重复上述步骤后,发现真的出现了一个新的内核

然后我发现我添加的那里貌似不是一个好地方,我按照这个里面的字符串查找了一下,有了新发现

哈哈,就在这里添加了,fuck linux

对了,还要注意我们是x86的架构,所以要选对文件,所以是这个文件

编译成功了,开森!

哈哈,成功了,与内核达成了同步!