13. 配置文件&设备树&设备树插件¶
本章配套视频介绍:
《19-鲁班猫更新内核和设备树》
https://www.bilibili.com/video/BV1zc411A7Me/
《27-设备树和设备树插件》
https://www.bilibili.com/video/BV1XV4y1U7V1/
13.1. 设备树¶
Linux内核从3.x开始引入设备树的概念,实现驱动代码与设备信息相分离。 设备树用于描述一个硬件平台的硬件资源。这个“设备树”可以被bootloader(uboot)传递到内核, 内核可以从设备树中获取硬件信息。 相当于使用定制的设备树就可以操作不一样的硬件资源, 比如i2c,spi,mipi,mini-pcie,i2s等接口,都是通过设备树去配置使能才能去正常操作它们。
设备树以“树状”结构描述硬件资源。例如本地总线为树的“主干”在设备树里面称为“根节点”, 挂载到本地总线的spi总线为树的“枝干”在设备树里称为“根节点的子节点”, spi总线下的spi设备不止一个,这些“枝干”又可以再分。
警告
以下设备树和设备树插件的使用仅适用于使用extboot分区的Ubuntu镜像,其他系统镜像无法切换主设备树和设备树插件,详情请查看 设备树的编译
13.1.1. 设备树的使用¶
在LubanCat-RK356x系列的板子中,每块板子都有自己的主设备树,位于 /boot/dtb 里,如下图
由于我们的通用镜像需要支持很多不同的板子,因此,我们通过开机读取设备id改变设备树,从而适配不同的板子
LubanCat-RK356x系列的板子的设备树由一个文件来指定,它是 /boot/rk-kernel.dtb ,如下图:
rk-kernel.dtb 是通过软链接的方式链接到 dtb/rk3568-lubancat-2-v1.dtb 这个设备树上的, 所以在系统启动时会使用该设备树进行启动
如果想要切换设备树
1 2 3 4 5 | #进入/boot目录下
cd /boot
#切换rk3566-lubancat-1.dtb设备树启动
ln -sf dtb/rk3566-lubancat-1.dtb rk-kernel.dtb
|
注意
使用ln命令时,一定要使用相对路径,不能使用绝对路径。
板子名称 |
配置文件名称 |
说明 |
---|---|---|
LubanCat-RK |
rk356x-lubancat-rk_series.dtb |
通用板卡的配置文件,用于第一次启动配置系统 |
Lubancat-Zero-N |
rk3566-lubancat-0.dtb |
适用于EBF410068 EBF410068V1 |
Lubancat-Zero-W |
rk3566-lubancat-0.dtb |
适用于EBF410067 EBF410067V1 |
Lubancat-1 |
rk3566-lubancat-1.dtb |
适用于EBF410077 EBF410077V1 EBF410077V2 |
Lubancat-1-n |
rk3566-lubancat-1n.dtb |
适用于EBF410052 EBF410052V1 |
Lubancat-1金手指 |
rk3566-lubancat-1io.dtb |
适用于 |
Lubancat-2 |
rk3568-lubancat-2.dtb |
适用于EBF410044 |
Lubancat-2V1 |
rk3568-lubancat-2-v1.dtb |
适用于EBF410044V1 |
Lubancat-2V2 |
rk3568-lubancat-2-v2.dtb |
适用于EBF410044V2 |
Lubancat-2-n |
rk3568-lubancat-2n.dtb |
适用于EBF410076 EBF410076V1 |
Lubancat-2金手指 |
rk3568-lubancat-2io.dtb |
适用于EBF410298 EBF410297 |
13.2. 配置文件¶
在LubanCat-RK356x系列的板子中,配置文件是一个十分重要的功能,配置文件可以配置设备树插件的开启与关闭,
内核的启动参数,选择启动的内核。配置文件所在的位置为 /boot/uEnv
可以看到有多种配置文件
板子名称 |
配置文件名称 |
说明 |
---|---|---|
当前你使用的板卡 |
uEnv.txt |
系统会自动把板卡的配置文件链接到该文件 |
LubanCat-RK |
uEnvLubanCat-series.txt |
通用板卡的配置文件,用于第一次启动配置系统 |
Lubancat-Zero-N |
uEnvLubanCatZN.txt |
适用于EBF410068 EBF410068V1 |
Lubancat-Zero-W |
uEnvLubanCatZW.txt |
适用于EBF410067 EBF410067V1 |
Lubancat-1 |
uEnvLubanCat1.txt |
适用于EBF410077 EBF410077V1 EBF410077V2 |
Lubancat-1N |
uEnvLubanCat1N.txt |
适用于EBF410052 EBF410052V1 |
Lubancat-1金手指 |
uEnvLubanCat1IO.txt |
适用于 |
Lubancat-2 |
uEnvLubanCat2.txt |
适用于EBF410044 |
Lubancat-2V1 |
uEnvLubanCat2-V1.txt |
适用于EBF410044V1 |
Lubancat-2V2 |
uEnvLubanCat2-V2.txt |
适用于EBF410044V2 |
Lubancat-2-n |
uEnvLubanCat2N.txt |
适用于EBF410076 EBF410076V1 |
Lubancat-2金手指 |
uEnvLubanCat2IO.txt |
适用于EBF410298 EBF410297 |
注解
uEnv.txt在新版本镜像中会自动软链接到对应板卡的配置文件,可以使用ls -l /boot/uEnv/uEnv.txt 或者 ls -l /boot/uEnv 查看实际链接的配置文件,如下图所示
配置文件解析
修改
uname_r
的参数,可以让LubanCat在uboot阶段去加载Image-${uname_r}的内核和initrd-${uname_r}修改
cmdline
可以配置内核启动的参数,该选项自行配置,这里就不过多赘述了设备树插件前面没有
#
则代表该设备树插件是开启的状态,前面带有#
则代表该设备树插件是关闭的状态
13.3. 设备树插件¶
Linux4.4以后引入了动态设备树(Dynamic DeviceTree)。 设备树插件可以理解为主设备树的“补丁”它动态的加载到系统中,并被内核识别。
我们可以这样理解设备树插件:主设备树为一颗大树,设备树插件就相当于园丁, 园丁不仅可以修剪枝叶,还可以给大树进行稼接操作。
修剪:把一部分不需要的设备禁止使能
嫁接:添加新的东西到主设备里,例如:创建新的设备节点
13.3.1. 设备树插件的使用¶
LubanCat-RK356x系列的板子的设备树插件位于 /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-RK356x系列的所有的板子的设备树插件
|
而配置设备树插件的方法是修改设备树插件的配置文件,配置文件位于 /boot/uEnv 内
13.3.1.1. 修改配置文件¶
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 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 | #修改你的板子的配置文件
sudo vi /boot/uEnv/uEnv.txt
#或者(xxx为板卡实际的配置文件)
sudo vi /boot/uEnv/uEnvxxx.txt
#下列为vim打开配置文件的内容
uname_r=4.19.232
size=0x1000000
bootargs=console=ttyFIQ0 console=tty1
#dtb=rk3566-lubancat1.dtb
enable_uboot_overlays=1
#overlay_start
#40pin
#dtoverlay=/dtb/overlay/rk356x-lubancat-i2c3-m0-overlay.dtbo
#dtoverlay=/dtb/overlay/rk356x-lubancat-i2c5-m0-overlay.dtbo
#dtoverlay=/dtb/overlay/rk356x-lubancat-pwm8-m0-overlay.dtbo
#dtoverlay=/dtb/overlay/rk356x-lubancat-pwm9-m0-overlay.dtbo
#dtoverlay=/dtb/overlay/rk356x-lubancat-pwm10-m0-overlay.dtbo
#dtoverlay=/dtb/overlay/rk356x-lubancat-pwm11-ir-m0-overlay.dtbo
#dtoverlay=/dtb/overlay/rk356x-lubancat-pwm12-m0-overlay.dtbo
#dtoverlay=/dtb/overlay/rk356x-lubancat-pwm13-m0-overlay.dtbo
#dtoverlay=/dtb/overlay/rk356x-lubancat-pwm13-m1-overlay.dtbo
#dtoverlay=/dtb/overlay/rk356x-lubancat-pwm14-m0-overlay.dtbo
#dtoverlay=/dtb/overlay/rk356x-lubancat-pwm14-m1-overlay.dtbo
#dtoverlay=/dtb/overlay/rk356x-lubancat-pwm15-ir-m0-overlay.dtbo
#dtoverlay=/dtb/overlay/rk356x-lubancat-pwm15-ir-m1-overlay.dtbo
#dtoverlay=/dtb/overlay/rk356x-lubancat-spi3-m1-gpio-cs-overlay.dtbo
#dtoverlay=/dtb/overlay/rk356x-lubancat-spi3-m1-overlay.dtbo
#dtoverlay=/dtb/overlay/rk356x-lubancat-uart3-m0-overlay.dtbo
#dtoverlay=/dtb/overlay/rk356x-lubancat-uart3-m1-overlay.dtbo
#dtoverlay=/dtb/overlay/rk356x-lubancat-uart4-m1-overlay.dtbo
#dtoverlay=/dtb/overlay/rk356x-lubancat-uart5-m1-overlay.dtbo
#dtoverlay=/dtb/overlay/rk356x-lubancat-uart7-m1-overlay.dtbo
#dtoverlay=/dtb/overlay/rk356x-lubancat-uart9-m1-overlay.dtbo
#mini-pcie 5G modules
#dtoverlay=/dtb/overlay/rk356x-lubancat-pcie2x1-disable-overlay.dtbo
#display
#dtoverlay=/dtb/overlay/rk3566-lubancat-dsi0-720p-overlay.dtbo
#dtoverlay=/dtb/overlay/rk3566-lubancat-dsi0-1080p-overlay.dtbo
#dtoverlay=/dtb/overlay/rk3566-lubancat-dsi0-rpi-overlay.dtbo
#overlay_end
~
~
~
"uEnvLubanCat1.txt" [readonly] 19L, 610C 1,1 All
|
打开设备树插件的方法就是把相应的设备树插件的注释删除掉,即删除 ‘#’
关闭设备树插件的方法是把相应的设备树插件注释掉,即行首添加 ‘#’
更多关于设备树以及设备树插件的内容,可以去访问LubanCat-RK356x系列的系统构建的手册