当前位置: 首页 > news >正文

为什么不能直接在项目 DTS 中引用平台的dts

你提到的memory_ssmr_features节点在mtxxx.dts中定义,并且有一个标签memory_ssmr_features:。这个标签在设备树编译中是全局可引用的,但前提是包含定义该节点的文件(即mtxxx.dts)被当前编译的.dts文件所包含。然而,直接包含mtxxx.dts会导致语法错误(重复的/dts-v1/;和根节点嵌套),因此无法直接通过标签覆盖。

为什么不能直接在项目 DTS 中覆盖?

在项目 DTS(例如xxxxxx_xxx.dts)中,如果你尝试:

/dts-v1/; #include "mediatek/mtxxx.dts" // 错误:会引入重复的 /dts-v1/; 和根节点 &memory_ssmr_features { svp-region-based-size = <0 0xc000000>; // 覆盖属性 }

编译器会报错,因为mtxxx.dts本身已经包含了/dts-v1/;和根节点,导致最终展开后出现两个版本标识和两个根节点,语法错误。

解决方案:创建.dtsi文件并分离节点定义

由于平台只有mtxxx.dts而没有对应的.dtsi,你需要手动创建一个.dtsi文件,将所有节点定义(包括memory_ssmr_features)移到.dtsi中,然后让原mtxxx.dts和项目 DTS 都包含这个.dtsi。这是最规范且不会报错的方法。

步骤详解

1. 创建mtxxx.dtsi

进入内核源码目录arch/arm64/boot/dts/mediatek/,复制mtxxx.dtsmtxxx.dtsi

cpmtxxx.dts mtxxx.dtsi
2. 编辑mtxxx.dtsi,删除顶层语法

打开mtxxx.dtsi,删除以下内容:

  • 第 6 行/dts-v1/;(版本标识)
  • 根节点的外壳:即删除文件开头的{和文件末尾与之匹配的},只保留内部的子节点定义和所有#include行。

修改后的mtxxx.dtsi大致如下(以你的片段为例):

// SPDX-License-Identifier: GPL-2.0 /* * Copyright (c) 2022 MediaTek Inc. */ #include <dt-bindings/clock/mtxxx-clk.h> #include <dt-bindings/power/mtxxx-power.h> // ... 其他头文件保持不变 memory_ssmr_features: memory-ssmr-features { compatible = "mediatek,memory-ssmr-features"; svp-region-based-size = <0 0x18000000>; svp-page-based-size = <0 0>; tui-size = <0 0x4000000>; wfd-region-based-size = <0 0x4000000>; wfd-page-based-size = <0 0>; prot-region-based-size = <0 0x10000000>; prot-page-based-size = <0 0>; }; // ... 其他所有节点定义(如 cpus、soc 等)都保留在此

注意:确保没有删除任何#include行,否则编译时可能缺少宏定义。

3. 修改原mtxxx.dts以包含新创建的.dtsi

编辑mtxxx.dts,将其内容替换为:

// SPDX-License-Identifier: GPL-2.0 /* * Copyright (c) 2022 MediaTek Inc. */ /dts-v1/; #include "mtxxx.dtsi"

这样原文件功能不变,且为其他项目提供了可包含的.dtsi

4. 在项目 DTS 中包含.dtsi并覆盖属性

假设你的项目 DTS 是xxxxxx_xxx.dts,内容如下:

/dts-v1/; #include "mtxxx.dtsi" // 包含平台所有节点定义 /* 通过标签覆盖 memory_ssmr_features 的属性 */ &memory_ssmr_features { svp-region-based-size = <0 0xc000000>; // 修改为原值的一半 }; /* 可以继续添加或覆盖其他板级专属节点 */
5. 编译验证

在内核根目录执行设备树编译:

makedtbs

或单独编译项目 DTB:

makearch/arm64/boot/dts/mediatek/xxxxxx_xxx.dtb

编译通过后,生成的.dtbsvp-region-based-size的值即为0xc000000


为什么不建议直接修改mtxxx.dts本身?

如果你尝试在mtxxx.dts中直接修改属性,虽然可以编译通过,但该修改会影响所有使用该平台文件的项目,且无法为不同项目保留差异化配置。通过.dtsi+ 项目覆盖的方式,可以实现平台默认值与项目定制的分离,符合设备树的设计理念。

补充说明

  • 标签的作用域:标签memory_ssmr_features.dtsi中定义后,只要项目 DTS 包含了该文件,就可以通过&memory_ssmr_features引用并覆盖属性。标签本身是全局的,但定义必须被包含才能使用。
  • 如果你不想创建.dtsi,理论上可以在项目 DTS 中重新定义整个memory_ssmr_features节点,但这样会丢失平台其他所有节点的定义,导致不完整的设备树,通常不可行。因此创建.dtsi是唯一稳妥的做法。

按照以上步骤操作,即可在不引起编译错误的前提下,成功修改svp-region-based-size属性。

http://www.jsqmd.com/news/412207/

相关文章:

  • 程序员如何利用AI进行用户画像分析
  • 2026年算法备案实战全解析:从“双审”逻辑到材料避坑,后端架构视角下的合规指南
  • 上海净水器批发:核心知识点+靠谱供应商推荐 - 小坤哥
  • 2026 想读 MBA?TOP4国内优质项目优选指南来了! - 速递信息
  • rk3588 android12 屏幕翻转 触摸翻转
  • 《计算机视觉:从入门到精通》技术手册 第25章 可解释AI与视觉推理
  • Android 13 RK3588 编译烧写实录全程
  • Jam创建项目工程源码分析(1) 解析命令行参数
  • 《计算机视觉:从入门到精通》技术手册 第23章 自动驾驶视觉系统
  • 不聊房子、不卷票子,「全民健康热」带火了阿福
  • 《计算机视觉:从入门到精通》技术手册 第24章 医学图像计算
  • 最新优质女性益生菌品牌推荐TOP5,适配现代女性私密健康 - 速递信息
  • 《计算机视觉:从入门到精通》技术手册 第22章 事件相机与神经形态视觉
  • 2026最新女性益生菌十大品牌测评,让女性由内而外焕健康 - 速递信息
  • 【SLAM】GenRobot / IO-AI / Scale / Appen 能力对比表(机器人数据与闭环视角)
  • 《计算机视觉:从入门到精通》技术手册 第20章 基础模型(Foundation Models)与视觉大模型
  • 《计算机视觉:从入门到精通》技术手册 第21章 具身智能与机器人视觉
  • 【SLAM】为什么像orb slam,vins等视觉SLAM开源算法里,精度上双目常常低于单目?
  • 《计算机视觉:从入门到精通》技术手册 第19章 视觉-语言模型与多模态学习
  • 《计算机视觉:从入门到精通》技术手册 第18章 人体姿态估计与动作捕捉
  • 鲁棒控制:质量块-阻尼器-弹簧系统的设计与分析——案例与实践中的学习手册
  • AI模型训练必看:自监督学习、半监督学习与强化学习全解析!收藏这波干货!
  • 【C++】野指针与内存践踏
  • 收藏!用LangChain+LangGraph打造深度智能体,Python实战代码全解析,轻松应对复杂任务
  • AI产品落地难?3个实战策略教你用业务语言打动决策者,收藏这波干货!
  • DS 做题记录
  • 题解:qoj8800 Triinformathlon
  • 外包干了9天,技术退步明显。。。。。
  • AI进化史诗:从逻辑机器到硅基大脑,爆了!速收藏揭秘通用智能体诞生秘诀!
  • 震惊!单Agent+Skills竟可取代多Agent系统?深度解析论文,附实验结果,建议收藏!