赞
踩
假如即将调试的内核版本是 4.14.1,先检查一下本地内核的版本号,如下:
zhangji16@zhangji16vm:~/c_study/kernel_prj$ uname -a
Linux zhangji16vm 4.4.0-154-generic #181-Ubuntu SMP Tue Jun 25 05:29:03 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux
zhangji16@zhangji16vm:~/c_study/kernel_prj$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 16.04.6 LTS
Release: 16.04
Codename: xenial
可以看到自己的版本号是 4.4.0-154,因此需要切换内核版本。
下载链接为 https://mirrors.edge.kernel.org/pub/linux/kernel/v4.x/
下载 linux-4.14.1.tar.gz 到本地,这里说明一下,紧随其后的 linux-4.14.1.tar.sign 文件作用类似MD5一样的作用,用于校验保证所下载的内核版本没有被篡改。
然后使用如下命令解压到本地,并把解压后的内核文件拷贝到本机源码目录,具体如下:
zhangji16@zhangji16vm:/tmp$ tar -zxvf linux-4.14.1.tar.gz
zhangji16@zhangji16vm:~/c_study/kernel_prj$ sudo cp -r /tmp/linux-4.14.1/ /usr/src/
编译内核前,可以考虑把本地现有的内核配置文件复制到即将编译的内核源码目录中,以便使用目的是使用在boot目录下的原配置文件。
zhangji16@zhangji16vm:/usr/src/$ cd /usr/src/linux-4.14.1
zhangji16@zhangji16vm:/usr/src/linux-4.14.1$ sudo cp /boot/config-4.4.0-154-generic .config
接下来的操作一定要使用root权限操作(一定加sudo)
zhangji16@zhangji16vm:/usr/src/linux-4.14.1$ sudo make menuconfig
会弹出一个图形窗口,让你选择编译的选项,关于编译选项的一些说明:
<>或[]——将该功能编译进内核
[ ]——不将该功能编译进内核
[M]——将该功能编译成可以在需要时动态插入到内核中的代码
由于只是搭建一个内核环境来调试某CVE,因此对于内核的配置可以从简,只需要采用默认的设置即可。
zhangji16@zhangji16vm:/usr/src/linux-4.14.1$ sudo make -j2
-j2 表示启用2个线程进行编译加速,条件允许的话也可以 -j4,这一步所需时间会比较长,一般会在一个小时以上。
zhangji16@zhangji16vm:/usr/src/linux-4.14.1$ sudo make -j2 modules_install
zhangji16@zhangji16vm:/usr/src/linux-4.14.1$ sudo make -j2 install
zhangji16@zhangji16vm:/usr/src/linux-4.14.1$ sudo mkinitramfs -o /boot/initrd.img-4.14.1
zhangji16@zhangji16vm:/usr/src$ sudo update-initramfs -c -k 4.14.1
zhangji16@zhangji16vm:/usr/src$ sudo update-grub2
检查一下,配置文件中是否有 4.14.1 等字符,如果有,则说明基本更新启动配置成功
重启系统后
zhangji16@zhangji16vm:~$ uname -a
Linux zhangji16vm 4.14.1 #1 SMP Fri Jul 26 16:31:08 CST 2019 x86_64 x86_64 x86_64 GNU/Linux
内核版本更换成功,整个内核环境基本搭建完成。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。