OpenHarmony RK3568设备树移植实战:从选型到调试全解析

OpenHarmony移植实战:基于RK3568的YY3568开发板适配指南 操作系统移植是嵌入式开发中的核心技术,其核心在于构建硬件与软件之间的桥梁。通过板级支持包(BSP)和硬件抽象层(HAL),开发者能够将操作系统内核适配到特定的硬件平台,实现底层驱动的统一管理和资源抽象。这项技术的价值在于极大地提升了软件的可移植性和复用性,使得同一套操作系统可以运行在多样化的物联网、工控和边缘计算设备上。在实际应用中,开发者常基于成熟的芯片级支持包,针对具体开发板的硬件差异进行板级移植,从而快速构建可运行的系统。本文以OpenHarmony标准系统在RK3568芯片的YY3568开发板上的移 阅读详情

1. 为什么搞 OpenHarmony 移植,先得跟设备树死磕

先说个很多刚入坑 OpenHarmony 的人都会撞上的场景:你手里有一块 RK3568 的开发板,教程也下了,源码也拉了,结果打开 kernel 目录一看, arch/arm64/boot/dts/rockchip/ 底下躺着几十个以 rk3568 开头的 dts 文件。什么 rk3568-evb1-ddr4-v10.dts 、 rk3568-evb2-lpddr4-v10.dts 、 rk3568-evb2-lpddr3-v10.dts ,还有各种 -demo 、 -dt 后缀的变体。你脑子里的第一个问题绝对是:我到底该选哪个?第二个问题可能是:这些看着差不多的 dts,改起来到底在改什么?

这就是设备树 DTS(Device Tree Source)在 OpenHarmony 实战开发里最真实的痛点,尤其是当你用的还不是官方推荐的那几块板子,而是自己画的板、自己选的 DDR 颗粒、自己调的引脚,那设备树就不再是"编译内核时顺便勾选的一个选项",而是决定你能不能点亮屏幕、能不能跑起 WiFi、能不能让系统稳定不重启的核心关卡。这篇文章就把我在 OpenHarmony + RK3568 上跟设备树死磕的整套经验写出来,从 DTS 语法基础、文件结构,到多板型选择策略、常用改动点,再到编译、烧录和排错流程,争取让看完的人从"不知道选哪个 dts"进阶到"拿到一块板子能自己把设备树改明白"。

先说明白,这篇文章对标的是 OpenHarmony 标准系统(也就是带 kernel 的 full 版本),不是轻量系统那个跑在 MCU 上的场景。标准系统里,内核用的还是 Linux 内核那套机制,所以 DTS 的语法和编译方式跟传统嵌入式 Linux 高度一致,但 OpenHarmony 的构建系统、烧录方式、以及 device 目录下的 hdf 驱动配置会和纯 Linux 有些差异,这也是很多人卡住的地方。适合谁看?正在做 OpenHarmony 板级移植的开发、打算在非官方板子上跑 OpenHarmony 的玩家、以及想把内核设备树这块"知其然不知其所以然"补全的入门者。

2. 别急着改 dts,先搞懂 DTS/DTB/DTC 到底在干什么

2.1 一套三板斧:dts、dtb、dtc 的关系

设备树这套东西,核心目的就一句话:把"硬件长什么样"和"驱动怎么工作"解耦。在设备树出现之前,内核里描述硬件的方式是写一堆 board 文件,代码里到处都是平台设备注册、资源填充,每换一块板子就要动一遍 C 代码。设备树的做法是,把硬件信息用树状的节点描述出来,内核启动时通过解析这棵树来自动匹配驱动、填充资源。

具体到 OpenHarmony 里,source 文件是 .dts ,这个是人类可读的文本格式。编译工具是 dtc ,全称 Device Tree Compiler,它把 .dts 编译成二进制的 .dtb 文件。内核启动早期阶段会去加载 dtb,然后解析树上的节点,逐个匹配驱动。这套流程和 Linux 内核完全一致,只不过在 OpenHarmony 的构建脚本里,dtc 的调用被打包进了内核编译流程,你在 kernel/linux/build 的日志里能看到类似 DTC arch/arm64/boot/dts/rockchip/rk3568-evb2-lpddr4.dtb 的输出。

