作家
登录

Linux Device Tree(二):基本概念

作者: 来源: 2017-07-21 09:11:23 阅读 我要评论

  •         #size-cells = <0>; 
  •  
  •         cpu {  
  •             compatible = "arm,arm926ejs";  
  •         };  
  •     }; 
  •  
  •     interrupt-controller@4a000000 { -----------------C  
  •         compatible = "samsung,s3c2416-irq";  
  •     }; 
  •  
  • …… 
  •  
  • };  
  • (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进行归并,最终编译的结不雅如下:

    1. interrupt-controller@4a000000 {  
    2.         compatible = "samsung,s3c2416-irq";  
    3.         reg = <0x4a000000 0x100>;  
    4.         interrupt-controller;  
    5.         #interrupt-cells = <0x4>;  
    6.         linux,phandle = <0x1>;  
    7.         phandle = <0x1>;  
    8.     };  

    这个文件定义了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在内存中的地位

      推荐阅读

      IT审计失败的十个方式

    结语 【技巧沙龙】AI开辟者拭魅战营-7分钟打造1个定制技能。7月22号,我们等你一路! IT审计就像令人不快的麻烦,然则巨大年夜的价值老是降临到那些存眷这些会弗成避免地导致IT审计灾害的>>>详细阅读


    本文标题:Linux Device Tree(二):基本概念

    地址:http://www.17bianji.com/lsqh/36323.html

    关键词: 探索发现

    乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

    网友点评
    自媒体专栏

    评论

    热度

    精彩导读
    栏目ID=71的表不存在(操作类型=0)