gpt4 book ai didi

linux - 了解设备树机制

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:21:44 25 4
gpt4 key购买 nike

正在阅读 Device Tree Usage并到达描述节点的 ranges 键属性的部分。

external-bus {
#address-cells = <2>
#size-cells = <1>;
ranges = <0 0 0x10100000 0x10000 // Chipselect 1, Ethernet
1 0 0x10160000 0x10000 // Chipselect 2, i2c controller
2 0 0x30000000 0x1000000>; // Chipselect 3, NOR Flash

ethernet@0,0 {
compatible = "smc,smc91c111";
reg = <0 0 0x1000>;
interrupts = < 5 2 >;
};

i2c@1,0 {
compatible = "acme,a1234-i2c-bus";
#address-cells = <1>;
#size-cells = <0>;
reg = <1 0 0x1000>;
interrupts = < 6 2 >;
rtc@58 {
compatible = "maxim,ds1338";
reg = <58>;
interrupts = < 7 3 >;
};
};

flash@2,0 {
compatible = "samsung,k8f1315ebm", "cfi-flash";
reg = <2 0 0x4000000>;
};
};
  1. rangesreg 有什么区别?
  2. 范围的维度是多少,解析器如何找出其中写入的内容?
  3. 我还没有理解的遗漏部分?不能在 .dts 文件中包含 .h 文件而不是硬编码值?

最佳答案

“范围”属性将当前节点(“外部总线”节点)中的一个或多个地址(范围左侧的第二个数字)映射到父节点(可能是 CPU)地址空间中的地址(范围内的第三个数字)。第四个数字是范围的长度。总线可以在其外围设备所连接的外部有自己的地址概念,因此管理总线上外围设备的驱动程序需要知道这些范围,以便读取或写入设备。

“reg”属性指示设备所在节点(在本例中为“外部总线”)的地址范围内的地址,其中定义了设备。所以在这种情况下,flash@2,0 位于外部总线范围内的地址 0,并扩展到地址 0x04000000。这对应于父 (CPU) 地址空间中的地址范围 0x30000000 到 0x34000000。

我假设第三个范围的长度说明符 2 0 0x30000000 0x1000000>;//Chipselect 3,NOR Flash 实际上应该是 0x04000000 而不是 0x1000000

关于linux - 了解设备树机制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20515374/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com