一、环境准备
事先在VMware上安装一台debian 11.8的虚拟机,在本示例中,配置该虚拟机为4核,3GB内存;
·注:网络适配器选择默认的NAT
·关于如何安装debian11.8的虚拟机,参考网上教程即可。
·默认情况下,Debian系统是不开启SSH远程登录的。但是,虚拟机需要与宿主机进行传输文件,为了解决这个问题,通过以下命令去安装ssh软件包:
命令:apt-get install ssh
但是期间会遇到另外一个问题:
更换介质:请把标有 “Debian GNU/Linux 11.8.0 _Bullseye_ - Official amd64 DVD Binary-1 20231007-14:05” 的盘片插入驱动器“/media/cdrom/”再按「回车」键
解决方法:vi /etc/apt/sources.list把那出现的那行注释掉<含CD盘的一行>;
这样就可以通过Xshell通过ssh来远程登录,并使用Xftp来进行文件传输。
·拉取安装编译kpatch组件以及编译内核所依赖的环境:
命令:apt-get install make gcc libelf-dev git flex bison libssl-dev
·安装kpatch-build命令运行所需要的环境:
命令:apt-get install dpkg-dev gawk
·安装加速补丁编译组件ccache
命令:
apt-get install ccache
ccache --max-size=5G
(可选项,但高度推荐安装,可以加快补丁编译)
·拉取安装kpatch组件:
命令:
git clone https://hub.yzuu.cf/dynup/kpatch.git
(暂用同步站的源码,github以及北极星仓库拉取不了)
make
make install
·准备好以下两个deb包以及内核源码包:
linux-image-5.10.0-12-2-amd64-unsigned_5.10.103-1_amd64.deb
linux-image-5.10.0-12-2-amd64-dbg_5.10.103-1_amd64.deb
·安装这两个deb包:
sudo dpkg -i linux-image-5.10.0-12-2-amd64-unsigned_5.10.103-1_amd64.deb
sudo dpkg -i linux-image-5.10.0-12-2-amd64-dbg_5.10.103-1_amd64.deb
成功安装之后,直接重启虚拟机,然后选择对应内核进行启动;
到此为止,环境已经准备完毕。
二、ko模块制作
2.1 预处理
预先准备好内核源码包:linux-5.10.103_5.10.0-12-2.tar.gz,将其解压
命令:tar -xvf linux-5.10.103_5.10.0-12-2.tar.gz
为了避免编译过程的非必要错误,首先进入内核目录,执行以下两个命令:
git config --global --add safe.directory /home/hxn/linux-5.10.103(此处为你的内核源码目录名)
make prepare
2.2 patch生成
拷贝两份源码,例如将源码分别存放在linux.src和linux.kpatch(待修改源码)
命令:
cp -r linux-5.10.103 linux.src
cp -r linux-5.10.103 linux.kpatch
例如,修改linux.kpatch/fs/proc/meminfo.c,修改后为:
使用diff命令生成patch文件:
命令:diff -u linux.src/fs/proc/meminfo.c linux.kpatch/fs/proc/meminfo.c > mem.patch
2.3 编译ko模块
使用kpatch-build命令进行编译
命令:
kpatch-build mem.patch --skip-compiler-check -s linux-5.10.103 -R -c /boot/config-5.10.0-12-2-amd64 -v /usr/lib/debug/vmlinux-5.10.0-12-2-amd64 -j4
成功生成livepatch-mem.ko文件,首次编译过程时间较长(大约1h),当前目录下生成liveXXX.ko。
查看livepatch-mem.ko的版本信息,需要提前添加环境变量,如图所示:
export PATH=$PATH:/usr/sbin
modinfo livepatch-mem.ko