嵌入式Linux中文站

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

阅读(388)

设备树(Device tree)是一套用来描述硬件属相的规则。ARM Linux采用设备树机制源于2011年3月份Linux创始人Linus Torvalds发的一封邮件,在这封邮件中他提倡ARM平台应该参考其他平台如PowerPC的设备树机制描述硬件。因为在此之前,ARM平台还是采用旧的机制,在kernel/arch/arm/plat-xxx目录和kernel/arch/arm/mach-xxx目录下用代码描述硬件,如注册platform设备,声明设备的resource等。因为这些代码都是用来描述芯片平

我眼中的Linux设备树(二 节点)

阅读(232)

首先说节点的表示方法,除了根节点只用一个斜杠/表示外,其他节点的表示形式如node-name@unit-address。@前边是节点名字,后边是节点地址。 节点名字的长度范围是1到31,可以使用的字符在ePAPR规范中有说明,包括: 0-9 数字 a-z 小写字母 A-Z 大写字母 , 逗号 . 句点(英) _ 下划线 + 加号 - 破折号(英) 规范要求节点名字应该以字母开头,虽然允许后边的位置使用非字母的字符,但实际情况我们实在没必要使用其他字符,一般情况全部用字母表示就够了。特别是规范建议在起名字时

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

阅读(222)

device_type = memory就是一个属性,等号前边是属性,后边是值。节点是一个逻辑上相对独立的实体,属性是用来描述节点特性的,根据需要一个节点由0个,1个或多个属性表示节点的特性。一个属性由名字和值两部分组成。 和节点的名字类似,规范要求属性名字由1到31个字符组成。和节点名字字符的种类有些区别,不允许有大写字母,增加了问号和井号两个字符。不清楚为什么没有和节点名字完全保持一致,井号对于初学者容易误解,以为是注释。 0-9 数字 a-z 小写字母 , 逗号 . 句点(英) _ 下划线 + 加号

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

阅读(210)

中断一般包括中断产生设备和中断处理设备。中断控制器负责处理中断,每一个中断都有对应的中断号及触发条件。中断产生设备可能有多个中断源,有时多个中断源对应中断控制器中的一个中断,这种情况中断产生设备的中断源称之为中断控制器中对应中断的子中断。一般情况中断产生设备数量要多于中断控制器,多个中断产生设备的中断都由一个中断控制器处理,这种多对一的关系也很像一个树形结构,所以在设备树中,中断也被描述成树,叫中断树。以下表述的时候为了明确是在说中断树,在父节点和子节点前边我们都加上中断二字,是为了防止和设备

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

阅读(191)

一个最简单的设备树必须包含根节点,cpus节点,memory节点。根节点的名字及全路径都是/,至少需要包含model和compatible两个属性。model属性我们在属性那节已经说过是用来描述产品型号的,类型为字符串,推荐的格式为manufacturer,model-number(非强制的)。根节点的model属性描述的是板子的型号或者芯片平台的型号,如: model = Atmel AT91SAM9G20 family SoC model = Samsung SMDK5420 board based

我眼中的Linux设备树(六 memory&chosen节点)

阅读(269)

根节点那一节我们说过,最简单的设备树也必须包含cpus节点和memory节点。memory节点用来描述硬件内存布局的。如果有多块内存,既可以通过多个memory节点表示,也可以通过一个memory节点的reg属性的多个元素支持。举一个例子,假如某个64位的系统有两块内存,分别是 RAM: 起始地址 0x0, 长度 0x80000000 (2GB) RAM: 起始地址 0x100000000, 长度 0x100000000 (4GB) 对于64位的系统,根节点的#address-cells属性和#size-

Linux设备树的用法

阅读(249)

本文通过为一个新machine写一个设备树来介绍设备树相关的概念,以及如何来描述一个machine。 关于设备树的技术细节描述,需要参考ePAPR文档,ePAPR文档中包含了大量的基础语法之外的细节,如果你需要了解更多本文之外的设备树细节,请参考ePAPR文档。 基本数据格式 设备树是一个由节点及属性组成的简单树结构。属性是基于key-value对的,节点则可以包含子节点以及属性。 如,下面这个树就是一个典型结构: / { node1 { a-string-property = A string; a-s

Linux 调试器之处理变量!

阅读(151)

导读 变量是偷偷摸摸的。有时,它们会很高兴地呆在寄存器中,但是一转头就会跑到堆栈中。为了优化,编译器可能会完全将它们从窗口中抛出。无论变量在内存中的如何移动,我们都需要一些方法在调试器中跟踪和操作它们。这篇文章将会教你如何处理调试器中的变量,并使用 libelfin 演示一个简单的实现。 系列文章索引 准备环境 断点 寄存器和内存 ELF 和 DWARF 源码和信号 源码级逐步执行 源码级断点 堆栈展开 处理变量 高级话题 在开始之前,请确保你使用的 libelfin 版本是我分支上的 fbreg。这包含