1. RK3568设备树架构解析
作为一名嵌入式Linux开发者,我经常需要与设备树打交道。设备树(Device Tree)是现代Linux内核中描述硬件拓扑结构的核心机制,它完美解决了传统内核中大量板级代码冗余的问题。在RK3568平台上,设备树的架构设计尤为精妙,值得我们深入探讨。
1.1 设备树文件层级结构
RK3568的设备树采用典型的分层设计,这种设计理念在嵌入式领域非常普遍。让我来拆解一下各个文件的作用:
-
rk3568.dtsi:这是SoC级别的描述文件,相当于RK3568的"芯片手册"。它定义了CPU核心、内存控制器、各种外设控制器(如UART、I2C、SPI等)以及时钟和中断控制器等基础硬件资源。
-
rk3568-evb.dtsi:评估板级别的描述文件。它基于SoC文件,补充了评估板通用的硬件连接关系,比如哪些GPIO接了LED、哪个UART用作调试串口等。
-
rk3568-pinctrl.dtsi:这个文件专门描述GPIO引脚复用配置。在嵌入式开发中,引脚复用是个重要但容易出错的部分,这个文件将所有引脚配置集中管理,非常清晰。
-
rk3568-evb1-ddr4-v10.dtsi:这是具体的板级描述文件,相当于"原理图"的代码化表示。它定义了具体外设型号、存储器配置、电源管理等细节。
提示:在实际开发中,我强烈建议先通过
cat /proc/device-tree/model命令确认当前运行的设备树模型,再对应修改正确的dtsi文件。我曾经因为修改了错误的dtsi文件而浪费了半天时间调试。
1.2 设备树编译流程
设备树的编译流程看似简单,但有几个关键点需要注意:
-
dts → dtb转换:使用DTC(Device Tree Compiler)将人类可读的dts文件编译成二进制dtb文件。这个步骤通常由内核构建系统自动完成。
-
内核打包:构建内核时,会将内核镜像和设备树二进制文件一起打包。这是嵌入式Linux系统启动的基础。
-
uboot传递:uboot在启动内核时,会将设备树地址传递给内核。这个机制保证了硬件描述与内核解耦。
在我的RK3568开发板上,设备树源文件通常位于:
bash复制/home/lmz/w
