(A)在s3c24xx.dtsi文件中已经定义了compatible这个属性,在s3c2416.dtsi中反复定义了这个属性,一个node弗成能有雷同名字的属性,具体若何处理就交给DTC了。经由反编译,可以看出,DTC是丢弃掉落了前一个定义。是以,到今朝为止,compatible = samsung,s3c2416。在s3c24xx.dtsi文件中定义了compatible的属性值被覆盖了。
(B)对于根节点,必须有一个cpus的child node来描述体系中的CPU信息。对于CPU的编址我们用一个u32整数就可以描述了,是以,对于cpus node,#address-cells 是1,而#size-cells是0。其实CPU的node可以定义很多属性,例如TLB,cache、频率信息什么的,不过对于ARM,这里只是定义了compatible属性就OK了,arm926ejs包含了所有的processor相干的信息。
4、s3c2416-pinctrl.dtsi
(C)s3c24xx.dtsi文件和s3c2416.dtsi中都有interrupt-controller@4a000000这个node,DTC会对这两个node进行归并,最终编译的结不雅如下:
- interrupt-controller@4a000000 {
- compatible = "samsung,s3c2416-irq";
- reg = <0x4a000000 0x100>;
- interrupt-controller;
- #interrupt-cells = <0x4>;
- linux,phandle = <0x1>;
- phandle = <0x1>;
- };
这个文件定义了pinctrl@56000000 这个节点的若干child node,重要用来描述GPIO的bank信息。
5、s3c2416-snail.dts
这个文件应当定义一些SOC之外的peripherals的定义。
1、DTB整体构造
经由Device Tree Compiler编译,Device Tree source file变成了Device Tree Blob(又称作flattened device tree)的格局。Device Tree Blob的数据组织如下图所示:

2、DTB header。
关于interrupt,我们值得进一步描述。在Device Tree中,有一个概念叫做interrupt tree,也就是说interrupt也是一个树状构造。我们以下图为例(该图来自Power_ePAPR_APPROVED_v1.1):
对于DTB header,其各个成员解释如下:
header field name description magic 用来辨认DTB的。经由过程这个magic,kernel可以肯定bootloader传递的参数block是一个DTB照样tag list。 totalsize DTB的total size off_dt_struct device tree structure block的offset off_dt_strings device tree strings block的offset off_mem_rsvmap offset to memory reserve map。有些体系,我们也许会保存一些memory有特别用处(例如DTB或者initrd image),或者在有些DSP+ARM的SOC platform上,有写memory被保存用于ARM和DSP进行信息交互。这些保存内存不会进入内存治理体系。 version 该DTB的版本。 last_comp_version 兼容版本信息 boot_cpuid_phys 我们在哪一个CPU(用ID标识)上booting dt_strings_size device tree strings block的size。和off_dt_strings一路肯定了strings block在内存中的地位 dt_struct_size device tree structure block的size。和和off_dt_struct一路肯定了device tree structure block在内存中的地位推荐阅读
结语 【技巧沙龙】AI开辟者拭魅战营-7分钟打造1个定制技能。7月22号,我们等你一路! IT审计就像令人不快的麻烦,然则巨大年夜的价值老是降临到那些存眷这些会弗成避免地导致IT审计灾害的>>>详细阅读
本文标题:Linux Device Tree(二):基本概念
地址:http://www.17bianji.com/lsqh/36323.html
1/2 1

网友点评
精彩导读
科技快报
品牌展示