理解dtsi中的&

简介: 理解dtsi中的&

1 dtsi中的 & 怎么理解呢?

可以把它理解引用,因为dtsi中的每个模块(驱动程序)都是用{}包在内的,所以当你要修改某个模块A时,可以不直接在它定义的地方修改,可以别的地方(不在同一个文件,需要#include “被访问到的.dtsi”)采用如下方式:
==&=={

==modified: xxx==

};

2 举例说明

2.1 两个模块的原始定义如下:

第一个 ==simple-panel-dsi== 设备

dsi0_panel: panel@0 {
        status = "okay";
        compatible = "simple-panel-dsi";
        reg = <0>;
        num = <0>;
        id = [83 94];
        id-reg = <0x04>;
        backlight = <&backlight1>;
        pinctrl-names = "default";
        pinctrl-0 = <&lcd_rst>;
        reset-gpios = <&gpio3 RK_PC7 GPIO_ACTIVE_LOW>;
        init-delay-ms = <20>;
        reset-delay-ms = <60>;
        enable-delay-ms = <60>;
        prepare-delay-ms = <60>;
        unprepare-delay-ms = <60>;
        disable-delay-ms = <60>;
        dsi,flags = <(MIPI_DSI_MODE_VIDEO | MIPI_DSI_MODE_VIDEO_BURST |    MIPI_DSI_MODE_LPM)>;
        dsi,format = <MIPI_DSI_FMT_RGB888>;
        dsi,lanes  = <4>;

第二个 ==regulator-fixed== 设备

vcc3v3_lcd0_n: vcc3v3-lcd0-n {
        compatible = "regulator-fixed";
        regulator-name = "vcc3v3_lcd0_n";
        regulator-boot-on;
        regulator-state-mem {
            regulator-off-in-suspend;
        };
    };

2.2 通过 ==&== 引用并修改

&DSI0_PANEL {
    POWER-SUPPLY = <&VCC3V3_LCD0_N>; // POWER-SUPPLY 接收的是另一个设备VCC3V3_LCD0_N
};
VCC3V3_LCD0_N设备我要使用到它,但是也需要修改,继续用 &
&VCC3V3_LCD0_N {
    GPIO = <&GPIO3 RK_PC6 GPIO_ACTIVE_HIGH>;
    ENABLE-ACTIVE-HIGH;
};

3 一个补丁中用到的&

在rockchip某型开发板中,只支持显示3路输出(hdmi, mipi, lvds, edp四选三),以下补丁的内容是把关掉的hdmi重新打开,从中也可以体会到 ==&==的使用技法

diff --git a/kernel/arch/arm64/boot/dts/rockchip/rk3568-evb.dtsi b/kernel/arch/arm64/boot/dts/rockchip/rk3568-evb.dtsi
index f200c1cda..67a349d91 100755
--- a/kernel/arch/arm64/boot/dts/rockchip/rk3568-evb.dtsi
+++ b/kernel/arch/arm64/boot/dts/rockchip/rk3568-evb.dtsi
@@ -228,7 +228,7 @@
     };
     
     edp-panel {
-        status = "okay";
+        status = "disabled";
         compatible = "simple-panel";
         backlight = <&backlight2>;
         bus-format = <MEDIA_BUS_FMT_RGB888_1X24>;
@@ -1286,7 +1286,7 @@
 };
 
 &hdmi {
-    status = "disabled";
+    status = "okay";
     rockchip,phy-table =
         <92812500  0x8009 0x0000 0x0270>,
         <165000000 0x800b 0x0000 0x026d>,
@@ -1297,7 +1297,7 @@
 };
 
 &hdmi_in_vp0 {
-    status = "disabled";
+    status = "okay";
 };
 
 &hdmi_in_vp1 {
@@ -1305,7 +1305,7 @@
 };
 
 &hdmi_sound {
-    status = "disabled";
+    status = "okay";
 };
 
 &i2c0 {
diff --git a/kernel/arch/arm64/boot/dts/rockchip/rk3568-evb1-ddr4-v10.dtsi b/kernel/arch/arm64/boot/dts/rockchip/rk3568-evb1-ddr4-v10.dtsi
index 37c013724..93206858b 100755
--- a/kernel/arch/arm64/boot/dts/rockchip/rk3568-evb1-ddr4-v10.dtsi
+++ b/kernel/arch/arm64/boot/dts/rockchip/rk3568-evb1-ddr4-v10.dtsi
@@ -370,7 +370,7 @@
 };
 
 &route_hdmi {
-    status = "disabled";
+    status = "okay";
     connect = <&vp0_out_hdmi>;
 };
 
@@ -395,15 +395,15 @@
 &edp {
     force-hpd;
     //hpd-gpios = <&gpio0 RK_PC2 GPIO_ACTIVE_HIGH>;
-    status = "okay";
+    status = "disabled";
 };
 
 &edp_phy {
-    status = "okay";
+    status = "disabled";
 };
 
 &edp_in_vp0 {
-    status = "okay";
+    status = "disabled";
 };
 
 &edp_in_vp1 {

4 还可以用父与子的方式去理解

下图中提到的默认关闭是指 “status = "disabled",在子dtsi中去打开它。
在这里插入图片描述
rk3568.dtsi理解为父dtsi, rk3568-evb.dtsi是子dtsi, rk3568-pinctrl.dtsi是专门用来书写pinctrl的dtsi
在这里插入图片描述

5 引发的问题

如此灵活的&运行,某个模块看起来是关的,结果却在另外一个地方打开了,如果没有仔细分析,会导致修改某个模块老是不成功,
GPIO占用怎么也消除不掉,让人抓狂。

相关文章
|
编解码 Linux
Linux MIPI DSI驱动调试笔记-设备树DCS格式序列之配置LCD初始化代码(二)
Linux MIPI DSI驱动调试笔记-设备树DCS格式序列之配置LCD初始化代码(二)
2423 0
|
Android开发 芯片 开发者
Android MediaTek bootloader 的序列号长度 & 移除非字母和数字限制 SN-Writer工具支持写入
Android MediaTek bootloader 的序列号长度 & 移除非字母和数字限制 SN-Writer工具支持写入
293 0
|
Python
.repo/repo/main.py“, line 79 file=sys.stderr) SyntaxError: invalid syntax
.repo/repo/main.py“, line 79 file=sys.stderr) SyntaxError: invalid syntax
461 0
|
机器学习/深度学习 前端开发 JavaScript
230+本图灵编程高清文字版无水印电子书合集【制作不易,点赞收藏❤️】
今日精选,200余本图灵出版的高质量编程电子书,覆盖编程、系统架构、算法及机器学习等热门领域,助你全面提升技术能力。无论你是初学者还是资深开发者,都能从中找到适合自己的学习资源,从《Python编程:从入门到实践》到《深度学习入门》,每一本书都将是你技术成长道路上的良师益友,帮助你在瞬息万变的技术浪潮中站稳脚跟,稳步前行。
486 2
|
存储 安全 Linux
UBoot怎么跳转到Kernel:uboot与linux的交界
UBoot怎么跳转到Kernel:uboot与linux的交界
356 0
|
弹性计算 监控 JavaScript
【颠覆传统!】云效Flow——让你的CI/CD流程如虎添翼,轻松驾驭高效稳定的自动化部署之旅!
【8月更文挑战第8天】现代软件开发中,持续集成(CI)与持续部署(CD)至关重要。我最近使用了“云效Flow”,一款专为高效稳定的CI/CD流程设计的工具。它支持多种语言与框架,并易于集成第三方服务。只需注册并创建项目,平台便提供新手引导。以Node.js项目为例,代码托管在GitHub上后,在云效Flow中设置流水线,通过YAML自定义构建与测试步骤。代码提交后,构建自动执行。部署环节可利用内置策略,如一键发布到阿里云ECS,并支持蓝绿部署确保平滑切换。此外,云效Flow还具备监控与告警功能。总之,云效Flow简化了CI/CD流程,提高了开发效率与软件质量,适合各种规模的团队使用。
350 2
|
人工智能 边缘计算 监控
边缘AI计算技术应用-实训解决方案
《边缘AI计算技术应用-实训解决方案》提供完整的实训体系,面向高校和科研机构的AI人才培养需求。方案包括云原生AI平台、百度AIBOX边缘计算硬件,以及8门计算机视觉实训课程与2门大模型课程。AI平台支持大规模分布式训练、超参数搜索、标注及自动化数据管理等功能,显著提升AI训练与推理效率。硬件涵盖多规格AIBOX服务器,支持多种推理算法及灵活部署。课程涵盖从计算机视觉基础到大模型微调的完整路径,通过真实商业项目实操,帮助学员掌握前沿AI技术和产业应用。
510 2
|
存储 Unix Linux
操作系统和内核有什么区别?
操作系统和内核有什么区别?
2181 0
操作系统和内核有什么区别?
|
Android开发
Android修改媒体音量以及修改屏幕亮度
Android修改媒体音量以及修改屏幕亮度
361 0
|
Linux 芯片
嵌入式Linux系列第10篇:使用CAN
嵌入式Linux系列第10篇:使用CAN

热门文章

最新文章