TL570x-EVMLinux设备树概述和开发指南

Linux设备树是一个描述系统硬件结构的树状结构,包含节点和属性。节点和属性分别代表硬件组件和其特性,用于操作系统识别和配置硬件。设备树包括一个根节点,多个子节点表示CPU、设备等,属性描述设备属性如名称、地址。compatible属性是设备识别的关键,用于匹配驱动。设备树中的地址和中断处理通过reg和interrupts属性描述。别名节点提供简化的设备引用方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  1. Linux设备树概述
  1. Linux设备树概述

    Linux设备树是一个包含节点和属性的简单树状结构。属性是基于key-value对的,而节点可以同时包含属性和子节点。下面这个树就是一个典型结构:

/ {

     node1 {

                   a-string-property = "A string";

                   a-string-list-property = "first string", "second string";

                   a-byte-data-property = [0x01 0x23 0x34 0x56];

                   child-node1 {

                                          first-child-property;

                                          second-child-property = <1>;

                                          a-string-property = "Hello, world";

                                       };

                  child-node2 {

                                       };

               };

    node2 {

                 an-empty-property;

                 a-cell-property = <1 >; /* each number (cell) is a uint32 */

                 child-node1 {

                                      };

                };

};

 

这棵树没有描述任何东西,但是它体现了节点的一些属性:

  1. 一个单独的根节点:“/”
  2. 两个子节点:“node1”和“node2”
  3. 两个 node1 的子节点:“child-node1”和“child-node2”
  4. 一堆分散在树里的属性

可以这么简单理解:节点就是树枝,属性就是树叶;树枝上可以有再长树枝也可以长树叶,而树叶上则不会再长树枝。

属性是基于key-value结构的,value可以为空或者特定格式的字符串内容。由于数据类型并不被编码到最终的数据结构中,设备树源代码中仅能支持有限的几种基本数据类型,如下:

  1. 文本字符串(无结束符)可以用双引号表示:

 string-property = "a string"

  1. 'Cells'是 32 位无符号整数,用尖括号表示:

cell-property = <0xbeef xabcd>

  1. 二进制数据用方括号表示:

binary-property = [0x01 0x23 0x45 0x67];

  1. 不同表示形式的数据可以使用逗号连在一起:

mixed-property = "a string", [0x01 0x23 0x45 0x67], <0x12345678>;

  1. 逗号也可用于创建字符串列表:

 string-list = "red fish", "blue fish";

  1. 基本概念
  1. 初始结构

第一步就是构建一个基本结构,这是一个设备树最基本的结构。在这个阶段,需要一个唯一的标识该机器。

/ {

compatible = "gpio-leds";

};

 

compatible指定了系统的名称。它包含了一个“<>,<>”形式的字符串。重要的是要指定一个确切的设备,并且包括制造商的名字,以避免命名空间冲突。由于操作系统会使用 compatible的值来决定如何在机器上运行,所以正确的设置这个属性十分重要。

  1. 中央处理器

    第二步就是描述CPU。先添加一个名为“cpus”的容器节点,然后为每个CPU分别添加子节点,以TI AM437x平台为例:

/ {

compatible = "ti,am437x-gp-evm";

cpus {

cpu@0 {

compatible = "ti,am4372";

};

cpu@1 {

compatible = "ti,am4372";

};

};

};

 

每个cpu节点compatible属性是一个“<>,<>”形式的字符串,并指定了确切的cpu,就像顶层的compatible属性一样。

  1. 节点名称

    每个节点必须有一个“<>[@<>]”形式的名字。

  1. << span>名称>就是一个不超过31位的简单ascii字符串。通常,节点的命名应该根据它所体现的是什么样的设备。比如一个3com以太网适配器的节点就应该命名为 ethernet,而不应该是3com509。
  2. 如果该节点描述的设备有一个地址的话,还应该加上设备地址(unit-address)。通常,设备地址就是用来访问该设备的主地址,并且该地址也在节点的reg属性中列出。
  3. 同级节点命名必须是唯一的,但只要地址不同,多个节点也可以使用一样的通用名,例如serial@101f1000和serial@101f2000。
  1. 设备

系统中每个设备都表示为一个设备树节点。所以接下来就应该为这个设备树填充设备节点。

/ {

compatible = "ti,am437x-gp-evm";

 

cpus {

cpu@0 {

compatibl

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值