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";


原文地址:https://www.cnblogs.com/ch122633/p/10775018.html