嵌入式 Linux 设备树:为什么必要设备树?

打印 上一主题 下一主题

主题 844|帖子 844|积分 2532

文章目次

   引言
  一、设备树简介
  二、为什么必要设备树
  三、设备树的根本布局
  四、设备树的使用流程
  4.1 编写设备树文件
  4.2 编译设备树
   4.3 加载设备树
  五、总结
  
引言

在嵌入式 Linux 体系中,设备树(Device Tree)是一种描述硬件资源的数据布局,用于将硬件信息从内核代码中分离出来。设备树的引入极大地简化了嵌入式 Linux 体系的移植和维护工作。本文将详细介绍设备树的概念、作用以及为什么必要设备树。

一、设备树简介

设备树是一种树形布局的数据格式,用于描述硬件平台的资源信息,如 CPU、内存、外设等。设备树文件通常以 .dts(Device Tree Source)或 .dtsi(Device Tree Source Include)为扩展名,编译后生成 .dtb(Device Tree Blob)二进制文件,供内核使用。
二、为什么必要设备树

在设备树引入之前,Linux 内核通过硬编码的方式描述硬件信息,这种方式存着代码冗余,维护困难,移植复杂等的诸多问题。设备树的引入解决了上述问题,具有以下优势:硬件与内核分离,即硬件信息通过设备树描述,内核代码无需关心详细硬件配置;易于维护,即硬件信息集中在一个文件中,修改硬件配置只需修改设备树文件;移植方便,即将内核移植到新硬件平台时,只需提供相应的设备树文件,无需修改内核代码。
三、设备树的根本布局

设备树由节点和属性组成,每个节点描述一个硬件设备或子体系,属性用于描述设备的配置信息。
如下所示即为一个SoC平台及其外设的设备树代码示例:
  1. /dts-v1/;
  2. / {
  3.     compatible = "company,board";
  4.     model = "Board";
  5.     #address-cells = <1>;
  6.     #size-cells = <1>;
  7.     cpus {
  8.         #address-cells = <1>;
  9.         #size-cells = <0>;
  10.         cpu@0 {
  11.             compatible = "arm,cortex-a9";
  12.             device_type = "cpu";
  13.             reg = <0>;
  14.         };
  15.     };
  16.     memory@80000000 {
  17.         device_type = "memory";
  18.         reg = <0x80000000 0x10000000>;
  19.     };
  20.     uart0: serial@10000000 {
  21.         compatible = "ns16550a";
  22.         reg = <0x10000000 0x1000>;
  23.         interrupts = <10>;
  24.     };
  25. };
复制代码
 其中,/表示根节点,描述整个硬件平台,cpus用于描述处理器信息,memory用于描述内存地址和大小,uart0用于描述串口控制器。
四、设备树的使用流程

4.1 编写设备树文件

根据硬件平台编写 .dts 或 .dtsi 文件,描述硬件资源信息。
4.2 编译设备树

使用设备树编译器(DTC)将 .dts 文件编译为 .dtb 文件,如
  1. dtc -I dts -O dtb -o demo1_1.dtb demo1_1.dts
复制代码
 4.3 加载设备树

将 .dtb 文件加载到内核中,内核会根据设备树信息初始化硬件。



五、总结

设备树为驱动提供了硬件信息,驱动通过解析设备树获取硬件配置以完成驱动的加载。总之,设备树是嵌入式 Linux 体系中描述硬件资源的重要机制,它实现了硬件与内核的分离,简化了体系的移植和维护。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

八卦阵

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表