
开发板 内核、驱动模块、设备树(插件)的编译安装
使用野火鲁班猫开发板的一些记录。
·
使用野火鲁班猫开发板的一些记录
一、系统镜像烧录
镜像资料: 野火资料中心
镜像烧录: 野火B站视频
连接开发板:
二、在板卡上编译安装内核驱动模块
在烧录了通用镜像后,想要配置一些镜像中没有驱动功能,可以通过添加驱动模块来实现,以下都是在目标机下编译目标机,不涉及交叉编译
- 查看目标机器的内核版本
uname -r
,下载与目标机器系统内核版本一致的内核源代码
我的目标机器野火鲁班猫开发板,直接使用野火提供的内核源代码,见野火资料中心
若要下载官方Kernel源代码,见推荐网址,优点:下载速度快、版本选择方便 - 下载源代码至任意位置,如
/home/$(用户名)/
下,kernel源代码 目录如下图所示, - 获取配置文件有两种方式
方法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
- 准备编译的环境
sudo apt install make gcc-arm-linux-gnueabihf gcc bison flex libssl-dev dpkg-dev lzop
,参考 - 源代码目录下开始编译,
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
参考 - 手动将生成.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.编译内核
- 编译环境配置,
sudo apt install make libssl-dev liblz4-tool device-tree-compiler bison flex u-boot-tools gcc-aarch64-linux-gnu
gcc-aarch64-linux-gnu
是交叉编译链工具,我第一次用的是在国内源网站下载的交叉编译链工具,可能版本太新了,编译野火给的内核源代码会出错 make clean
删除大多数的编译生成文件, 但是会保留内核的配置文件.config, 还有足够的编译支持来建立扩展模块make mrproper
删除所有的编译生成文件, 还有内核配置文件, 再加上各种备份文件make distclean mrproper
删除的文件, 加上编辑备份文件和一些补丁文件。- 配置文件的结果就是生成一个
.config
文件,和二.3一样# 切换到内核源码根目录 cd kernel # 使用lubancat2_defconfig配置文件 make ARCH=arm64 lubancat2_defconfig # 编译内核,指定交叉编译工具,如果没有导出编译器环境变量,使用绝对路径 make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- -j8
- 将内核替换目标机器上的,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
更多推荐
所有评论(0)