香橙派的设备树添加设备树之踩坑全流程
最近在学习使用设备树,手头用的是orangepi的板子,但是也因为这样走了不少弯路
配置环境
设备树编译在源码目录下不能直接使用 make dtbs , 否则会出现一堆选项
首相要配置一下架构
export ARCH=arm64
然后配置交叉编译工具
export CROSS_COMPILE=你的交叉编译工具路径
之后使用make dtbs就没有问题
哪里取找设备树文件源码
先编译一遍sdk后放入开发板,进入以下路径
/boot/dtb 或者 /boot/dtb-xxx
记住该目录,进入虚拟机,进入内核源码目录,然后按该路径寻找
内核源码路径/arch/arm64/boot/dts
该文件夹有一堆芯片的设备树文件夹,找到和你开发板上在 /boot/dtb/ 下名字一样的文件夹进去
屎坑开始
按照网上的说法,当你修改了设备树文件后,在源码路径下使用make dtbs,只需要将将生成的dtb和开发板 /boot/dtb/xxx/xxx.dtb 替换,然后reboot就可以了。可惜的笔者并没有成功,期间做过如下测试
- 1.修改设备树文件,make dtbs 后,与开发板上的替换,没成功
- 2.直接编译内核,将设备树编译到内核的deb中,然后替换,没成功
- 3.全打包,及rootfs + kernel + u-boot,没成功
- 4.进入u-boot终端,将/boot/dtb/sunxi/下的dtb文件写入dram,然后再把镜像写入dram,bootm(理论上说,这个最应该成功),没成功
最后笔者使用覆盖设备树(Devices-tree overlays),把设备树当插件一样,随意替换就行
覆盖设备树
无论在开发板上的dtb文件夹还是在源码下的dtb文件夹,这之中都有overlay文件夹,我们只需要将编译好的dtbo文件放入其中就行
进入其中,修改Makefile,加入要生成的dtbo文件(我这有两个)
在该目录下加入你的设备树文件(dts),这里不赘述设备树插件如何写,相关链接如下
[10. 设备树插件(Device Tree Overlays) — 野火]嵌入式Linux驱动开发实战指南——基于LubanCat-RK系列板卡 文档 (embedfire.com)
然后回到源码目录下,进行make dtsb
代码没问题的话,此时overlay下面应该会生成dtbo文件
将该文件传到开发板的overlay文件夹下,reboot
本来笔者以为到这应该没用问题了,开始/proc/device-tree下依然没用对应的节点生成
Env.txt
第一次注意是在野火的教程下
以为我之前也在香橙派的 /boot/ 下见到xxxEnv.txt,会开发板上一看,果真如此
之后去查取,果然如此,类似配置文件一样,相关链接如下
上面是一些规则,其实我也是看boot.cmd文件之后才推断出这是一个配置文件,其中这个overlay_prefix是插件设备树的前缀,只要满足这个前缀的dtbo文件才会被选中
根据野火的说法,还需要加入overlays选项,只有在overlays中的文件才会被加入内核
可以选择加入多个插件设备树文件,文件和文件之前用空格隔开,去掉前缀
才会被加入内核
[外链图片转存中…(img-CuxZ029i-1714750861456)]
可以选择加入多个插件设备树文件,文件和文件之前用空格隔开,去掉前缀
然后reboot,就可以在/proc/device-tree/下看到自己的节点了