linux DTS 分析
来源:互联网 发布:java 缩写 编辑:程序博客网 时间:2024/04/30 03:29
1、现在实用的内核3.10已经开始实用DTS方法。
2、dts节点的写法
Nodename@Address{ compatible=xxx; xxx;};当设备没有地址时,@Address为非必要。
3、bootloader启动时将加载dtb给内核,内核分析dtb即可知道machine,所以bootloader 不再需要传递设备ID号。
例如:
/ {compatible = "rockchip,rk3288";//即可知道machinerockchip,sram = <&sram>;interrupt-parent = <&gic>;\
4、#address-cell 和 #size-cell分别表示地址和地址长度(length),且仅对接下来将要定义的结点生效
i2c0: i2c@ff650000 {compatible = "rockchip,rk30-i2c";reg = <0xff650000 0x1000>;interrupts = <GIC_SPI 60 IRQ_TYPE_LEVEL_HIGH>;#address-cells = <1>;#size-cells = <0>; rk808: rk808@1b { reg = <0x1b>;//address-cell=1,size-cell=0,所以reg只有一位 status = "okay";};}
5、reg仅由母结点address-cell和size-cell定义
#address-cells = <2> #size-cells = <1>;。。。 i2c@1,0 { compatible = "acme,a1234-i2c-bus"; #address-cells = <1>;//定义rtc结点的reg #size-cells = <0>; reg = <1 0 0x1000>;//该reg结构由母结点定义,addr-cell=2,size-cell=1,所以reg有3成员。1代表片选,0代表片内便宜,0x1000代表长度 interrupts = < 6 2 >; rtc@58 { compatible = "maxim,ds1338"; reg = <58>; interrupts = < 7 3 >; }; }; 。。。
6、结点的“引用”
rk_screen: rk_screen{ //xxx:xxx这种格式表示这个结点会被应用,结点名为后者 compatible = "rockchip,screen"; };&rk_screen { //“类似c语言的取地址符号”,引用rk_screen结点 display-timings = <&disp_timings>;};disp_timings: display-timings { //生成的结点名为display-timings。disp_timings会被rk_screen实用 xxxxx};
7、root结点的子结点描述的是CPU的视图,因此root子结点的address区域就直接位于CPU的memory区域。经过总线桥后的address往往需要经过转换才能对应的CPU的memory映射。external-bus的ranges属性定义了经过external-bus桥后的地址范围如何映射到CPU的memory区域。
#address-cells = <1>; #size-cells = <1>; 。。。 external-bus { #address-cells = <2> #size-cells = <1>; //ranges是地址转换表,前几位代表地址。由父结点和当前结点address-cell决定。本例中,父address-cell=1,当前address-cell=2,所以前两位代表地址。//第一位代表系统偏移,第二位代表片内偏移 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 >; };ranges是地址转换表,其中的每个项目是一个子地址、父地址以及在子地址空间的大小的映射。映射表中的子地址、父地址分别采用子地址空间的#address-cells和父地址空间的#address-cells大小。对于本例而言,子地址空间的#address-cells为2,父地址空间的#address-cells值为1,因此0 0 0x10100000 0x10000的前2个cell为external-bus后片选0上偏移0,第3个cell表示external-bus后片选0上偏移0的地址空间被映射到CPU的0x10100000位置,第4个cell表示映射的大小为0x10000。
0 0
- linux DTS 分析
- linux msm dts加载分析
- [dts]DTS实例分析
- [dts]DTS实例分析
- dts分析
- dts和dtsi分析
- Linux DTS配置总结
- linux 的dts
- linux 驱动之 dts
- Linux-DTS基础
- linux DTS gpio example
- linux dts interrupt
- linux dts i2c
- Linux-DTS基础
- Linux DTS 设备树
- DTS和PTS的分析
- DTS struct分析(3)
- IMX的DTS实例分析
- ios9.1 中当协议为http时请求报错的问题
- phpstorm调试环境
- Python超级明星WEB框架Flask
- Jason Somerville结束Run it Up第4季,赢利4.2万
- hdu1506 水水的dp
- linux DTS 分析
- 一个数如果恰好等于它的因子之和,这个数就称为完整数
- JavaScript选项卡
- java中 占位符模糊查询
- Could not find conduit initiator for address
- Android网络之加载网络中图片
- 删除Android工程中冗余资源
- ubuntu中通过crontab执行python任务
- 解决mvn archetype:generate 速度缓慢问题