二 节点(node)的表示

首先说节点的表示方法,除了根节点只用一个斜杠“/”表示外,其他节点的表示形式如“node-name@unit-address”。@前边是节点名字,后边是节点地址。
节点名字的长度范围是1到31,可以使用的字符在ePAPR规范中有说明,包括:

0-9    数字
a-z    小写字母
A-Z    大写字母
,    逗号
.    句点(英)
_    下划线
+    加号
-    破折号(英)

规范要求节点名字应该以字母开头,虽然允许后边的位置使用非字母的字符,但实际情况我们实在没必要使用其他字符,一般情况全部用字母表示就够了。特别是规范建议在起名字时采用通用的名字而不是专有的名字,比如对于网卡,使用ethernet表示就可以了,可以通过地址区分不同的网卡,网卡的区别可以通过节点下的属性区分。还有就是关于目前存在的设备基本上都已经有被广泛接受的名字了,我们完全没必要在此标新立异,比如下边规范中列举的节点名字(经常写驱动的人基本一眼就能猜出是哪种设备):

atm
cache-controller
compact-flash
can
cpu
crypto
disk
display
dma-controller
ethernet
ethernet-phy
fdc
flash
gpio
i2c
ide
interrupt-controller
isa
keyboard
mdio
memory
memory-controller
mouse
nvram
parallel
pc-card
pci
pcie
rtc
sata
scsi
serial
sound
spi
timer
usb
vme
watchdog

节点地址是用来区别同名节点的,不是软件意义上的地址,但是有些情况可以用软件地址作为这个地址。比如两个I2C控制器的名字可以都是i2c,然后用控制器寄存器首地址作为这个节点地址。对于cpu,因为它是没有寄存器地址的,就可以用核的号码作为地址,对于8核处理器,地址可以从0到7。ePAPR规范中关于节点地址的描述不太好理解,原文是“The unit-address component of the name is specific to the bus type on which the node sits”。其实我觉得这句话说的也不太准确,因为并不是所有节点表示的硬件都位于某个总线上,比如内存,cpu。设备树是软件对硬件的一种近似表示,软件需要他怎么表示,他就怎么表示。对于cpu,软件需要序号,那么地址就用序号,对于i2c控制器,软件需要寄存器首地址,那么就用地址。除此之外规范还要求,如果节点有地址,那么节点下边必须有一个叫reg的属性,并且该地址必须和reg的属性的第一个地址相同。如果节点没有reg属性,那么节点地址及前边的@必须都不能有。关于属性和值我们还没开始介绍,这里插一句,其实reg就是register的缩写,这个属性主要用来表示控制器寄存器首地址的。我觉得规范中这一条不是非常有必要,因为有些设备只要有一个地址就够了,那么放在节点地址中就够了,完全没必要非得再加个reg属性。在这一段的最后一句,规范来了句“The binding for a particular bus may specify additional, more specific requirements for the format of reg and the unit-address.”,我觉得这句话的意思和“设备树是软件对硬件的一种近似表示,软件需要他怎么表示,他就怎么表示”差不多,没有什么玄的。

节点路径也比较容易理解,从根节点到每个节点都可以形成一个路径,如第一节的例子/cpus/cpu@0,通过这个可以唯一的表示cpu@0这个节点。因为cpu@0在cpus下边是唯一的,但是在整个设备树可能不是唯一的,只有用全路径表示才能毫无异议的确认是哪个节点。如果省略了节点地址也不会产生歧义,那么可以省略不写。就像编程中的括号一样,个人觉得这个没必要省。

除了名字和地址外,节点前边还可以有一个标签(label),这个标签不是必须的,一般只有在别个地方需要引用这个节点时才会用标签标示这个节点,因为如果用全路径太繁琐了。如“i2c_1: i2c@12C70000”中的i2c_1就是一个标签。

