• rk3328设备树学习


    一、用到的rk3328好像使用了设备树

    设备树我知道的有三种文件类型,dtbs是通过指令make dtbs编译的二进制文件,供内核使用。

    基于同样的软件分层设计的思想,由于一个SoC可能对应多个machine,如果每个machine的设备树都写成一个完全独立的.dts文件

    那么势必相当一些.dts文件有重复的部分,为了解决这个问题,Linux设备树目录把一个SoC公用的部分或者多个machine共同的部分提炼为相应的.dtsi文件

    这样每个.dts就只有自己差异的部分,公有的部分只需要"include"相应的.dtsi文件, 这样就是整个设备树的管理更加有序。

    二、韦山东的设备树教程

    如果知道设备树需要填写哪些内容呢:

    1.看文档,在内核Documentation/devicetree/bindings/目录下有各种厂家的资料,源码和文档有些都是对应的:

    使用指令,居然找出来好多rockchip的文档:

    find Documentation/devicetree/bindings/ -name "*rockchip*"

    2.参考同类型单板的设备树文件

    3.网上搜索

    4.研究源码

    2.1 设备树的规范DTS格式

    (1)语法:

    DTS文件布局(layout):
    /dts-v1/;
    [memory reservations]     // 格式为: /memreserve/ <address> <lenght>;
    / {              // 根节点
        [property definitions]
        [child nodes]
    };
    红色部分,如下:
    Property格式1:
    [label:] property-name = value;
    这个value有三种取值类型:<32位数据>  "字符串" [16进制表示的1个/多个byte,一个byte必须用2位表示,byte之间的空格可省略] 
    第四种是多种组合,之间用逗号分开
    Property格式2(没有值): [label:] property-name; Devicetree node格式: [label:] node-name[@unit-address]
    { [properties definitions] [child nodes] };

    示例:

    a. Arrays of cells : cell就是一个32位的数据
    interrupts = <17 0xc>;
    
    b. 64bit数据使用2个cell来表示:
    clock-frequency = <0x00000001 0x00000000>;
    
    c. A null-terminated string (有结束的字符串):
    compatible = "simple-bus";
    
    d. A bytestring(字节序列):
    local-mac-address = [00 00 12 34 56 78];     // 每个byte使用2个16进制数来表示
    local-mac-address = [000012345678];          //每个byte使用2个16进制数来表示
    
    e.可以是各种值的组合,用逗号隔开:
    compatible = "ns16550", "ns8250";
    example = <0xf00f0000 19> "a strange property format";
    
    
    
  • 相关阅读:
    IDEA常用快捷键和设置
    java反射总结
    IO编程总结
    3月份主要学习
    idea中maven将jar包导入本地maven库
    hive常用命令
    CentOS7 安装图形化桌面
    vue+leaflet
    Springboot + Rabbitmq + WebSocet + vue
    VUE 中引入百度地图(vue-Baidu-Map)
  • 原文地址:https://www.cnblogs.com/ch122633/p/10775018.html
Copyright © 2020-2023  润新知