一个简单的系统级芯片(SoC)的设备树节点
`学习设备树
设备树(Device Tree)源代码
soc { compatible = "simple-bus"; #address-cells = <1>; #size-cells = <1>; ranges = <0x0 0xe0000000 0x00100000>; serial@4600 { device_type = "serial"; compatible = "ns16550"; reg = <0x4600 0x100>; clock-frequency = <0>; interrupts = <0xA 0x8>; interrupt-parent = <&ipic>; }; };
节点解释
1、soc 节点
- compatible = “simple-bus”;
- 表示该节点是一个简单总线,通常用于描述一个没有复杂总线功能的 SoC。
- #address-cells = <1>;
- 指定该节点下的子节点地址的单元数量为 1。这意味着每个子节点的地址由一个单元(32 位)描述。
- #size-cells = <1>;
- 指定该节点下的子节点大小的单元数量为 1。这意味着每个子节点的大小由一个单元(32 位)描述。
- ranges = <0x0 0xe0000000 0x00100000>;
描述设备树中的地址范围映射。格式为 <子设备总线地址 映射到父总线地址 长度>。在这个例子中,设备的地址空间从 0xe0000000 开始,长度为 0x00100000(1 MB)。即子总线上的地址范围从 0x0 开始,映射到父总线上的地址范围从 0xe0000000 开始,长度为 0x00100000(1 MB)。
2、serial@4600 节点
- device_type = “serial”;
- 指定该节点描述的是一个串行设备。
- compatible = “ns16550”;
- 指定该设备与 ns16550 兼容。ns16550 是一个常见的 UART(通用异步收发传输器)型号。
- reg = <0x4600 0x100>;
- 描述设备的寄存器地址和长度。这里,寄存器基地址为 0x4600,寄存器长度为 0x100(256 字节)。
- clock-frequency = <0>;
- 描述设备的时钟频率。这里设置为 0,可能表示设备的时钟频率未指定或不适用。
- interrupts = <0xA 0x8>;
- 描述设备的中断信息。格式为 <中断编号 中断类型>。0xA 是中断编号,0x8 可能表示中断触发类型或中断优先级。
- interrupt-parent = <&ipic>;
- 指定中断控制器的 phandle。&ipic 表示中断控制器的设备树节点句柄(phandle),表明 serial@4600 节点的中断由该中断控制器管理。
总结
这段设备树代码描述了一个 SoC 节点,其中包含一个串行设备(serial@4600)。该设备使用 ns16550 UART 控制器,与 simple-bus 兼容,并定义了寄存器的地址、时钟频率和中断信息。serial@4600 节点的中断由指定的中断控制器管理。