ARM Linux 设备树(1)

设备树的起源

在过去的arm linux中,arch/arm/plat-xxx中mach-xxx中充满大量垃圾代码,多是描述板级细节的信息,在linus 一声怒喝之后,设备树衍生而出。

设备树的组成和结构

  • 描述设备硬件信息的文本
  • 编译该文本的工具
  • bootloader需要支持将编译后的设备树传递给linux内核

DTS文件

  • ASCII文本格式的设备树描述
  • 一般一个。dts文件对应一个ARM设备
  • 通常放在arch/arm/boot/dts目录中
  • 现大部分主控芯片都支持设备树
  • 内核为了简化,对于设备共同的部分提炼为。dtsi文件(类似c的头文件)
  • 文件。dts的基本元素为节点和属性

DTC

  • dtc是将dts编译为dtb的工具
  • 源码位于scripts/dtc目录中,在内核使能了设备树的情况下,编译内核时主机工具dtc会被编译出来
  • scripts/dtc/Makefile中的hostprogs-y:=dtc
  • dtc也可以在ubuntu中单独安装

    sudo apt-get install device-tree-compiler
    
  • 在arch/arm/boot/dts/Makefile中描述了当某个soc被选中后,哪些dtb文件会被编译出来
  • dtc除了可以编译dts文件生成dtb文件,还可以反汇编dtb文件为dts文件:

    dtc -I dtb -O dts -o xxx.dts xxxx.dtb
    

dtb

  • 编译后生成的二进制格式的设备树文件
  • 由linux内核解析
  • 内核也支持dtb和zImage绑定在一起做成一个映像文件,内核编译时使能CONFIG_ARM_APPENDED_DTB这个选项,以支持

binding

  • 内核documentation/device/bindings目录下txt文件描述节点和属性具体如何来表述硬件信息。
  • 主要内容包括:
    • 关于该模块的最基本的描述
    • 必需属性的描述
    • 可选属性的描述
    • 一个实例
  • scripts/checkpatch.pl会运行一个检查,对有人在设备树中添加了compatible字符串,二没添加相应的文档进行解释,会报出警告

bootloader

uboot设备从1.1.3开始支持设备树,为了使能设备树,需要在编译uboot的时候在config文件中加入:

#define CONFIG_OF_LIBFDT

- 可从nand、sd或tftp将dtb读入内存
- 可在uboot中运行fdt addr 命令设置dtb的位置如:

uboot》 fdt addr 0x71000000

- * 对于arm来讲,可以通过bootz kernel_addr initrd_address dtb_address 的命令来启动内核,既dtb_address作为bootz或bootm的最后一次参数,第一个参数为内核映像的地址,第二个为rootfs的地址 若不存在iniitrd,可以用-代替。(三者顺序不能乱)*

根节点兼容性

  • 根节点/的兼容属性compatible= ”“,定义了整个系统(设备级别)的名称,组织形式为,
  • linux内黑通过根节点的兼容属性可判断它启动的是什么设备。在真实项目中,这个顶层设备的兼容属性一般包括两个或两个以上的兼容性字符串,首个兼容字符串是板子级别的名字,后面一个兼容性是芯片级别的名字。
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值