urain39 / stuff

Noting here.
1 stars 0 forks source link

编译对应闭源 Linux 内核版本的内核模块 #130

Open urain39 opened 1 year ago

urain39 commented 1 year ago

TL;DR:

1. 检查 include/linux/vermagic.h 并修改 defconfig
2. make xxx_defconfig
3. make prepare
4. make scripts
5. 修改 include/config/kernel.release
6. 修改 include/generated/utsrelease.h
7. 进入内核模块目录并编译内核(make -C KERNDIR M=MODDIR modules)

有时我们可能会遇到这样一种情况,内核并没有开源,但支持加载内核模块。想在这样的内核上做扩展,一般得靠内核模块来实现。

可问题是,内核模块只能在对应版本号的内核上使用。一般编译时生成的版本号都是带有随机后缀的,即使是使用相同版本的内核,编译的内核模块一般情况下也是无法直接使用的。

我在网上搜索了好几篇关于内核模块和内核版本的的文章后,终于找到了include/linux/vermagic.hinclude/config/kernel.releaseinclude/generated/utsrelease.h这三个相关的文件。

其中include/linux/vermagic.h定义的是内核模块中校验的版本魔数(vermagic),而下面两个则是定义内核版本号。一般情况下,我们只需要改下面两个文件,或者说只修改最后一个文件就行。

但如果你的内核配置不太一样,那么你可能需要根据你实际的目标内核版本和include/linux/vermagic.h中的规则,修改xxx_defconfig。这些信息可以使用16进制编辑器在原有的内核模块中搜索关键词vermagic找到。

当修改完成后,那么你就可以直接编译内核模块了。