开发板 内核、驱动模块、设备树(插件)的编译安装

使用野火鲁班猫开发板的一些记录

一、系统镜像烧录

镜像资料: 野火资料中心

镜像烧录: 野火B站视频

连接开发板:

  1. 野火B站视频
  2. 参考我的上篇文章,初次连接可通过以太网令PC与开发板进入同一个局域网

二、在板卡上编译安装内核驱动模块

在烧录了通用镜像后,想要配置一些镜像中没有驱动功能,可以通过添加驱动模块来实现,以下都是在目标机下编译目标机,不涉及交叉编译

  1. 查看目标机器的内核版本uname -r ,下载与目标机器系统内核版本一致的内核源代码
    我的目标机器野火鲁班猫开发板,直接使用野火提供的内核源代码,见野火资料中心
    若要下载官方Kernel源代码,见推荐网址,优点:下载速度快、版本选择方便
  2. 下载源代码至任意位置,如 /home/$(用户名)/ 下,kernel源代码 目录如下图所示, 在这里插入图片描述
  3. 获取配置文件有两种方式
    方法A 在源代码目录下cp /boot/config-$(uname -r) .config,复制当前内核的配置文件过来。
    打开配置文件,尾部=m是编译为模块,=y是编译进内核,is not set是两者都不。
    查找=m,都替换为 is not set(注意is前面有一个空格),并注释该行。
    查找需要的配置所在行,修改为=m
    方法B 安装库sudo apt install libncurses-dev,在源代码目录下make menuconfig
    此时会出现图形化选择界面如下所示,按y、n、m键进行选择,*对应y,最后save配置.config
    注意事项:编译安装少量模块,推荐方法A

在这里插入图片描述

  1. 准备编译的环境 sudo apt install make gcc-arm-linux-gnueabihf gcc bison flex libssl-dev dpkg-dev lzop参考
  2. 源代码目录下开始编译,make modules -j4
    问题1: 有关找不到python的错误
    解决方案:
    查看python版本,python3 --version,应该是都有的;
    如果是在ubuntu20.04上,直接sudo apt-get install python-is-python3
    其他,sudo ln -s /usr/bin/python3 /usr/bin/python
    问题2:xxxxxxxxxxxxxxxx:xxxxxxxxx Exec format error
    解决方案:
    进行目标机器内核源代码目录cd /usr/src/linux-headers-$(uname -r)/,执行make scripts 参考
  3. 手动将生成.ko模块拷贝到系统目录/lib/modules$(uname -r)/或者自定义目录下,不能执行make modules_install,否则原来的模块会被清空
    问题1:Warning: modules_install: missing ‘System.map’ file. Skipping depmod.
    解决方案:
    1、ls -l /boot/System.map*
    2、sudo ln -s /boot/System.map-$(uname -r) /lib/modules/$(uname -r)/build/System.map

三、在PC上交叉编译

1.编译内核

  1. 编译环境配置,sudo apt install make libssl-dev liblz4-tool device-tree-compiler bison flex u-boot-tools gcc-aarch64-linux-gnu
    gcc-aarch64-linux-gnu是交叉编译链工具,我第一次用的是在国内源网站下载的交叉编译链工具,可能版本太新了,编译野火给的内核源代码会出错
  2. make clean 删除大多数的编译生成文件, 但是会保留内核的配置文件.config, 还有足够的编译支持来建立扩展模块
    make mrproper 删除所有的编译生成文件, 还有内核配置文件, 再加上各种备份文件
    make distclean mrproper删除的文件, 加上编辑备份文件和一些补丁文件。
  3. 配置文件的结果就是生成一个.config文件,和二.3一样
    # 切换到内核源码根目录
    cd kernel
    
    # 使用lubancat2_defconfig配置文件
    make ARCH=arm64 lubancat2_defconfig
    
    # 编译内核,指定交叉编译工具,如果没有导出编译器环境变量,使用绝对路径
    make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- -j8
    
  4. 将内核替换目标机器上的,ubuntu互传之间可以使用scp
    # 我这是arm64 
    cd kernel
    # 不要替换System.map,不然设备树插件失效
    # sudo scp System.map 用户名@地址:/boot/
    sudo scp .config 用户名@地址:/boot/
    cd arch/arm64/boot
    sudo scp 内核名 用户名@地址:/boot/
    # 把老的替换了
    # 如果内核名字没变的化就不用软件链接
    # 软件连接参考https://doc.embedfire.com/lubancat/build_and_deploy/zh/latest/building_image/kernel_download/kernel_download.html#linux-sd-emmc-nand
    # 在/lib/modules/$(uname -r)/kernel/下 可能需要重新depmod一下,恢复自动加载功能(个人经验)
    sudo reboot
    

2.编译驱动模块

编译内核的时候 包含了 编译.config中标注=m的驱动模块,也可以单独编译驱动模块(.config中自带的,其他的比如helloworld驱动模块是需要内核才能编译的),执行

make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- modules -j8

3.编译设备树、设备树插件

编译内核的时候 包含了编译设备树及插件,单独编译设备树及插件的命令,在写好dts文件后,源代码目录下执行以下命令,更新dtb(设备树)或者dtbo(设备树插件)

make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- dtbs -j8

查看设备树或者设备树插件是否加载成功

# 根目录下
ls /sys/firmware/devicetree/base
# 或者
ls /proc/device-tree
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值