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

相关推荐

  1. Linux设备

    2024-02-07 06:26:02       50 阅读
  2. Linux Driver | 设备开发之初识设备

    2024-02-07 06:26:02       64 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-02-07 06:26:02       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-02-07 06:26:02       106 阅读
  3. 在Django里面运行非项目文件

    2024-02-07 06:26:02       87 阅读
  4. Python语言-面向对象

    2024-02-07 06:26:02       96 阅读

热门阅读

  1. 零基础学Python之面向对象

    2024-02-07 06:26:02       43 阅读
  2. CGAL::2D Arrangements-3

    2024-02-07 06:26:02       50 阅读
  3. 使用lodash防抖节流

    2024-02-07 06:26:02       52 阅读
  4. Spark scala如何本地运行

    2024-02-07 06:26:02       49 阅读
  5. leetcode - 408. Valid Word Abbreviation

    2024-02-07 06:26:02       42 阅读
  6. Docker- chapter 1

    2024-02-07 06:26:02       48 阅读
  7. 谈谈mybatis的理解(一)

    2024-02-07 06:26:02       53 阅读
  8. 小程序API开发——文件FileSystemManager参数汇总

    2024-02-07 06:26:02       44 阅读
  9. 深度解析与推荐:主流Web前端开发框架

    2024-02-07 06:26:02       47 阅读
  10. Lua函数进阶

    2024-02-07 06:26:02       56 阅读
  11. LCP 30. 魔塔游戏---leetcode

    2024-02-07 06:26:02       54 阅读
  12. 嵌入式linux驱动开发之网络设备驱动

    2024-02-07 06:26:02       46 阅读