抱歉,您的浏览器无法访问本站
本页面需要浏览器支持(启用)JavaScript
了解详情 >

设备树用于给内核中的驱动指定硬件信息。

和设备树有关的文件各式:

  • 设备树文件:.dts
  • 二进制的设备树文件:.dtb
  • 设备树模板:.dtbi

设备树语法

首行
/文件版本/;

根节点

/

结点格式

[label: ]node_name[@unit_adress]{
    [properties definitions]
    [child nodes]
};

其中label可以省略。label是为了方便引用node。在根节点外可以用label或全路径引用lable,如:

方法一:

&label{
    status = "new_definitions";
};

方法二:

&{/node_name[@unit_adress]}{
    status = "new_definitions";
};

property可以为其赋值也可以不赋。若赋值,只能为以下三种形式或它们的组合,组合的形式用逗号隔开:

  • n个32位数据

  • 带有结束符的字符串

  • n个字节
    其各式分别为

    property1 = <17 0xc>;
    property2 = “Hello”;
    property3 = [00 aa bb 44];
    property4 = <0x16>, “Bye”;

常用属性(property)

1.1 address

#address-cells = <n>;

address要用n个32位数表示

1.2 size

#size-cells = <m>;

size要用m个32位数表示

2.compatible

compatible = “A”, “B”, “C”;

兼容A、B、C驱动,驱动名常用”厂家名,模块名“这样的形式命名

3.model

model = “board1”;

当前设备的具体名称为board1。当两个设备的compatible相同时需要通过model区分设备

4.status

设备状态,有四种状态可选

“okay”:设备正常
“disabled”:设备不可操作
“fail”:设备发生了错误
“fail-message”:设备发生错误并注明了错误信息

5.reg

reg = <0x80000000 0x20000000>
寄存器地址用于描述一段空间,地址长度由根节点的的#address-cells和#size-cells决定

基本结点

1.根节点

有且仅有一个,所有结点都是根节点的子节点

2.cpus结点

CPU配置

3.memory结点

标明设备内存

4.chosen结点

向内核传入一些参数

设备树编译

make dtbs [V=1]

实例1

欲将GPIO1_IO09复用为PWM2

配置结点复用功能

确定要复用为PWM功能的引脚后,在arch/arm/boot/dts/imx6ul-pinfunc.h或imx6ull-pinfunc.h中找到其定义。有两个文件是因为两块开发板的重复内容放置在了imx6ul中,再由6ull引用。搜索得知其定义为MX6UL_PAD_GPIO1_IO09__PWM2_OUT。定义格式为PAD NAME(可以理解为引脚的默认功能)+复用功能。

打开设备树文件arch/arm/boot/dts/imx6ull-elf1-emmc.dts在&iomux结点下添加子节点

pinctrl_pwm2: pwm2grp { 
    fsl,pins = < 
        MX6UL_PAD_GPIO1_IO09__PWM2_OUT 0x110b0 
    >; 
};

检查其他位置是否有GPIO1_IO09的复用,若有,将其他位置注释掉。检查时候要以PAD NAME作为搜索对象,对于GPIO1_IO09需要搜索GPIO1_IO09gpio1 9两个内容。

配置PWM2的时钟

打开件arch/arm/boot/dts/imx6ull.dtsi
将PWM2结点上的clocks属性改为
clocks = <&clks IMX6UL_CLK_PWM2>, <&clks IMX6UL_CLK_PWM2>;

添加PWM2结点

在设备树文件中&pwm1结点下添加结点

&pwm2 { 
    pinctrl-names = "default"; 
    pinctrl-0 = <&pinctrl_pwm2>; 
    status = "okay"; 
};

编译并拷贝设备树

. /opt/fsl-imx-x11/4.1.15-2.0.0/environment-setup-cortexa7hf-neon-poky-linux-gnueabi
make dtbs
scp arch/arm/boot/dts/imx6ull-elf\1-emmc.dtb root@192.168.0.232:/run/media/mmcblk1p1/

开发板测试

应用新设备树

sync
reboot

PWM功能测试

echo 0 > /sys/class/pwm/pwmchip1/export
echo 1 > /sys/class/pwm/pwmchip1/pwm0/enable
echo 1000000 > /sys/class/pwm/pwmchip1/pwm0/period
echo 500000 > /sys/class/pwm/pwmchip1/pwm0/duty_cycle
echo 0 > /sys/class/pwm/pwmchip1/pwm0/enable

实例2

复用CSI_HSYNC为PWM
找到其宏定义为MX6UL_PAD_CSI_HSYNC__PWM8_OUT

评论