2017年1月29日 星期日

Device Tree Fundamental


ARM的核心代码仍然保存在arch/arm目录下
ARM SOC的周边外设模块的驱动保存在drivers目录下
ARM SoC core architecture code保存在arch/arm目录下
ARM SOC的特定代码在arch/arm/mach-xxx目录下
ARM SOC board specific的代码被移除,由Device Tree机制来负责传递硬件拓扑和硬件资源信息

由bootloader傳遞識別platform的訊息,決定帶起哪一個dtb。

Device Tree的結構

Device Tree對於那些可以動態偵測到的device是不需要描述的(ex, USB device, PCIE device),不過對於SOC上的usb host controller,它是無法動態偵測的,需要在device tree中描述。同样的道理,在computer system中,PCI bridge如果不能被探测,那就需要描述之。

Device tree的基本单元是node,这些node被组织成树状结构,除了root node,每个node都只有一个parent。一个device tree文件中只能有一个root node。
每个node用节点名字(node name)标识,节点名字的格式是node-name@unit-address,如果该node没有reg属性(后面会描述这个property),那么该节点名字中必须不能包括@和unit-address。

Device Tree source file語法

在dts文件中,一个node被定義成:

Property - Value:
  • 属性值是text string或者string list,用双引号表示。例如device_type = "memory"
  • 属性值是32bit unsigned integers,用尖括号表示。例如#size-cells = <1>
  • 属性值是binary data,用方括号表示。例如binary-property = [0x01 0x23 0x45 0x67]

Property Key word:
  • device_type: 定义了该node的设备类型,例如cpu、serial等
  • reg: 属性定义了访问该device node的地址信息,该属性的值被解析成任意长度的(address,size)数组,具体用多长的数据来表示address和size是在其parent node中定义(#address-cells和#size-cells)
  • #address-cells: 用來表示reg address的cell數
  • #size-cells:用來表示reg size長度的cell數
  • Status: 一般在dtsi文件中配置节点时status=disable,然后在dts中&xxx status="okay" (status會被較後面include進來的dts覆蓋),没有status = ‘okay’没有关系,只要不显式的设置“status=disable”,都会编译进入

Reference

沒有留言:

張貼留言