以下是我从嵌入式Linux内核中的设备树中提取的摘录。 这就是我现在理解的方式:
1)aemif
接口位于物理地址0x30000000
2)aemif
驱动程序位于名为davinci_aemif.c的文件中,它使用名为aemif
的时钟
3)aemif
上有2个设备,一个是cs2
,另一个是nand
(我不认为这个假设是正确的)
现在提出问题:
1)reg = <0x21000a00 0x100>;
行在做什么?位于aemif
的{{1}}如何在0x30000000
处拥有地址空间?
2)为什么0x21000a00
定义cs2
而非cs2@30000000
3)cs2@1,0
行在做什么?
4)有关如何设置信号线(ta,rhold,rstrobe等)的任何解释都会有所帮助。
reg = <0x2 0x0 0x8000000 0x6 0x0 0x100>;
答案 0 :(得分:1)
您的设备树显然是错误的。
1 / reg = <0x21000a00 0x100>;
通知aemif实际位于0x21000a00
并且有32个寄存器(0x100 / 4),因此单位地址必须为0x21000a00
:aemif@21000a00
2 /再次,单位地址必须与reg属性匹配,你在cs2中没有reg属性..
3 / reg = <0x2 0x0 0x8000000 0x6 0x0 0x100>;
reg是指节点父节点的range属性。在这里,它可以解释为:
- 从范围0x2开始,偏移量为0x0(即0x30000000),大小为0x8000000
- 范围0x6,偏移量0x0,大小0x100