Zephyr 设备树中的重要属性

Zephyr中设备树的用途

  • 以设备驱动模型描述硬件
  • 提供硬件的初始化配置

设备树中的重要属性

compatible

编译时用于匹配绑定文件,输出对应的节点信息,程序中通过该属性查找相应的设备结构体。

#address-cells and #size-cells

#address-cells 属性定义了子节点中 reg 属性中表示地址的32位整数个数。
#size-cells 属性定义了子节点中 reg 属性中表示长度的32位整数个数。

&flash0 {
	partitions {
			compatible = "fixed-partitions";
			#address-cells = <1>;
			#size-cells = <1>;

			boot_partition: partition@0 {
				label = "mcuboot";
				reg = <0x000000000 0x00010000>;
			};
			slot0_partition: partition@10000 {
				label = "image-0";
				reg = <0x000010000 0x000074000>;
			};
			slot1_partition: partition@75000 {
				label = "image-1";
				reg = <0x00084000 0x000074000>;
			};
	};
};

reg

用于描述设备地址,对于具体的设备而言是确定的,该属性由一对称作寄存器块的(地址,长度)序列组成,通常使用16进制表示,

下面是一些常见的样式:

  • 通过内存映射的 I/O 寄存器访问设备,以 i2c@40003000 为例,地址通常指的是 i2C I/O 寄存器的基地址,长度指的是被寄存器占用的字节数。
  • I2C 设备 (如apds9960@39): 地址指的是从设备地址,因此它没有长度信息。
  • SPI 设备 地址指的是从设备选择线的编号,没有长度信息。

从这些例子中可以看出reg属性和单元地址有一些相似,这并不是巧合,reg属性可以看作是比单元地址对设备中可寻址的资源更详细的叙述。

status

以一个字符串代表节点是否被使能,设备树手册中允许该值为 “okay”, “disabled”, “reserved”, “fail”, “fail-sss”,当前Zephyr中仅使用了"okay", “disabled”。

interrupts

  • 每个产生中断的设备包含一个 interrupts 属性,其值描述了该设备的一个或多个中断源,中断源使用中断说明符来表示,中断说明符的格式和含义是特定于中断域的,它依赖于其中断域根节点上的属性。

  • 中断域是用来解释中断说明符的上下文,域的根要么是中断控制器要么是中断连接。

    • 中断控制器是一种物理设备,它需要一个驱动程序来处理通过它路由的中断。它也可能级联到另一个中断域。中断控制器可通过 interrupt-controller 属性进行识别。
    • 中断连接定义了一个中断域和另一个中断域之间的转换。转换基于特定域和特定总线,域之间的转换是使用 interrupt-map 属性实现的。例如,PCI控制器设备节点可以是一个中断连接节点,它定义了从PCI中断名称空间(INTA、INTB等)到具有中断号(IRQ)的中断控制器之间的转换。
  • 中断源与中断控制器之间的连接由 interrupt-parent 属性表示,interrupt-parent 的值为 phandle类型,指向被设备中断路由到的设备,在中断控制器中,如果一个产生中断的设备没有 interrupt-parent 属性,那么它的中断父节点即为设备树中的父节点。

  • #interrupt-cells 属性的值代表设备中断说明符所需要的32位无符号整数个数。

    • #interrupt-cells 为1,代表别的节点使用这个中断控制器只需要一个中断号。
    • #interrupt-cells 为2,代表别的节点使用这个中断控制器提供中断号和触发方式。
    • #interrupt-cells 为3,需要提供中断类型,中断号,中断触发方式。
  • 中断触发方式

    • 1 = low-to-high edge triggered,上升沿触发
    • 2 = high-to-low edge triggered,下降沿触发
    • 3 = both edge triggered,双边沿触发
    • 4 = active high level-sensitive,高电平触发
    • 8 = active low level-sensitive,低电平触发
  • 中断类型

    • IPI 核间中断
    • PPI 私有外设中断
    • SPI 共享外设中断
    • SGI 软中断
  • arm-gic.h 中的中断类型定义

#define	GIC_SPI			0x0
#define	GIC_PPI			0x1

interrupts-extended

interrupts-extended 属性就可以既指定 interrupt-parent,也指定interrupts,比如:

interrupts-extended = <&exti 5 1>, <&exti 1 0>;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

咕咚.萌西

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值