这里有个非常容易踩的认知坑:很多人觉得设备树改了只要重新编译 kernel 就行,实际不是。dtb 文件编译出来以后,最终要不要被加载,还得看 bootloader(OpenHarmony 标准系统里通常是 U-Boot 或者 fastboot 方式)传不传它、传的是哪个。也就是说,你改了 dts 并编译出新的 dtb,还得确保烧录时这个 dtb 真的被放到了 boot 分区里并被引导加载。

2.2 节点、属性、标签:读懂一段 dts 的最小案例

不用把 dts 想得多玄,它本质就是个嵌套的键值对结构。看一段最常见的:

/ {
    model = "Rockchip RK3568 EVB2 LPDDR4 Board";
    compatible = "rockchip,rk3568-evb2-lpddr4", "rockchip,rk3568";

    chosen {
        bootargs = "earlycon=uart8250,mmio32,0xfe660000 console=ttyFIQ0 root=PARTUUID=614e0000-0000 rw rootwait";
    };

    memory@00000000 {
        device_type = "memory";
        reg = <0x0 0x0 0x0 0x80000000>;
    };
};

根节点 / 下面的 model 是板子名称, compatible 是匹配关键字,驱动通过比较这个字符串来找设备。 chosen 节点存放的是启动参数,这里面 console=ttyFIQ0 是 RK 平台特有的 FIQ 串口调试口配置,如果你自己板子的调试串口号改过,串口起不来十有八九就是这里和 U-Boot 传参没对齐。 memory 节点描述内存起始地址和大小, reg 里四个 32 位值拼成了 64 位地址和大小, 0x80000000 就是 2GB。

看到没有,dts 并不复杂,复杂的是你要改哪一个字段、在什么上下文里改。一颗 SoC 有几十个外设控制器,每个控制器都要描述寄存器地址、中断号、时钟、复位、引脚等,一个完整的 RK3568 evb 板级 dts 通常有三四千行。我们不用全看懂,但得知道每一段是干嘛的,改起来才不心虚。

为了加深理解,再说一下"标签"和"引用"的关系。很多 dts 里会出现这种写法:

&uart0 {
    status = "okay";
};

这个 &uart0 是引用了在 dtsi(设备树包含文件)里定义好的 uart0: serial@fe660000 节点。这种分层写法是 RK 平台设备树组织的核心:SoC 级别的硬件描述全放在 .dtsi 里,板级文件( .dts )只负责"启用哪些外设、配什么引脚、调什么参数"。这样同一颗芯片做十几个板子,dtsi 基本不动,每个板子只需在 dts 里改外设开关和引脚复用,工作量小很多,也方便维持主线同步。

2.3 为什么说 dtsi + dts 的组织方式救了 Rockchip

RK 的 dts 目录结构特别有自己的风格。你打开 kernel/linux/arch/arm64/boot/dts/rockchip/ 后会发现一堆 .dtsi 文件:

  • rk3568.dtsi :SoC 级描述,包含 CPU、GIC 中断控制器、片上外设、时钟、电源域等
  • rk3568-pinctrl.dtsi :
RK3568 OpenHarmony多路显示移植实战:从DRM到设备树全解析 多屏显示在现代智能设备中越来越常见,比如收银机、智慧班牌、工业HMI等场景,都需要让不同接口的屏幕在同一系统下协同工作。而要实现多屏输出,底层依赖的是Linux内核的DRM显示框架,它通过CRTC、Encoder、Connector等抽象对象统一管理多个显示通道。对于基于RK3568的OpenHarmony系统来说,移植多路显示的关键在于理解从内核DRM驱动、设备树中VOP与显示接口的绑定,到上层HDF显示服务配置的完整链路。设备树中的端口拓扑、屏幕时序参数、背光与复位引脚,以及系统层主屏/扩展屏策略,都直 阅读详情

