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函数获取设备节点,然后根据属性内容完成初始化,再实现基本操作函数和设备注册,如此便可以了。

相关推荐
苹果醋341 分钟前
Java8->Java19的初步探索
java·运维·spring boot·mysql·nginx
二十雨辰1 小时前
[linux]docker基础
linux·运维·docker
Jason-河山1 小时前
【自动化更新,让商品信息跳舞】——利用API返回值的幽默编程之旅
运维·自动化
饮浊酒2 小时前
Linux操作系统 ------(3.文本编译器Vim)
linux·vim
lihuhelihu2 小时前
第3章 CentOS系统管理
linux·运维·服务器·计算机网络·ubuntu·centos·云计算
哲讯智能科技2 小时前
SAP Business One市场价格解析
运维·sap·erp
矛取矛求2 小时前
Linux系统性能调优技巧
linux
山东布谷科技官方2 小时前
布谷直播源码部署服务器关于数据库配置的详细说明
运维·服务器·数据库·直播系统源码·直播源码·直播系统搭建·直播软件开发
One_Blanks2 小时前
渗透测试-Linux基础(1)
linux·运维·安全
Perishell2 小时前
无人机避障——大疆与Airsim中的角速度信息订阅获取
linux·动态规划·无人机