设备树的引入和内核对设备树的处理

设备树

.c文件中定义资源的缺陷在于,每次我们去修改资源,修改引脚的时候,都需要去重新编译驱动程序,重新安装驱动程序,后来引入了设备树

对应的程序中的结构,/为Root(根节点)

CPU、I2C控制器等都是设备树的子节点,AT24C02是I2C的子节点

使用设备树的原因:每款芯片都会有很多不同的单板使用它,这样子每个单板都有自己的资源.c文件,引脚不相同,需要重新编译和包含了大量无用的代码,所以采用配置文件的方式加入内核(DTS)

芯片厂家一般会提供一个基础的设备树xxx.dtsi,其他的单板A或单板B只需要include该文件,然后程序中可以引用相关设备的标签,来选择开启 或者关闭一些设备(如这里的uart0),只需要修改它们的状态就好,很多代码就都不用编写啦

设备树引入后的变化

(1)引入设备树后platform_device中 多了device_node结构体成员,用来描述设备树的节点

(2)platform_driver中多了 of_match_table,用来和设备树节点配对

(3)总线中的配对方式由三个增加为四个,增加了设备树的配对

(4)配对顺序:

        1、非他不嫁

        2、比较设备树信息

                (1)of_match_table中含有compatible值,就跟dev(设备树中的节点)的compatile 属性比较,若一致则成功,否则返回失败;

                (2)如果of_match_table中含有type值,就跟dev的device_type属性 比较,若一致则成功,否则返回失败

                (3)如果of_match_table中含有name值,就跟dev的name属性比 较,若一致则成功,否则返回失败。

        3、比较platform_device_id

        4、最后比较名字

(5)内核对设备树的处理:

        1、dts在PC机上被编译为dtb文件

        2、u-boot把dtb文件传给内核

        3、内核解析dtb文件,把每一个节点都转换为device_node节点

        4、对于某些device_node结构体,会被转换为platform_device结构体

并不是所有的device_node都会被转换成platform_device

编译成dtb文件时,要分两部,先要用gcc编译成.o(包含了#include等C语言语法)

(6)哪些设备树节点会被转换为platform_device

        1、根节点下含有compatile属性的子节点

        2、含有特定compatile属性的节点的子节点 :"simple bus","simple-mfd","isa","arm,amba-bus"

        3、总线I2C、SPI节点下的子节点:不转换为platform_device

  • 9
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值