
一、缔造树:措置内核“虚胖”的流毒
在Linux内核3.x版块前,ARM架构的硬件信息(如CPU、外设、内存地址等)全靠C代码硬编码在内核里。每新增一款诱惑板,就得写广泛重迭的板级代码,导致内核越来越肥胖,可移植性极差。Linux之父Linus对此建议品评后,ARM社区引入了缔造树,将硬件描述从内核代码中剥离,用孤立文献料理,让内核瘦身,也让驱动和硬件解耦。

缔造树的中枢是DTS文献,它以树形结构描述诱惑板上的缔造,比如CPU数目、内存基地址、I2C和SPI接口挂载的缔造等,明晰呈现硬件联络计议。
二、DTS、DTC与DTB:缔造树的“三剑客”
DTS:缔造树源文献,是ASCII文本流毒,东说念主类可径直阅读和修改,后缀为.dts。
DTB:DTS编译后的二进制文献,体积小,便于U-Boot传递给内核,后缀为.dtb。
DTC:编译器用,肖似C讲话的gcc,能把DTS编译成DTB,源码在Linux内核的scripts/dtc目次下。

编译缔造树时,保举用make dtbs呐喊,比make all更高效。具体编译哪个DTS,由arch/arm/boot/dts/Makefile适度,比如使用I.MX6ULL芯片的诱惑板,对应的DTS会被结伙编译成DTB,新增诱惑板只需添加对应DTS即可。
三、DTS语法:纯粹易懂的硬件描述律例
DTS语法通俗活泼,是文本文献,修改和阅读齐很便捷,中枢律举例下:
1. 头文献援用
DTS可通过#include援用三类文献:.h(C讲话头文献)、.dtsi(缔造树头文献)、.dts(其他缔造树文献)。其中.dtsi是主流,用于描述SOC级信息,比如CPU架构、主频、外设适度器地址领域等,像I.MX6ULL的imx6ull.dtsi即是典型例子,不同诱惑板可复用这份SOC信息,幸免重迭编写。

2. 节点与属性
节点:对应硬件缔造,流毒为[标签:]节点名[@地址],比如cpu@0示意0号CPU节点,标签便捷后续援用。
属性:描述节点的具体信息,流毒是属性名=值;。流毒属性有:compatible:驱动匹配的中枢,流毒是“厂商,型号”,澳洲幸运5app比如"arm,cortex-a7",内核靠它找到对应驱动。
device_type:记号节点类型,比如"cpu"代表CPU,"memory"代表内存。
reg:缔造的寄存器地址和长度,比如reg=,指定地址和占用空间。
interrupts:缔造的中断号和触发状貌,内核靠它处理中断。
status:缔造气象,"okay"示意启用,"disabled"示意禁用。

3. 层级与援用
缔造树以树形结构组织,根节点是/,子节点挂载在父节点下,比如CPU节点在cpus节点内。援用节点时,用&标签,比如&uart0就能指向UART0节点,便捷在多个处所复用或修改节点树立。
四、缔造树的责任经过
缔造树的驱动经过明晰,串联起硬件和驱动:
U-Boot启动时,把内核镜像和DTB文献加载到内存,将DTB地址传递给内核。
内核启动后,领路DTB,构建里面缔造树结构,遍历扫数节点。
内核凭证节点的compatible属性,在驱动的匹配表中查找对应驱动。
匹配告捷后,调用驱动的probe函数,同期把缔造树中的资源(地址、中断、GPIO等)传递给驱动,驱动就能平日操作硬件。
五、学习与本质建议
别从零写DTS:径直基于芯片厂商提供的模板修改,比如I.MX6ULL诱惑板,参考厂商的imx6ull-evk.dts调度,成果更高。
抓中枢树立:要点存眷compatible是否和驱动匹配、reg地址是否正确、status是否启用、GPIO和中断树立是否准确,这些是驱动能否平日驱动的流毒。
善用调试妙技:检察/proc/device-tree/,能直不雅看到内核领路后的缔造树;用dtc器用反编译DTB,生成DTS文本,便捷排查问题。
六、中枢讲究
缔造树的实质是让驱动和硬件解耦:传统状貌把硬件信息硬编码在驱动里,换板子就得改驱动;缔造树则把硬件描述孤立出来,合并驱动能适配多平台,内核不再肥胖,也稳当当代镶嵌式Linux的诱惑逻辑。
对镶嵌式驱动诱惑者来说,掌捏缔造树是必备技巧。建议勾通ARM诱惑板的DTS文献澳洲幸运5app下载,从修改通俗缔造节点出手,再勾通驱动代码判辨of_get_named_gpio、of_property_read_u32等内核API,就能快速掌捏缔造树的讹诈。
LOL投注app官网下载
备案号: