设备树和设备树插件

本章配套视频介绍:

../../_images/video.png

《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系列的系统构建的手册