1789|3

6105

帖子

4

TA的资源

版主

楼主
 

【Luckfox幸狐 RV1106 Linux 开发板测评】06 设备树DTS细细念 [复制链接]

 
本帖最后由 damiaa 于 2024-3-1 11:48 编辑
            【Luckfox幸狐 RV1106 Linux 开发板测评】06 设备树DTS细细念
 
 
Linux设备树,就是用设备树文件描述设备的硬件资源的文件,设备树的编译要用到DTC工具。
 
如果要编译 DTS 文件的话
方法一:只需要进入到 Linux 源码根目录下,然后执行如下命令:make all 或者 make dtbs。
方法二:直接用dtc命令
dtc [-I input-format] [-O output-format][-o output-filename] [-V output_version] input_filename
dtb编译成dtb
./dtc -I dts -O dtb -o B_dtb.dtb A_dts.dts
把A_dts.dts编译生成B_dtb.dtb
 
dtb编译成dts
./dtc -I dtb -O dts -o A_dts.dts A_dtb.dtb
把A_dtb.dtb反编译生成为A_dts.dts
 
幸狐 RV1106 Linux开发板的dts dtsi文件很多,在下面目录中有列出:/home/rv-xxxx/rv1106-spinand/luckfox-pico/sysdrv/source/kernel/adrv/source/kernel/arch/arm/boot/dts$
下面结合这个开发板列出这几个文件来分析分析,语法和相互关系什么的,进一步的消化设备树的相关知识。
 
首先安装好vscode ,然后安装扩展插件DeviceTree,便于更直观好看的显示DTS文件。
然后把上面文件全部打开
他们之间的包含关系如下图:
可以看出dts和dtsi是可以包含c语言都文件的。
dts是可以包含很多个dtsi文件的。
rv1106.dtsi包含了一些头文件,包括下面几个,时钟,gpio,中断,pinctrl,boot,system等等。
#include <dt-bindings/clock/rv1106-cru.h>
#include <dt-bindings/gpio/gpio.h>
#include <dt-bindings/interrupt-controller/irq.h>
#include <dt-bindings/interrupt-controller/arm-gic.h>
#include <dt-bindings/pinctrl/rockchip.h>
#include <dt-bindings/soc/rockchip,boot-mode.h>
#include <dt-bindings/soc/rockchip-system-status.h>
#include <dt-bindings/thermal/thermal.h>

 

rv1106.dtsi还包含了rv1106-pinctrl.dtsi

rv1106-pinctrl.dtsi 包含

#include <dt-bindings/pinctrl/rockchip.h>
#include "rockchip-pinconf.dtsi"

 

rv1103.dtsi包含了rv1106.dtsi
从里面可以看出是rv1106.dtsi删除了一些设备,并加了一些东西。
从里面内容看出,rv1106.dtsi rv1103.dtsi 定义了基本的mcu的资源信息
aliases {
        csi2dphy0 = &csi2_dphy0;
        csi2dphy1 = &csi2_dphy1;
        csi2dphy2 = &csi2_dphy2;
        ethernet0 = &gmac;
        gpio0 = &gpio0;
        gpio1 = &gpio1;
        gpio2 = &gpio2;
        gpio3 = &gpio3;
        gpio4 = &gpio4;
        i2c0 = &i2c0;
        i2c1 = &i2c1;
        i2c2 = &i2c2;
        i2c3 = &i2c3;
        i2c4 = &i2c4;
        mmc0 = &emmc;
        mmc1 = &sdmmc;
        mmc2 = &sdio;
        pwm0 = &pwm0;
        pwm1 = &pwm1;
        pwm2 = &pwm2;
        pwm3 = &pwm3;
        pwm4 = &pwm4;
        pwm5 = &pwm5;
        pwm6 = &pwm6;
        pwm7 = &pwm7;
        pwm8 = &pwm8;
        pwm9 = &pwm9;
        pwm10 = &pwm10;
        pwm11 = &pwm11;
        rkcif_mipi_lvds0 = &rkcif_mipi_lvds;
        rkcif_mipi_lvds1 = &rkcif_mipi_lvds1;
        serial0 = &uart0;
        serial1 = &uart1;
        serial2 = &uart2;
        serial3 = &uart3;
        serial4 = &uart4;
        serial5 = &uart5;
        spi0 = &spi0;
        spi1 = &spi1;
        spi2 = &sfc;
    };

 

rv1106-evb.dtsi文件包含
#include "rv1106-amp.dtsi"
#include <dt-bindings/input/input.h>

 

rv1106-evb.dtsi定义了一个基本的芯片级信息。并且配置哪些可用,哪些禁用。
 
rv1103-luckfox-pico-plus-ipc.dtsi
包含#include "rv1106-amp.dtsi"
 