我眼中的Linux设备树(二 节点)相关推荐

  1. Linux设备树特殊节点(aliases、chosen)介绍

    引用一个特定的节点通常使用全路径,aliases 节点可以用于指定一个设备全路径的别名.例如: 1 2 3 4 aliases {         ethernet0 = ð0;         se ...

  2. 我眼中的Linux设备树(四 中断)

    四 中断 中断一般包括中断产生设备和中断处理设备.中断控制器负责处理中断,每一个中断都有对应的中断号及触发条件.中断产生设备可能有多个中断源,有时多个中断源对应中断控制器中的一个中断,这种情况中断产生 ...

  3. 我眼中的Linux设备树(六 memorychosen节点)

    六 memory&chosen节点 根节点那一节我们说过,最简单的设备树也必须包含cpus节点和memory节点.memory节点用来描述硬件内存布局的.如果有多块内存,既可以通过多个memo ...

  4. 我眼中的Linux设备树(五 根节点)

    五 根节点 一个最简单的设备树必须包含根节点,cpus节点,memory节点.根节点的名字及全路径都是"/",至少需要包含model和compatible两个属性.model属性我 ...

  5. linux 设备树及节点引用

    1.ARM Linux社区为什么要引入设备树 Linux之父Linus Torvalds闲来无事,在翻看ARM Linux代码的时候,有一天终于忍不住了.他在2011年3月17日的ARM Linux邮 ...

  6. 我眼中的Linux设备树(一 概述)

    一 概述 设备树(Device tree)是一套用来描述硬件属相的规则.ARM Linux采用设备树机制源于2011年3月份Linux创始人Linus Torvalds发的一封邮件,在这封邮件中他提倡 ...

  7. 我眼中的Linux设备树(三 属性)

    三 属性(property) device_type = "memory"就是一个属性,等号前边是属性,后边是值.节点是一个逻辑上相对独立的实体,属性是用来描述节点特性的,根据需要 ...

  8. linux 设备树_嵌入式系统砖家_初识设备树

    目录: 一.加载Linux(有无设备树) 二.设备树入门知识 一.加载Linux(有无设备树) 没有设备树的时候(以ARM架构为例): - 内核在源码里记录了所有硬件相关的信息(芯片型号.内存大小,各 ...

  9. Linux设备树led,linux设备树下LED灯控制

    linux设备树下LED灯控制 linux设备树下LED灯控制 原理图: 所以在设备树下子节点下插入gpioled节点: gpioled { #address-cells = <1>; # ...

最新文章

  1. Pytorch Lightning 完全攻略!
  2. 问题:为命名空间,在此被用作类型和此项目作为引用添加将导致循环依赖项
  3. python3.5.3下载安装教程_在Python3.5下安装和测试
  4. 数据结构与算法--10.利益最大值
  5. Android 禁止屏幕旋转 旋转屏幕时保持Activity内容
  6. 深入学习二叉树(二) 线索二叉树
  7. 深入理解并发的关键字-synchronized
  8. linux故障模式,Linux操作系统出现严重故障后的救援模式
  9. linux下slow,慢查询日志的分析工具mysqlsla的使用
  10. Activity之间传递参数
  11. 在公司具备这三个条件,就准备好跳槽吧
  12. 关于人工智能你需要了解的事
  13. c语言实验报告总结通用版,大学生实训心得体会(通用11篇)
  14. 用python算24点及原理详解
  15. 怎么用计算机测出来体脂,keep软件测体脂率的在哪 keep怎么测体脂
  16. 笔记本创建wifi热点
  17. 微信公众号文章怎么添加附件|详细教程讲解,太实用了!
  18. 怎么录制明日之后游戏视频
  19. win7如何调整计算机c盘,两种解决win7c盘越来越小的技巧
  20. c语言计算年龄的编程,C语言编程实现---计算实际年龄

热门文章

  1. 说说Broker服务节点、Queue队列、Exchange交换器?
  2. 008_Gson从序列化中排除字段
  3. 007_logback配置
  4. 052_Function对象
  5. 061_JavaScript闭包
  6. python安装包_在python官网打不开的情况下获取获取官方最新安装包
  7. 自定义控件:侧拉删除
  8. Android Studio 权威教程
  9. java数组split_js数组接受split(java split)
  10. 图片二进制编码_python3从零学习-5.7.4、quopri编码与解码经过MIME转码打印数据