相关推荐

OpenHarmony设备树DTS完全指南:从RK3568移植到调试实战

设备树(Device Tree)是现代嵌入式系统描述硬件资源的标准机制,它将板级硬件配置从内核代码中解耦出来,成为连接操作系统与物理电路的关键桥梁。理解设备树的节点、属性和compatible匹配逻辑,是进行系统移植、外设适配和内核裁剪的必备基础。在内核启动阶段,设备树通过解析dts源文件并编译为dtb二进制,驱动框架依据compatible字符串实现设备与驱动的精确匹配,从而完成硬件初始化。这一机制在OpenHarmony标准系统适配中尤为重要,尤其针对RK3568等主流芯片平台,正确选择与定制板卡对应的

weixin_33843947的博客 328

OpenHarmony设备树DTS实战:从定位RK3568文件到GPIO调试全流程

设备树(Device Tree)是描述硬件资源的数据结构,它将硬件信息从内核源码中解耦,以文本形式呈现在系统启动时供内核解析。其工作原理是通过编译生成二进制dtb,由引导程序加载并传递给内核,进而完成设备与驱动的匹配。在嵌入式开发中,设备树不仅让硬件描述更清晰,也极大提升了代码复用性与平台可移植性,尤其适用于OpenHarmony这类多芯片适配场景。针对RK3568平台,开发者常面临板级dts文件众多、引脚复用冲突、编译烧录不生效等实际问题。本文以GPIO外设为例,详细讲解dts/dtsi/dt b/dtc

weixin_34284188的博客 421

OpenHarmony设备树实战:RK3568硬件适配与DTS驱动开发

在嵌入式系统开发中,设备树(Device Tree)是描述硬件资源与驱动匹配关系的关键机制。它以树形结构记录CPU型号、内存地址、外设接口等硬件信息,内核启动时解析设备树二进制文件,自动生成platform_device并与对应驱动完成匹配,实现硬件描述与驱动代码的解耦。这一机制让同一份内核镜像可适配多种硬件平台,极大简化了系统移植与维护成本。在物联网、工业控制、边缘计算等场景中,设备树已成为OpenHarmony等操作系统适配不同SoC和开发板的核心技术。针对OpenHarmony和RK3568平台,开发

weixin_33888907的博客 309

RK3568平台OpenHarmony多路显示移植实战:从设备树到HAL层

多屏交互正在成为智慧屏、收银机、工业HMI等设备的标配能力,而多路显示的底层实现涉及显示子系统、内核驱动与用户态HAL的协同。OpenHarmony作为面向全场景的操作系统,其显示架构通过HDF框架连接DRM/KMS与上层RenderService,为多屏输出提供了灵活的支持。RK3568内置VOP2多路显示控制器,可同时驱动HDMI、DSI、RGB等接口,是实现同显、异显与独立显示的理想平台。实际移植中,设备树配置、VP路由绑定、Panel初始化序列以及Display HAL的多屏注册是关键环节,而带宽分

weixin_33423874的博客 137

OpenHarmony硬件调试三板斧:RK3568串口日志、设备树与hdc实战

在嵌入式系统开发中,硬件调试往往比编写代码更具挑战,尤其是面对基于RK3568等芯片的开发板时,启动失败、外设异常等问题频发。掌握正确的调试方法,成为提升开发效率的关键。串口日志作为系统启动过程的“眼睛”,能够直观呈现从Bootloader到内核的每一处运行状态;设备树则用于描述硬件拓扑与资源配置,是内核正确识别外设的基础;而hdc调试通道提供了系统运行后的交互能力,便于命令执行与日志抓取。三者构成了一套完整的硬件调试链路,广泛应用于OpenHarmony系统移植、驱动适配与问题定位场景。以RK3568开发

