什么是设备树
设备树并不是从开始就存在,而是后来加入到Linux中的
设备树主要用来描述系统的硬件结构:SoC的identification;运行时配置;描述是系统不能动态获取的硬件信息
设备树规范
设备树有语法规范,但需要相应的驱动进行解释:造成设备树的通用性与特殊性
设备树的语法结构:树形结构—根“/”没有parent,每个节点只有一个parent;节点—每个节点一般代表系统中的一个设备,包含子节点,具有property-value对;支持overlay
设备树的物理形式
源码形式:dts(文本格式,一般为板级配置);dtsi(文本格式,一般为SOC配置,可以被DTS包含的设备树文件)
目标形式:dtb(二进制文件格式,通过编译工具进行编译)
设备树的编译
DTC将设备树源码编译成二进制文件:输入文件-dts,输出文件-dtb
STM32MP1中设备树的编译:在编译相应组件时自动完成,Linux设备树可单独生成
设备树的调试工具
在主机上调试设备树:dtc,fdtdump,fdtget,fdtput
在目标机上查看设备树
STM32MP1中的设备树
TF-A:源码路径:fdts/stm32mp15*;输出:与最终TF-A编译成一个image
U-Boot:源码路径:arch/arm/dts/stm32mp15*;输出:与最终U-Boot编译成一个image
Linux Kernel:源码路径:arch/arm/boot/dts/stm32mp15*;输出:可单独存放在文件系统里
修改编写STM32MP1设备树
STM32MP1开发中的设备树修改需求:文件重命名—对U-Boot设备树重命名要考虑Makefile自动包含规则;对系统进行描述配置—包括DDR
工具:使用文本编辑工具编辑源码;使用原有编译系统进行编译
STM32CubeMX辅助修改设备树
可直接在Windows下运行
生成板级配置:不包含SOC配置
生成DDR配置:STM32CubeMX还支持DDR Tuning以及测试
不生成非STM32MP1的设备树
使用copy&paste进行合并
应用实例-Secure/Non-Secure
需求:RCC有些寄存器在内核中写入报错
原理:默认RCC是配置在Secure World;将RCC放在Non-Secure World
步骤:修改板级TF-A设备树中RCC的secure-status;重新编译TF-A;重新烧录TF-A
应用实例-增加一个USART
需求:在内核中增加一个USART
原理:gpio controller node已经提供在SoC dtsi中;需要将相应的USART使能
步骤:修改板级配置;重新编译设备树;复制设备树到目标机的boot目录
应用实例-三USB
需求:让STM32MP1支持三个USB
原理:STM32MP1可同时支持两个高速USB 2.0和一个全速USB 2.0;STM32CubeMX目前支持两个高速USB 2.0
步骤:修改OTP支持全速;编译设备树;复制设备树到目标机的boot目录