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

dtbo设备树插件踩坑记录

dtbo的一些过程问题
最近在搞设备树插件一些东西,对个人来说挺新奇的,所以碰到了很多问题;然后感谢大佬的技术支持,此处@大佬

首先设备树插件就是在不动主设备树的情况下,根据自己的硬件设计将个人独特的设置“插入”到主设备树上,包括修改主设备树节点、增加和删除;当然最好是有源码,只设备树源码也行,不然的话很多节点都靠猜,所以没有原厂的支持很难进行呀!~

设备树插件的类似关键字像/dts-v1/、/plugin/、/fragment@N/、/overlay/这些,了解这些才开始写设备树插件哈,主要是fragment定义片段,里面是自己的插件内容;overlay里的内容是要覆盖或者修改增加的属性;

说几个自己碰到的问题
1、主设备树使用了某个gpio作为某些节点的组成部分,造成无法在sysfs中使用,需要在设备树中将其释放出来;
你比如我自己是想控制PA5用来点灯的,结果echo 到export的时候总是busy,通过/sys/kernel/debug/gpio查看,发现PA5确实被占用,,当时手上没有源码,连dts源码都没有,于是问AI,从系统中巴拉出来dtb,然后反编译出设备树dts来;然后看设备树,特么找不到PA5是谁,系统 中PA5叫pa-pin-0,所以将将算找到了吧,哈哈

其实我自己比较菜哈,懂得人可能看pa-pin-0,然后看寄存器0x05就知道了;然后问题来了,怎么将PA5释放出来呢,这里再次感谢原厂大佬的支持,通过target-path精准找到pinctrl,再次将其设置为功能 gpio,或者target找到codec节点,将其disable掉,这样就算释放出来了

这两个方式都非常好哈
2、有些节点直接dtc编译时宏定义找不到咋办
你像啊,我找原厂要到了dts源码,然后我在修改dtbo插件时,有一个E907_PA_IRQ_NUM节点需要使用,但是明眼人一看这**是引用了哪个头文件里的定义,那么我怎么办?
这时候你就只能找他的内核源码了,,,,但是厂商这块是封闭的,内核源码不提供,这时候你得找他开源的内核,因为设备树的定义大概率是和之前的代码是一样的,,,然后我就在提供的老源码上搜关键字,还真找到了,然后通过cpp的预编译将其预编译,之后再次使用dtc命令编译dtbo;注意此时编译命令要通过 -I 将其定义的头文件包含进去,比如

cpp -I ./include/ demo_overlay.dts demo_overlay_pre.dts
此时我的设备树插件中的宏定义可通过-I include去include路径下找

3、常用的命令汇总哈:
编译
dtc -I dts -O dtb -o xxx.dtb xxx.dts // -I 输入文件、-O 输出文件
dtc -@ -I dts -O dtb -o xxx.dtbo xxx.dts //-@ 编译成设备树插件 -I 输入文件、-O 输出文件

设备树预编译
可以使用cpp命令将dts预编译成dts,就是将include中的内容展开
cpp -I ./include/ demo_overlay.dts demo_overlay_pre.dts

反编译
dtc -I dtb -O dts xxx.dtb -o xxx.dts

导出dtb
可以从启动的PEE文件系统中导出当前运行的设备树/sys/firmware/fdt
cat /sys/firmware/fdt > my.dtb or dd if=/sys/firmware/fdt of=my.dtb

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

相关文章:

  • 新手必看 OpenClaw 2.7.1 电脑端部署实操手册
  • 专业汽车冲焊件供应商深度解析:为何长华集团成为行业头部优选? - 2026年企业推荐榜
  • 通过curl命令快速测试TaotokenAPI密钥有效性与模型连通性
  • 科技中介机构如何增强服务专业性与效率?
  • 龙珠激斗多开自动挂机搬砖攻略教程
  • 基于RAG与Function Calling构建AI音乐助手:从原理到工程实践
  • Expo Skills:React Native模块化开发与一键集成实践
  • 【无限额度】FOFA高级会员、DayDaymap、360Quake、Hunter测绘搜索引擎高级会员免费使用最大1W条查询
  • 生成式 AI 的优势:产品策略的差异化
  • 如何规范 Git commit message 符合 Angular 提交标准
  • 告别样板代码!用Qt6的QProperty实现C++响应式UI,像写QML一样丝滑
  • PA 选型与系统风险评估指南
  • 电子产品生命周期评估(LCA)集成与可持续设计实践
  • 量子纠错码与Steane码在二维网格架构中的应用
  • 自然语言搜索革命:用AI增强grep,让命令行搜索更智能
  • 政治学博士生都在偷用的AI研究法(NotebookLM+QDA双引擎协同模型)
  • ABAP开发者避坑指南:LOOP AT...WHERE、READ TABLE和SORTED KEY,到底哪个才是连接两张内表的正确姿势?
  • Poppins字体:一款免费开源的多语言几何字体,让设计更国际化 [特殊字符]
  • 【VUE】16、使用 wangEditor 富文本编辑器
  • 2026年知名的河北数据中心智能机柜厂家对比推荐 - 行业平台推荐
  • 如何彻底解决Cursor免费版限制:go-cursor-help终极指南
  • 从 Page-Agent 到浏览器插件:打造你的第一个 AI 网页助手
  • DeepSeek LeetCode 2392.给定条件下构造矩阵 Go实现
  • 飞凌OKA40i-C开发板SATA硬盘连接、挂载与性能测试实战指南
  • 概率论别再死记硬背了,聪明人都在用这套方法提分
  • 3分钟搞定!基于YOLOv5的智能象棋连线工具Vin象棋实战教程
  • 舆情监控系统的架构
  • Go语言轻量级Web框架Weebo:极致简洁与高性能API服务实践
  • 明日方舟游戏资源库:你的创作宝库与二次开发指南
  • Google Workspace技能库:模块化自动化工作流设计与实战