weixin_29193359的博客 249

OpenHarmony设备树DTS指南:RK3568板级移植与HDF驱动实战

设备树(Device Tree)是嵌入式系统中描述硬件资源的标准化数据结构,将CPU型号、寄存器地址、中断号等信息以文本形式提供给内核,实现硬件描述与驱动代码解耦。在OpenHarmony标准系统中,设备树不仅承担硬件枚举功能,更与HDF驱动框架深度绑定,成为板级移植和系统适配的关键枢纽。以RK3568平台为例,开发者需要正确理解dtsi与dts的层级关系、DTS到DTB的编译链路,以及HDF设备节点与驱动的匹配机制。掌握这些原理后,可高效完成串口、GPIO、以太网、HDMI等常见外设的配置与调试。随着Op

weixin_29166013的博客 255

OpenHarmony调试三板斧:串口日志、设备树选型与系统工具链实战

在嵌入式系统开发中,日志分析与硬件配置是定位问题的基石。串口日志作为系统启动阶段最可靠的信息源,能够完整呈现从Bootloader到内核初始化的全链路状态;设备树(DeviceTree)则扮演着硬件资源描述与匹配的关键角色,直接影响驱动加载与外设工作。掌握日志分级过滤、设备树节点修改与验证,以及hilog、hdc等系统调试工具链,是提升开发效率的核心能力。本文以RK3568开发板为例,结合x86环境补充,系统梳理了从硬件上电到应用层调试的完整方法,帮助开发者快速定位启动失败、驱动异常、系统卡死等高频问题。

weixin_34090562的博客 427

OpenHarmony源码树全解析:RK3568设备树选择与编译实战

开源操作系统普遍采用多仓模式管理代码,OpenHarmony 也不例外,几百个独立仓库通过 manifest 锁定版本,按需组装成不同产品形态。理解源码树的顶层分层逻辑,是进行系统裁剪、驱动开发和设备适配的基础。kernel、device、vendor、drivers 等核心目录各司其职,分别对应内核、硬件适配、产品定义和驱动框架。设备树描述硬件细节,选择正确的地板配置往往决定开发板能否正常启动。本文以 RK3568 开发板为实例,详细讲解了源码树结构、设备树选型方法以及 hb build 的完整编译流程,

weixin_29204121的博客 232

memcached全面剖析(入门到精通)

吐血推荐,好资料!客户端的应用,以及服务器端的管理,和原理!

memcached全面剖析.pdf

memcached全面剖析,讲述了memcached的原理,架构以及简单的案列分析

memcached全面剖析

memcached的基础知识 由日本的mixi两名工程师连载 翻译的中文

Zabbix监控网络设备讲解

Zabbix监控网络设备讲解 本人在研究学习zabbix的时候,网上找过很多如何监控路由,交换,或者是防火墙的文章,但很多都比较散,这里我出一个大概的整合,方便大家参考和学习。本章就拿华三的交换机来做文章。 监控网络设备首先我们需要开启snmp协议,华三怎么开启snmp协议在我的博客里有写到,其次就是找到版本对应的OID,zabbix就是通过抓取设备的OID来做到监控网络设备的,当然zabbix也不仅仅只有通过snmp来监控设备,还有很多别的功能,这些功能我会在以后的博客里面一一更新 文章目录Zab

太阳了文哥的博客 3375

【华为鸿蒙3.0/荣耀安卓12使用VMOS Pro的激活方式 方法二】

关于荣耀手机安卓12如何解除进程限制,这里提供以下教程供小伙伴们参考。

Amy_mumu的博客 13万+

STM32F103单片机驱动TM1637数码管显示模块

