1. 首先 menuconfig 生成配置文件
不然会报错:
2. 编译时报错
错误信息:
make[1]: *** 没有规则可制作目标“debian/canonical-certs.pem
最后表现为上图所示。
有些文章,例如 会提及,即降低make的版本,实际上在此处不需要。
解决:
.config文件中,将如下配置宏的值清空
直接把=后面的内容改成 "" 就可以。
3. 编译自己的模块代码
配置环境变量
export ARCH=arm64
export CROSS_COMPILE=aarch64-linux-gnu-
export PATH=$PATH:$(pwd)/../../toolchain/gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu/bin/
具体工具链的名称和路径根据自己的环境信息进行配置。
然后直接在源码路径下执行make,在执行前,主要修改内核源码路径即可。
4. 插入模块
插入模块其实很简单,但是由于编译依赖的内核和实际商用OS上运行的内核有些许差异。而商用内核又开启了模块的版本魔数校验。
例如本模块的插入时,提示如下信息:
insmod wwww.ko
insmod: ERROR: could not insert module wwww.ko: Invalid module format
在dmesg里面报信息如下:
dmesg
[ 259.325391] wwww: version magic '4.19.0+ SMP mod_unload modversions aarch64' should be '4.19.115-g349e93465 SMP preempt mod_unload aarch64'
解决方法:
网上提及的修改内核配置,例如 (12条消息) 模块加载时 insmod “Invalid module format ”问题解决_ymangu的博客-CSDN博客,将 模块加载的检查之类的去掉,在本案例中并不适用,因为此案例的宿主系统内核不受我们控制。