设备树简介

参考:正点原子I.MX6U嵌入式Linux驱动开发指南 V1.5.1

1、设备树定义

以树形结构,描述硬件平台(电路板)上各个硬件设备信息的文件。
在这里插入图片描述

2、dts、dtsi、dtb和dtc关系

1、xxx.dts 文件是设备树源文件,相当于xxx.c文件。
2、xxx.dtsi 文件是设备树源文件的头文件,相当于xxx.h文件。
3、xxx.dtb文件是设备树可执行文件,相当于xxx.bin或其他可执行文件。
4、dtc是设备树编译工具,相当于gcc编译器。xxx.dts 文件和xxx.dtsi 文件经过dtc工具编译生成xxx.dtb文件。

3、Linux命令行下设备树相关编译命令

1、在Linux内核源码(已解压)根目录下,Linux命令行执行“make all(或make)”命令,表示编译Kernel、xxx.ko驱动模块、以及所有的设备树文件。
2、在Linux内核源码(已解压)根目录下,Linux命令行执行“make dtbs”命令,表示编译所有的设备树文件。
3、在某一设备树源码目录下(包含xxx.dts文件的目录),Linux命令行执行“make 123.dtb”命令,表示只编译123.dts设备树源文件,生成123.dtb文件。

4、设备树文件与驱动文件的交互方式

4.1准备设备树文件

1、在相应设备树源文件(xxx.dts)中添加硬件设备子节点(alphaled)和对应的属性。
注:驱动开发的第一件事就是在设备树文件中添加板子的各硬件设备信息。
2、将设备树源文件xxx.dts编译为设备树执行文件xxx.dtb。
3、用刚编译完成的设备树执行文件xxx.dtb启动Linux内核。
4、在Linux命令行下,进入 /proc/device_tree 目录,用ls命令查看,是否有“1步骤”添加的设备节点devices_node。

4.2 驱动文件读取设备树文件信息方式

4.2.1、在驱动文件源文件(xxx.c文件)中的设备结构体dtsxxx_dev中添加成员变量nd。nd为device_node结构体类型指针,表示设备节点。

4.2.2、使用OF函数获取设备节点的各种属性值。

1、通过 of_find_node_by_path 函数得到 “4.1 设备子节点 alphaled”,后续其他的 OF 函数要使用 device_node。
2、通过 of_find_property 函数获取 alphaled 节点的 compatible 属性,返回值为property 结构体类型指针变量, property 的成员变量 value 表示属性值。
3、通过 of_property_read_string 函数获取 alphaled 节点的 status 属性值。
4、通过 of_property_read_u32_array 函数获取 alphaled 节点的 reg 属性所有值,并且将获取到的值都存放到 regdata 数组中。
5、使用“古老”的 ioremap 函数完成内存映射,将获取到的 regdata 数组中的
寄存器物理地址转换为虚拟地址。
6、使用 of_iomap 函数一次性完成读取 reg 属性以及内存映射, of_iomap 函数是设备树推荐使用的 OF 函数。

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值