设备树的作用主要用于描述硬件,为操作系统提供硬件的信息。一般用在嵌入式板子上。
最近做了riscv相关的操作系统移植,需要编写设备树,期间对设备树进行了些许研究。
一般人对于设备树的看法都是觉得没什么技术含量,就描述一下硬件信息嘛。关键是如果不把设备树的一些东西搞清楚,还真的很难。
一、参考文档
设备树最官方的参考就是Releases - DeviceTree
其次就是linux内核文档,在Documentation\devicetree 目录下,usage-model.rst 是关于设备树用法的, bindings目录下是分设备类型的详细描述。
Linux使用设备树的三个目的:
Linux uses DT data for three major purposes:
1) platform identification,
2) runtime configuration, and
3) device population.
1.平台识别
指的是在dts里面有对主板的描述,用于让内核针对不同的板子运行不同的代码。
compatible = "ti,omap3-beagleboard", "ti,omap3450", "ti,omap3";
2.运行时配置
chosen这样用来给内核传参的。
chosen {
bootargs = "console=ttyS0,115200 loglevel=8";
initrd-start &#61; <0xc8000000>;
initrd-end &#61; <0xc8200000>;
};
3.设备population
population意为人口。在这里大概也就是硬件描述吧。
内核中有一个 machine_desc的结构体&#xff0c;有一个 .init_machine() &#xff0c;会根据设备树初始化机器的描述。
一般是生成 platform_devices
如果设备的compatible 值为"arm,amba-primecell"&#xff0c;则生成 amba_device 。