阅读须知:这一篇文章写于我当时联创夏令营时做的一个任务,大概就是需要我们修改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,小心处理就好。记得换源,下载快一点。
其实文本配置文件就是指定启用哪一些模块,以及哪些模块打入内核里面,哪些放在modules文件夹里面
启用的方法可以是直接复制你自己内核里面的配置,也可以用make defconfig默认配置,或者make menuconfig然后save,还有很多,不一一列举了。
我们用默认的就好
这个默认配置才四千多行,比5.x的一万多行小太多了,估计编译出来的也要小不少
然后make mrproper清除编译中产生的中间文件,当你编译失败然后解决问题重新编译后可以运行一下
啊,把配置文件也删了,太狠了
接下来很多命令要root权限,我们直接进入root模式吧
这里由于我给虚拟机分了两个cpu,所以我就make -j 2了,快一点
然后就开始编译了,耐心等待即可,可以去看一部电影或者喝一杯卡布奇诺
神奇,怎么4.x版本安装得这么快,十分钟吧就安装好了,而且,为什么这么小,不管了,先试试吧
这一步是安装内核模块,他会把这些模块安装到 /lib/modules这个目录里面
可以看到现在这个目录下面一开始只有我当前内核得模块得文件
然后咱们执行以下这个模块安装命令试试
这什么情况?怎么一秒就安装好了。。。
但是现在内核文件还没有生成
我们接下来生成内核文件
这一步就是安装内核了,这一步具体干了什么事情呢?
安装了内核相关的模块,安装bzImage, 生成initramfs文件以及会修改grub的配置文件,但是你还得设置成开机选择内核版本, 编辑/etc/default/grub
这个文件,不过不同版本的不太一样,我之前的5.x的是修改两个条目,其中一个改成menu,还有一个是等待时间,我改成了10
我傻了,怎么安装得这么快,算了,先试试吧
然后sudo update-grub
然后重启一下试试
可以启动,但是是一个最小的linux,图形界面都没有,我就说为啥编译这么快,我人傻了
然后查看一下版本,发现确实没毛病
这个是在init/main.c下面的start_kernel函数下面
然后重新make,增量编译很快就结束了
然后重复上述步骤后,发现真的出现了一个新的内核
然后我发现我添加的那里貌似不是一个好地方,我按照这个里面的字符串查找了一下,有了新发现
哈哈,就在这里添加了,fuck linux
对了,还要注意我们是x86的架构,所以要选对文件,所以是这个文件
编译成功了,开森!
哈哈,成功了,与内核达成了同步!