9.2.1 新建自己开发板对应的设备树
1、创建板子对应的设备树
设备树英文名字叫做 Device tree。用来描述板子硬件信息的。比如你的板子上的 CPU 有几
个核、每个 CPU 核主频是多少,IIC、SPI 这些外设的寄存器范围是多少,IIC 接口下都挂了哪
些设备等等。
设备树文件是一种文本格式的文件,方便阅读与修改,文件后缀为.dts,设备树头文件后为.dtsi。
和 C 语言一样.dts 可以引用头文件.dtsi, .dts 经过编译以后生成.dtb文件,.dtb 就是开发板要使用的。类似于我们将 C 语言的.c 文件编译为.bin 文件,然后在开发板上运行,将 dts 编译为 dtb 的工具叫做 DTC,并不是我们使用的 gcc 编译器。
打开 tf-a-stm32mp-2.2.r1\fdts 目录,fdts 目录下保存的就是所有开发板的设备树文件,其中
就包括了 STM32MP1 系列.
stm32mp157d-ev1.dts 就是 STM32MP157D EVK 开发板所对应的设备树文件。同理还有 STM32MP157 其他型号的芯片,比如 stm32mp157a、stm32mp157c 等。我们以stm32mp157d-ev1.dts 为蓝本,添加正点原子 STM32MP157 开发板对应的设备树文件。
用 VScode 打开 stm32mp157d-ev1.dts 文件
第 8 行引用了“stm32mp157d-ed1.dts”这样一个 dts 文件,注意,在设备树里面可以直接通过 include 引用另外一个.dts 文件,不仅限于.dtsi 文件,也就是说.dts 文件也可以作为头文件使用。
可以看出 stm32mp157d-ev1.dts 文件非常简洁,主要原因是其引用了 stm32mp157d-ed1.dts,主 要 工 作 都 由 stm32mp157d-ed1.dts 文 件 来 完 成 了 。
因此,我们复制一份 stm32mp157d-ed1.dts,并命名为 stm32mp157d-atk.dts,
stm32mp157d-atk.dts 就是我们为正点原子 STM32MP157 开发板准备的设备树。
第 8~13 行,头文件引用,其中第 8~11 行引用 STM32MP15X 芯片相关的 dtsi 头文件。
第 12 行,非常重要,“stm32mp15xx-edx.dtsi”是 edx 系列开发板的通用头文件,适合具体板子有关的。很明显,板子不同其对应的板子头文件也不同。需要以stm32mp15xx-edx.dtsi 为蓝本,创建正点原子开发板对应的板子头文件。直接复制一份 stm32mp15xx-edx.dtsi,然后将其重命名为“stm32mp157d-atk.dtsi”
第 20 行, stdout-path 表示标准输出,也就是设置 TF-A 信息输出路径,这里设置为 serial0,也就是串行接口 0(注意,不是 STM32MP157 的串口 0),波特率为 115200。
第 24 行,设置 serial0 对应 STM32MP157 的串口 4,所以 TF-A 会使用 STM32MP157 的串口 4 作为信息输出接口,大家在做板子的时候最好选择串口 4 作为通信接口。
如图:
2、编译
在编译之前要先修改以后 Makefile.sdk,因此我们前面新建的stm32mp157d-atk.dts 并没有添加到编译列表里面,直接编译的话并不会编译此文件。打开Makefile.sdk,在 TFA_DEVICETREE 配置项中添加“stm32mp157d-atk”。
编译完成以后进入 build/trusted 目录下,此时就会生成以“tf-a-stm32mp157d-atk”开头的相关文件。