海运的博客

ubuntu下交叉编译arm64/armbian内核模块

发布时间:October 13, 2018 // 分类:N1 // 5 Comments

安装编译环境及下载交叉编译工具:

apt-get install gcc make pkg-config git bison flex libelf-dev libssl-dev libncurses5-dev bc
wget https://releases.linaro.org/components/toolchain/binaries/latest-7/aarch64-linux-gnu/gcc-linaro-7.3.1-2018.05-x86_64_aarch64-linux-gnu.tar.xz
tar -Jxvf gcc-linaro-7.3.1-2018.05-x86_64_aarch64-linux-gnu.tar.xz 
export ARCH=arm64 
export CROSS_COMPILE=/root/gcc-linaro-7.3.1-2018.05-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-

查看内核版本:

uname -r
4.18.7-aml-s9xxx

下载内核源码:

git clone https://github.com/150balbes/Amlogic_s905-kernel.git
cd Amlogic_s905-kernel
#使用4.18.7内核
git checkout 20181012

初始化配置,不做这步直接编译模块会提示错误: fatal error: include/generated/autoconf.h: No such file or directory。

cp config_5.60 .config
make prepare
make scripts

编译指定模块:

make M=net/ipv4/ CONFIG_TCP_CONG_BBR=m modules
make M=drivers/usb/class CONFIG_USB_PRINTER=m modules

编译所有模块:

make modules 
make modules_install INSTALL_MOD_PATH=/

复制模块到目标机器对应目录并加载:

cp tcp_bbr.ko /lib/modules/`uname -r`/kernel/net/ipv4
#echo 'kernel/net/ipv4/tcp_bbr.ko:' >> /lib/modules/`uname -r`/modules.dep
depmod 
modprobe tcp_bbr

加载模块时出现invalid module format的错误,是version magic版本不一致或crc校验不通过,可通过modinfo查看本机模块和新编译模块version magic版本信息,通过dmesg查看log出现以下错误:

sch_fq: version magic '4.18.7 SMP preempt mod_unload aarch64' should be '4.18.7-aml-s9xxx SMP preempt mod_unload aarch64'

可见内核版本后缀不一样,在编译时添加版本后缀:

make LOCALVERSION="-aml-s9xxx"

编译模块时添加版本后缀无效?那就在初始时添加,后续编译时不要再次添加。

make LOCALVERSION="-aml-s9xxx" modules_prepare

参考:
https://serverfault.com/questions/568395/what-is-creating-the-generated-autoconf-h
https://wiki.archlinux.org/index.php/Compile_kernel_module

标签:none

有 5 条 关于" ubuntu下交叉编译arm64/armbian内核模块 "的评论

  1. 感谢 感谢

    请问一下“git checkout 20181012”这条命令是什么意思,没有google到。
    #使用4.18.7内核
    git checkout 20181012

    那假如我要编译3.14的内核,这条命令应该换成什么呢?

  2. 海运 海运

    可在github选择指定的branch或tag查看Makefile文件内核版本
    git指定branch或tag:https://www.haiyun.me/archives/1284.html

  3. 感谢 感谢

    好的谢谢。

  4. jiqz jiqz

    make M=net/ipv4/ CONFIG_TCP_CONG_BBR=m modules
    编译这个指定模块,生成了好几个.o文件,有tcp_bbr.ko tcp_bic.ko 等,只需要复制tcp_bbr.ko这个就行了吗?别的不是依赖吗?

    另外,可以用M直接指定目标位置吗?比如 /lib/modules/4.18.7-aml-s9xxx/kernel/net/ipv4

    1. 海运 海运

      n1编译bbr内核模块参考这个:https://www.haiyun.me/archives/1273.html

发表评论

分类
最新文章
最近回复
  • 海运: 换回了5.3内核,5.8用5.3 dtb虽然能开机且负载正常,但也有其它问题,不建议使用。
  • shangyatsen: 后面的内核高精度计时器的问题使用5.4或者5.3的dtb会正常吗?我也发现有这个日志出现。感觉...
  • 海运: 缺少相应模块?
  • lee: 你好,我执行这条语句 iptables -t mangle -A PREROUTING -m ...
  • 海运: 只更新rootfs,不更新内核,我在用5.3配19.10,懒得再升最新版了,很稳定。 注意:更...
  • lyly168: 这是手动挂载吧,请问自动挂载要怎么弄?
  • swswsw1: 请问升级后,内核更新了吗?听说N1只有在5.0.2的内核下才稳定,怕升级了之后功耗太高
  • 海运: LOG_LEVEL是配置文件变量,本文配置使用systemd启动在EnvironmentFil...
  • 1: 我源碼沒有任何修改,同樣編譯的在X86上可以正常運行。然後原封不動編譯aarch64就提示以上錯誤。
  • 海运: 你配置变量有问题?LOG_LEVEL? https://github.com/dani-gar...