Linux设备树实现方式

设备树是用来管理板级设备的,就是用来描述开发板上CPU,内存,外设等信息的文件。

举个例子,某款芯片很火,很多厂商都选择该芯片来制作自己的开发板,这些开发板上的外设资源数目不一致,有可能用到相同外设但确使用了不同的引脚。因此,虽然是基于同一款芯片的开发板,但由于外设引脚等差异不小,必须得用不同的配置文件才能记录。设备树就是这样一种采用树形结构来描述板级信息的配置文件。

在ARM架构下的设备树出现之前,Linux内核源码中使用了大量的文件来记录这些板级信息,而这些信息会被编译进Linux内核,导致内核"虚胖"。后来,ARM社区引入了PowerPC等架构已采用的设备树,将这些板级信息从Linux内核中分离开来。

下面来讲讲设备树的好处以及它的实现方式。

首先设备树使用.dts作为源文件,.dtsi作为头文件,使用DTC工具进行编译,最后得到.dtb文件。这里不准备仔细讲解设备树的语法,仅作简单描述。

一般的,.dtsi常用于描述SOC内部外设信息,由于这部分是固定的,一般会被具体的板级dts所引用,而在板级dts文件中,则会描述一些具体板级的外设信息。每个设备树只有一个根节点,下面会有多个设备节点,设备节点下还会有子节点。由于dts文件可被引用,所以可以通过多个文件来进行描述。在设备树中,可以使用节点标签来便捷的访问节点,通过节点标签可以便捷的在新文件中完成节点的数据追加。

节点或子节点都会有一些属性参数,这些参数就是后面驱动函数正常工作的参考。设备树文件编写完成后,会跟着内核源码一道编译,最后烧录到板子上。那么驱动函数又是如何去读取设备树信息从而正确驱动呢,答案是利用of_函数,这是Linux内核提供用于获取设备树信息的函数。

设备都是以节点形式挂在设备树上的,要获取这些设备属性,必须得获取到设备节点。查找节点可以使用以下几个函数

  1. of_find_node_by_name
  2. of_find_node_by_type
  3. of_find_compatible_node
  4. of_find_matching_node_and_match
  5. of_find_node_by_path

提取属性可以使用以下常用函数

  1. of_find_property
  2. of_property_count_elems_of_size
  3. of_property_read_u32_index
  4. of_property_read_u32_array
  5. of_property_read_u32
  6. of_property_read_string
  7. of_n_addr_cells
  8. of_n_size_cells

驱动函数通过of函数获取设备节点,然后根据属性内容完成初始化,再实现基本操作函数和设备注册,如此便可以了。

相关推荐
碎梦归途3 分钟前
思科网络设备配置命令大全,涵盖从交换机到路由器的核心配置命令
linux·运维·服务器·网络·网络协议·路由器·交换机
七维大脑虚拟机4 分钟前
飞牛NAS公网IPv6+DDNS远程访问零延迟教程
运维·服务器·网络
小天源24 分钟前
nginx在centos7上热升级步骤
linux·服务器·nginx
AZ996ZA1 小时前
自学linux第十八天:【Linux运维实战】系统性能优化与安全加固精要
linux·运维·安全·性能优化
大虾别跑1 小时前
OpenClaw已上线:我的电脑开始自己打工了
linux·ai·openclaw
weixin_437044642 小时前
Netbox批量添加设备——堆叠设备
linux·网络·python
hhy_smile2 小时前
Ubuntu24.04 环境配置自动脚本
linux·ubuntu·自动化·bash
一体化运维管理平台2 小时前
DevOps落地利器:美信监控易如何打通开发与运维?
运维
宴之敖者、3 小时前
Linux——\r,\n和缓冲区
linux·运维·服务器
LuDvei3 小时前
LINUX错误提示函数
linux·运维·服务器