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 小时前
LVS负载均衡
服务器·负载均衡·lvs
小成202303202656 小时前
Linux高级02
linux·开发语言
mounter6256 小时前
【硬核前沿】CXL 深度解析:重塑数据中心架构的“高速公路”,Linux 内核如何应对挑战?-- CXL 协议详解与 LSF/MM 最新动态
linux·服务器·网络·架构·kernel
++==6 小时前
Linux 进程间通信与线程同步技术详解:IPC 机制、线程 API、同步工具与经典同步问题
linux
特长腿特长6 小时前
centos、ubantu系列机的用户和用户组的结构是什么?具体怎么配置?用户组权限怎么使用?这篇文章持续更新,帮助你复习linux的基础知识
linux·运维·centos
zzzyyy5387 小时前
Linux环境变量
linux·运维·服务器
pluvium277 小时前
记对 xonsh shell 的使用, 脚本编写, 迁移及调优
linux·python·shell·xonsh
无级程序员7 小时前
centos7 安装 llvm-toolset-7-clang出错的问题解决
linux·centos
kebeiovo7 小时前
atomic原子操作实现无锁队列
服务器·c++
赛博云推-Twitter热门霸屏工具8 小时前
Twitter运营完整流程:从0到引流获客全流程拆解(2026)
运维·安全·自动化·媒体·twitter