最近项目中需要用到数码管显示,于是买了一个TM1637芯片驱动的四位数码显示模块,现将调试过程记录一下,方便以后参考。 使用的单片机是STM32F103C8T6最小系统 使用的数码管模块是TM1637四位数码管显示模块 实际运行效果 下面先看一下TM1637和数码管连接的具体线路图 实际使用的模块没有带按键,只用了4个数码管,模块和单片机连接只需要4根线VCC、GND、CLK、DIO。芯片和单片机通信使用的是I2C总线,下面就来说一下如何...

HXYDJ的博客 1万+

(10)Proteus 8.9上的STM32仿真系列(HAL)---freertos

实验设计:通过cubemxide生成freertos工程,然后创建一个 pc13 led灯间隔200ms闪烁的任务。非常遗憾的是proteus8.9仿真失败,实物上没有问题,但还是把流程过一遍。 一、原理图 实物是淘宝上stm32f103 c8t6的核心板,proteus上没有这个芯片,这里图上大概表示一下,用的是核心板自带的pc13引脚的led灯。 二、cubemxide配置 1.RCC如之前工程一样配置 2、配置SYS timebase Source不要使用systick,自己选择一个定时器,我这

qq_35442550的博客 7331

论文阅读—Square Attack: a query-efficient black-box adversarial attack via random search

论文阅读—Square Attack: a query-efficient black-box adversarial attack via random search 发表位置 ECCV 2020 摘要 作者提出了一种基于得分的黑盒Square attack,该模型不依赖于模型的局部梯度信息,因此可以绕过梯度隐藏防御攻击。Square Attack是一种随机搜索方法,它在随机位置选择局部的方形更新,使得每次迭代时扰动近似位于可行集的边界。 背景 当涉及到对安全至关重要的机器学习应用时,对抗性的例子尤其值得

yayayamaomaoya的博客 2485

AI Agent Harness自动化漏洞扫描

本文要介绍的AI Agent Harness自动化漏洞扫描方案,正是为了解决传统漏扫的上述痛点而生。漏洞检出率提升35%以上,逻辑漏洞检出率从不足30%提升到92%误报率从27%降到3%以下,人工复核成本降低90%支持自定义业务系统、IoT、工控等多场景资产扫描,适配成本降低80%内置反馈学习机制,扫描效果越用越好AI Agent是指具备自主感知、决策、行动能力的大模型驱动程序,它可以根据给定的目标,自主调用工具、规划步骤、完成任务。

AI 原生应用开发的博客 470

在MATLAB中将C语言代码转化为可执行的mexw64文件

这样,您可以将高效的C语言算法集成到MATLAB环境中,以便更好地利用MATLAB的功能和特性。请记住,在使用mex转换C语言代码之前,您需要正确编写和测试C语言代码,并确保它与MATLAB的mex接口兼容。MATLAB是一种功能强大的数值计算软件,它提供了一个机制,可以将C语言代码转化为MATLAB可执行的mexw64文件。在上述命令中,"-output"选项指定生成的mex文件的名称,"myfunction"是您选择的名称,"myfunction.c"是要编译的C语言源文件。步骤1:编写C语言代码。

CodeRoarX的博客 1422

【Spring Cloud Alibaba】Linux安装RocketMQ以及RocketMQ Dashboard可视化工具

在当今分布式架构的开发中,消息队列成为了一种常见的解决方案。RocketMQ是阿里巴巴开源的分布式消息中间件,具有高吞吐量、高可用性和强大的扩展性,因此在构建大规模、高可靠性的应用系统时备受推崇。而在使用RocketMQ时,为了更好地了解消息的流动和监控,RocketMQ Dashboard成为了一个不可或缺的可视化工具。本篇博客将带大家一步步在Linux系统中安装RocketMQ,并介绍如何配置和使用RocketMQ Dashboard。

编码人生 3365

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

上一篇: 基于YOLOv8的智能宿舍安全监测系统:从模型训练到应用部署全流程解析
下一篇: AI角色动作生成技术:从扩散模型到打响指细节控制
weixin_34341117
博客等级 码龄11年 4259粉丝 1204原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值