设备树和设备树插件¶
本章配套视频介绍:

《19-鲁班猫更新内核和设备树》
https://www.bilibili.com/video/BV1zc411A7Me/
设备树¶
Linux内核从3.x开始引入设备树的概念,实现驱动代码与设备信息相分离。 设备树用于描述一个硬件平台的硬件资源。这个“设备树”可以被bootloader(uboot)传递到内核, 内核可以从设备树中获取硬件信息。 相当于使用定制的设备树就可以操作不一样的硬件资源, 比如i2c,spi,mipi,mini-pcie,i2s等接口,都是通过设备树去配置使能才能去正常操作它们。

设备树以“树状”结构描述硬件资源。例如本地总线为树的“主干”在设备树里面称为“根节点”, 挂载到本地总线的spi总线为树的“枝干”在设备树里称为“根节点的子节点”, spi总线下的spi设备不止一个,这些“枝干”又可以再分。
警告
以下设备树和设备树插件的使用仅适用于使用extboot分区的Ubuntu镜像,其他系统镜像无法切换主设备树和设备树插件,详情请查看 设备树的编译
设备树的使用¶
在LubanCat-RK系列的板子中,每块板子都有很多的主设备树,位于 /boot/dtb 里
由于我们的通用镜像需要支持很多不同的板子,因此,我们通过开机读取设备id改变设备树,从而适配不同的板子
LubanCat-RK系列的板子的设备树由一个文件来指定,它是 /boot/rk-kernel.dtb ,如下图:

rk-kernel.dtb 是通过软链接的方式链接到 rk3566-lubancat1-mipi.dtb 这个设备树上的, 因此,现在的我能够打开屏幕
如果想要使用其他的主设备树的话,可以使用以下命令
1 2 3 4 5 | #进入/boot目录下
cd /boot
#切换开启HDMI模式,关闭mipi屏幕的设备树
ln -sf dtb/rk3566-lubancat1.dtb rk-kernel.dtb
|
注意
使用ln命令时,一定要使用相对路径,不能使用绝对路径。
设备树插件¶
Linux4.4以后引入了动态设备树(Dynamic DeviceTree)。 设备树插件可以理解为主设备树的“补丁”它动态的加载到系统中,并被内核识别。
我们可以这样理解设备树插件:主设备树为一颗大树,设备树插件就相当于园丁, 园丁不仅可以修剪枝叶,还可以给大树进行稼接操作。
修剪:把一部分不需要的设备禁止使能
嫁接:添加新的东西到主设备里,例如:创建新的设备节点
设备树插件的使用¶
LubanCat-RK系列的板子的设备树插件位于 /boot/dtb/overlay 里
1 2 3 4 5 6 7 8 9 10 11 12 13 | cat@lubancat:/boot/dtb/overlay$ ls
README.rockchip-overlays.md lubancat-pwm8-m0-overlay.dtbo
lubancat-dsi0-mipi-display-overlay.dtbo lubancat-pwm9-m0-overlay.dtbo
lubancat-gmac1-disable-overlay.dtbo lubancat-spi3-m1-gpio-cs-overlay.dtbo
lubancat-i2c3-m0-overlay.dtbo lubancat-spi3-m1-overlay.dtbo
lubancat-i2c5-m0-overlay.dtbo lubancat-uart3-m0-overlay.dtbo
lubancat-pwm10-m0-overlay.dtbo lubancat-uart3-m1-overlay.dtbo
lubancat-pwm11-ir-m0-overlay.dtbo lubancat-uart8-m0-overlay.dtbo
lubancat-pwm14-m0-overlay.dtbo rockchip-fixup.scr
lubancat-pwm3-ir-overlay.dtbo
cat@lubancat:/boot/dtb/overlay$
#集合了LubanCat-RK系列的所有的板子的设备树插件
|
而配置设备树插件的方法是修改设备树插件的配置文件,配置文件位于 /boot/uEnv 内
由于在LubanCat-RK系列的板子具有多种型号,我们的配置文件是以板子的型号命名
1 2 3 4 5 6 | cat@lubancat:/boot/uEnv$ ls
uEnv.txt uEnvLubanCat1N.txt uEnvLubanCatZN.txt
uEnvLubanCat1.txt uEnvLubanCat2.txt uEnvLubanCatZW.txt
cat@lubancat:/boot/uEnv$
#uEnvLubanCat1.txt 适配LubanCat1的板子
|
修改配置文件¶
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | #打开你的板子的配置文件
sudo vi /boot/uEnv/uEnvBoard.txt
#下列为vim打开配置文件的内容
uname_r=4.19.232
size=0x1000000
#dtb=rk3566-lubancat1.dtb
enable_uboot_overlays=1
#overlay_start
#dtoverlay=/dtb/overlay/lubancat-i2c3-m0-overlay.dtbo
#dtoverlay=/dtb/overlay/lubancat-i2c5-m0-overlay.dtbo
#dtoverlay=/dtb/overlay/lubancat-pwm10-m0-overlay.dtbo
dtoverlay=/dtb/overlay/lubancat-pwm14-m0-overlay.dtbo
#dtoverlay=/dtb/overlay/lubancat-pwm8-m0-overlay.dtbo
#dtoverlay=/dtb/overlay/lubancat-pwm9-m0-overlay.dtbo
dtoverlay=/dtb/overlay/lubancat-spi3-m1-gpio-cs-overlay.dtbo
#dtoverlay=/dtb/overlay/lubancat-spi3-m1-overlay.dtbo
#dtoverlay=/dtb/overlay/lubancat-uart3-m1-overlay.dtbo
#overlay_end
~
~
~
"uEnvLubanCat1.txt" [readonly] 19L, 610C 1,1 All
|
打开设备树插件的方法就是把相应的设备树插件的注释删除掉,即删除 ‘#’
关闭设备树插件的方法是把相应的设备树插件注释掉,即行首添加 ‘#’
更多关于设备树以及设备树插件的内容,可以去访问LubanCat-RK系列的系统构建的手册