device tree是一种描述硬件的数据结构:我们用设备树向内核描述对硬件的添加或删除操作,内核就可以加载或卸载相应的驱动作为响应。so硬件的特殊信息可以通过设备树来向内核传达。
设备树源码 DTS 表示:(https://www.cnblogs.com/sky-heaven/articles/8534737.html)
设备树源码文件(.dts)以可读可编辑的文本形式描述系统硬件配置设备树,支持 C/C++方式的注释,该结构有一个唯一的根节点“/”,每个节点都有自己的名字并可以包含多个子节点。设备树的数据格式遵循了 Open Firmware IEEE standard 1275。这个设备树中有很多节点,每个节点都指定了节点单元名称。每一个属性后面都给出相应的值。以双引号引出的内容为 ASCII 字符串,以尖括号给出的是 32 位的16进制值。这个树结构是启动 Linux 内核所需节点和属性简化后的集合,包括了根节点的基本模式信息、CPU 和物理内存布局,它还包括通过/chosen 节点传递给内核的命令行参数信息。
设备树有三种形式:
* 文本文件 (.dts) 源 ; 二进制对象 (.dtb) - 目标码。对于设备树,我们一般的使用流程是:编辑DTS文件,然后用一个工具将其编译成DTB文件,这个工具就在Linux内核源码scripts/dtc/目录下。
在Linux3.x版本后,arch/arm/plat-xxx和arch/arm/mach-xxx中,描述板级细节的代码(比如platform_device、i2c_board_info等)被大量取消,取而代之的是设备树,其目录位于arch/arm/boot/dts
1.设备树的组成
1个dts文件+n个dtsi文件,它们编译而成的dtb文件就是真正的设备树
- soc厂商会把soc公共的特性和多块开发板公用的特性提炼为dtsi,而dts则负责描述某个具体的产品(开发板)的特性。dts直接或间接的包含多个dtsi(类似于c语言的头文件),就体现了一个完整的产品(开发板)所有的特性。以solidrun公司的hummingboard为例,其组成为
imx6dl-hummingboard.dts
|_imx6dl.dtsi
| |_imx6qdl.dtsi
|_imx6qdl-microsom.dtsi
|_imx6qdl-microsom-ar8035.dtsi
- 此外,dts/dtsi兼容c语言的一些语法,能使用宏定义,也能包含.h文件
相关的API 函数:
//申请gpio的
void lcm_get_gpio_infor(void)
{
static struct device_node *node;
node = of_find_compatible_node(NULL, NULL, "mediatek,lcm_mtk");
GPIO_LCD_PWR1_EN = of_get_named_gpio(node, "lcm_power1_gpio", 0);