rv1103-luckfox-pico-plus-ipc.dtsi 配置了rv1106幸狐板子的信息。
rv1103-luckfox-pico-plus.dtsi包含了
#include "rv1103.dtsi"
#include "rv1106-evb.dtsi"
#include "rv1103-luckfox-pico-plus-ipc.dtsi"

 

rv1103-luckfox-pico-plus.dtsi全面的包含所有用到的dts信息,这里还放置了适合用户配置的一些二接口配置信息。

 

关于驱动,其实这些都在sdk里面做好了。驱动一般是不需要修改的,除非有特殊的要求就自己做驱动。这里gpio至少配置是可用与否,io口,高低,模式等。
gpio3pa1:gpio3pa1 {
        compatible = "regulator-fixed";
        pinctrl-names = "default";
        pinctrl-0 = <&gpio3_pa1>;
        regulator-name = "gpio3_pa1";
        regulator-always-on;
};
gpio3-pa1 {
        gpio3_pa1:gpio3-pa1 {
            rockchip,pins = <3 RK_PA1 RK_FUNC_GPIO &pcfg_pull_none>;
        };
    };
I2c:
&i2c3 {
    status = "okay";
    pinctrl-0 = <&i2c3m1_xfer>;
    clock-frequency = <100000>;
};
Spi
&spi0 {
    status = "okay";
    pinctrl-names = "default";
    pinctrl-0 = <&spi0m0_pins>;
    cs-gpios = <&gpio1 RK_PC0 1>;
    // cs-gpios = <&gpio1 26 1>;
    #address-cells = <1>;
    #size-cells = <0>;
    spidev@0 {
        compatible = "rockchip,spidev";
        spi-max-frequency = <1000000000>;
        reg = <0>;
    };
};
串口也是配置可以用否
&uart3 {
    status = "okay";
    pinctrl-names = "default";
    pinctrl-0 = <&uart3m1_xfer>;
};
&uart4 {
    status = "okay";
    pinctrl-names = "default";
    pinctrl-0 = <&uart4m1_xfer>;
};
Pwm
&pwm0 {
    status = "okay";
    pinctrl-names = "active";
    pinctrl-0 = <&pwm0m0_pins>;
    // pinctrl-0 = <&pwm0m1_pins>;
};
&pwm1 {
    status = "okay";
    pinctrl-names = "active";
    pinctrl-0 = <&pwm1m0_pins>;
// pinctrl-0 = <&pwm1m1_pins>;
}
&pwm10 {
    status = "okay";
    pinctrl-names = "active";
    pinctrl-0 = <&pwm10m1_pins>;
    // pinctrl-0 = <&pwm10m2_pins>;
    // pinctrl-0 = <&pwm10m0_pins>;
};
&pwm11 {
    status = "okay";
    pinctrl-names = "active";
    pinctrl-0 = <&pwm11m1_pins>;
    // pinctrl-0 = <&pwm11m2_pins>;
    // pinctrl-0 = <&pwm11m0_pins>;
};
以太网这里只需要配置用还是不用。
/**********ETH**********/
&gmac {
    status = "okay";
};
这样就理解了如何配置设备树了。我们也可以根据LUCKFOX的Wiki提供的信息操作和理解设备树的用法。
关于设备树的语法也可以对照相关资料和代码一一的理解。当然,设备地址和中断等硬件信息还得结合rv1106相关的数据手册和驱动的实现来深入理解。
好,先汇报到这里,谢谢大家。

最新回复

rv1103等soc厂家提供,然后板卡厂再根据自己的板子做设备树   详情 回复 发表于 2024-3-4 10:41
点赞(1) 关注(1)
 
 

回复
举报

6105

帖子

4

TA的资源

版主

沙发
 
rv1106-pinctrl.dtsi (27.9 KB, 下载次数: 0)
rv1106-evb.dtsi (1.24 KB, 下载次数: 0)
rv1106-amp.dtsi (341 Bytes, 下载次数: 0)
rv1106.dtsi (38.68 KB, 下载次数: 0)
rv1103-luckfox-pico-plus-ipc.dtsi (5.11 KB, 下载次数: 0)
rv1103g-luckfox-pico-plus.dts (4.86 KB, 下载次数: 0)
rv1103.dtsi (1.07 KB, 下载次数: 0)
rockchip-pinconf.dtsi (7.27 KB, 下载次数: 0)
 
 
 

回复

365

帖子

0

TA的资源

版主

板凳
 

rv1103等soc厂家提供,然后板卡厂再根据自己的板子做设备树

点评

是的。就是在原厂的dts上面改动。  详情 回复 发表于 2024-3-5 09:33
 
 
 

回复

6105

帖子

4

TA的资源

版主

4
 
本帖最后由 damiaa 于 2024-3-5 09:34 编辑
LitchiCheng 发表于 2024-3-4 10:41 rv1103等soc厂家提供,然后板卡厂再根据自己的板子做设备树

是的。就是在原厂的dts上面改动。

                 理解它的一些文件和dts的语法,里面代表什么意思就可以了。

 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表