繁体   English   中英

解密设备树

[英]Deciphering Device Tree

这是我从嵌入式Linux内核上的设备树中摘录的摘录。 这就是我现在的理解:

1) aemif接口位于物理地址0x30000000

2) aemif驱动程序位于名为davinci_aemif.c的文件中,它使用名为aemif的时钟

3) aemif有2个设备,一个是cs2 ,另一个是nand (我认为这个假设是不正确的)

现在的问题:

1)什么是行reg = <0x21000a00 0x100>; 在做什么? 该如何aemif它位于0x30000000处有地址空间0x21000a00

2)为什么cs2定义为cs2@30000000而不是cs2@1,0

3)什么是行reg = <0x2 0x0 0x8000000 0x6 0x0 0x100>; 在做什么?

4)关于如何设置信号线(ta,rhold,rstrobe等)的任何说明都将有所帮助。

aemif@30000000 {
        compatible = "ti,davinci-aemif";
        #address-cells = <0x2>;
        #size-cells = <0x1>;
        reg = <0x21000a00 0x100>;
        ranges = <0x2 0x0 0x30000000 0x8000000 0x3 0x0 0x34000000 0x4000000 0x4 0x0 0x38000000 0x4000000 0x5 0x0 0x3c000000 0x4000000 0x6 0x0 0x21000a00 0x100>;
        clocks = <0x11>;
        clock-names = "aemif";

        cs2@30000000 {
            compatible = "ti,davinci-cs";
            #address-cells = <0x1>;
            #size-cells = <0x1>;
            ti,davinci-cs-ta = <0xc>;
            ti,davinci-cs-rhold = <0x6>;
            ti,davinci-cs-rstrobe = <0x17>;
            ti,davinci-cs-rsetup = <0x9>;
            ti,davinci-cs-whold = <0x8>;
            ti,davinci-cs-wstrobe = <0x17>;
            ti,davinci-cs-wsetup = <0x8>;
        };

        nand@2,0 {
            compatible = "ti,davinci-nand";
            reg = <0x2 0x0 0x8000000 0x6 0x0 0x100>;
            #address-cells = <0x1>;
            #size-cells = <0x1>;
            ti,davinci-chipselect = <0x0>;
            ti,davinci-mask-ale = <0x2000>;
            ti,davinci-mask-cle = <0x4000>;
            ti,davinci-mask-chipsel = <0x0>;
            ti,davinci-ecc-mode = "hw";
            ti,davinci-ecc-bits = <0x4>;
            ti,davinci-nand-use-bbt;
            ti,davinci-no-subpage-write;
            clocks = <0x11>;
            clock-names = "aemif";

            partition@0 {
                label = "u-boot";
                reg = <0x0 0x100000>;
                read-only;
            };

            partition@100000 {
                label = "params";
                reg = <0x100000 0x80000>;
                read-only;
            };

            partition@180000 {
                label = "ubifs";
                reg = <0x180000 0x1fe80000>;
            };
        };
    };

您的设备树显然是错误的。

1 / reg = <0x21000a00 0x100>; 通知aemif实际上位于0x21000a00并具有32个寄存器(0x100 / 4),因此单元地址必须为0x21000a00aemif@21000a00

2 /同样,unit-address必须与reg属性匹配,cs2中没有reg属性。

3 / reg = <0x2 0x0 0x8000000 0x6 0x0 0x100>; reg指节点父级的ranges属性。 在这里,它可以解释为:-从范围0x2开始,在偏移量0x0(即为0x30000000),大小为0x8000000-从范围0x6,偏移量为0x0,大小为0x100

4 /您必须查看具有兼容“ ti,davinci-cs”的字符串的驱动程序,我没有办法,因为它没有成为主流。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM