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

相关推荐
C_心欲无痕1 小时前
ts - tsconfig.json配置讲解
linux·前端·ubuntu·typescript·json
冰西瓜6001 小时前
国科大2025操作系统高级教程期末回忆版
linux
HIT_Weston2 小时前
93、【Ubuntu】【Hugo】搭建私人博客:面包屑(一)
linux·运维·ubuntu
cuijiecheng20182 小时前
Linux下Beyond Compare过期
linux·运维·服务器
喵叔哟3 小时前
20.部署与运维
运维·docker·容器·.net
HIT_Weston3 小时前
92、【Ubuntu】【Hugo】搭建私人博客:侧边导航栏(六)
linux·运维·ubuntu
CodeAllen嵌入式3 小时前
Windows 11 本地安装 WSL 支持 Ubuntu 24.04 完整指南
linux·运维·ubuntu
期待のcode3 小时前
前后端分离项目 Springboot+vue 在云服务器上的部署
服务器·vue.js·spring boot
AI 智能服务3 小时前
第6课__本地工具调用(文件操作)
服务器·人工智能·windows·php
码农小韩4 小时前
基于Linux的C++学习——指针
linux·开发语言·c++·学习·算法