写在前面
经过两天的反复实验,磕磕绊绊终于完成了一个完整的成功案例,编译内核时间长达两到三个小时,而且很容易出现错误,所以提示大家做好系统备份(VMware备份很简单,拍摄快照即可,建议在关机状态下);
还有一些基础的工具,比如gcc,openssl-devel
这些并没有提示安装,如果是新系统的话也请检查是否安装了这些必要工具;
下载源码包网速不佳的可以找FQ插件(时好时坏吧,昨天不行,今天试了还可以);
要找比自己系统内核高一点的内核做实验;
我的实验环境
VMware 14 Pro虚拟机
系统版本:CentOS Linux release 7.5.1804 (Core)
内核版本:3.10.0-957.10.1.el7.x86_64
Linux版本:Red Hat 4.8.5-36
一、系统准备
磁盘容量要求
推荐可用容量20G+,最低不小于15G,具体查看方法
#输入命令
df -h
如果容量不够,先进行扩容或重新安装操作系统并分配更多的磁盘空间;
克隆系统
由于编译更换内核比较复杂,具有一定”危险性“,所以如果是使用VMware虚拟机,可以先克隆系统环境,在克隆出来的系统下做此实验,不会对原系统造成影响;
建议在关机状态下进行克隆操作,右键点击目标虚拟机,选择管理->克隆
;
克隆源选择
如果是拍摄过快照(进行过备份),可以从现有快照克隆,如果没有选择第一项即可;
克隆类型选择
两种方式理论上都不会影响到源系统的运行;
磁盘空间足够大的建议创建完整克隆,不用依赖源系统;
链接克隆,占用空间小,但需要依赖源系统存在;
然后输入名称和位置就可以了;
查看ip地址
开机登录后,查看ip地址命令
ip addr
得到ip地址后就可以使用其他终端工具连接,获得更好的体验;
二、内核源码包准备
查看内核版本
首先查看当前系统使用的内核版本,输入命令
uname -r
#我的是
#3.10.0-957.10.1.el7.x86_64
下载内核源码包
提示:如果下载速度非常慢,可以挂VPN或者使用浏览器FQ插件提速;
下载方法:https://ieevee.com/tech/2018/03/30/centos-kernel.html
我的内核版本是这里3.10.0-957.10.1.el7.x86_64
,所以我下载的是linux-3.10.0-957.12.1.el7.tar.xz
;
(一般选择要比自己的内核版本高一点点的版本)
注意:文件下载下来之后需要重命名带.tar.xz
后缀,才能进行解压;(不要在Windows下解压)
解压内核源码包
首先解压源码包;
tar -xvJf linux-3.10.0-957.12.1.el7.tar.xz
然后将解压后的文件夹移至/usr/src/
目录下
mv linux-3.10.0-957.12.1.el7 /usr/src/
三、修改源码
首先切换到源码主目录,下面的操作全都在主目录下进行
cd /usr/src/linux-3.10.0-957.12.1.el7/
定义pfcount变量
这里需要修改arch/x86/mm/fault.c
文件,由于文件内容较长,我们首先要确定添加大致位置;
cat -n arch/x86/mm/fault.c | grep __do_page_fault
根据输出,大致位置在1114
行(你的可能不一样,以你的输出为主)
vim打开,并按:
输入你的行数
,回车跳转;
vim arch/x86/mm/fault.c
即可跳转至目标行