arm 内核版本编译记录

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博客,将 模块加载的检查之类的去掉,在本案例中并不适用,因为此案例的宿主系统内核不受我们控制。

    

猜你喜欢

转载自blog.csdn.net/proware/article/details/126901613