【鸿蒙南向开发】OpenHarmony瘦设备内核移植实战

一、背景

OpenHarmony系统移植最核心的步骤是内核的移植,内核的稳定是一切子系统稳定的基础,上一篇我们一起认识了板卡、SoC、芯片架构,并在OpenHarmony源码中找到了对应层面的开发路径,本文将开始介绍实操部分。

二、内核启动流程梳理

确保移植前开发板的官方SDK是可以跑起来的,原有SDK通常为FreeRTOS或者其他系统,固件的编译有对应编译流程,以及系统启动流程。我们要做的工作就是梳理原有系统启动流程,包括:如何将固件代码拷贝到内存,栈针从哪里开始引导系统启动,系统启动前需要做哪些软硬件的初始工作,然后让OH通过这套流程跑起来。

系统启动流程及原理图:
image.png

MCU启动工作原理图:
image.png

1.BootLoader将系统程序从Flash加载到运行内存中。

2.通过汇编指令完成系统启动前的软硬件初始化准备工作。

3.初始化系统并启动系统。

4.系统启动完成。

5.完成系统框架层的启动,使各个子系统处于可用状态。

三、配置vendor

配置vendor,创建如下目录结构
image.png

BUILD.gn代码

<think>嗯,用户的问题是关于完成OpenHarmony内核移植后如何进行应用开发。结合之前的对话历史,用户已经了解内核移植的基本条件(比如HDF驱动框架、HDC服务等),现在更关注具体的操作方法。 用户可能是个嵌入式开发者,正在尝试将OpenHarmony移植到某个定制开发板上,现在需要验证应用层开发能力。从ta追问的细节来看(比如驱动验证、故障排查),实际开发中可能遇到了设备识别或调试连接的问题,需要实操性强的指导。 参考站内资料: - 引用[1][5]提到SoC适配和内核编译的关键步骤,说明应用开发的前提是内核移植彻底完成 - 引用[3]强调要确保原SDK能运行,暗示开发板基础功能必须正常 - 引用[4]的"全流程指南"提示需要系统化操作流程 需要重点解答: 1️⃣ 环境配置链条:SDK版本匹配→工程导入→设备连接 2️⃣ 验证手段:特别是HDF驱动完整性和HDC服务的检查方法 3️⃣ 调试技巧:补充之前未展开的log分析工具(如hilog) 特别注意用户历史提问中的"DevEco是否能识别"这个核心痛点,在回答里用加粗强调触发条件(如HDF驱动),并给出故障排查树。对于轻量系统(Hi3861)这种特殊场景单独说明,因为其HDC支持方式与标准系统不同。 最后生成的问题要覆盖开发全链路:从底层适配(驱动验证)→开发环境(设备描述文件)→调试(故障排查),形成闭环。 </think>基于OpenHarmony内核移植完成的开发板进行应用开发,需严格遵循以下流程(结合内核移植与应用开发的关键衔接点): --- ### **一、应用开发前提条件验证** 1. **HDF驱动框架完整性验证** - 检查`/vendor/hisi/hi3861/hi3861/hdf_config`目录(以Hi3861为例)是否存在完整的`.hcs`设备描述文件 - 运行`hdf_test`单元测试(需内核编译时启用`CONFIG_DRIVERS_HDF_TEST=y`),输出示例如下: ```bash [HDF]HDF tests begin... [HDF]TestSensorHdfDriver: test success! [HDF]HDF tests end! ``` 确认所有硬件模块驱动通过测试[^3][^5] 2. **HDC调试服务启用** - 在内核编译配置中开启: ```makefile CONFIG_DRIVERS_HDF=y CONFIG_DRIVERS_HDF_PLATFORM_HDC=y # 启用HDC守护进程 ``` - 开发板启动后执行 `hdc_std list targets`,若显示设备ID则服务正常[^4] --- ### **二、DevEco Studio开发环境配置流程** #### 步骤1:SDK版本匹配 1. 查询开发板系统版本(串口终端执行 `cat /etc/version`) 2. 在DevEco中安装**完全匹配**的SDK: `File > Settings > OpenHarmony SDK` → 勾选对应API版本[^1] ![SDK配置界面](https://example.com/sdk-config.png) #### 步骤2:工程配置 ```bash # 创建标准OpenHarmony应用工程 deveco create-project -t template@openharmony -n MyApp ``` 修改`entry/build-profile.json5`指定开发板API版本: ```json "buildOption": { "apiType": "system", // 系统级应用 "apiVersion": "8" // 与开发板系统版本一致 } ``` #### 步骤3:设备连接与调试 | 连接方式 | 操作步骤 | 验证命令 | |----------------|--------------------------------------------------------------------------|-----------------------| | **USB直连** | 1. 开发板启用USB调试模式<br>2. DevEco点击 `Run > Edit Configurations` → 选择设备 | `hdc_std shell` | | **远程连接** | 1. 开发板获取IP<br>2. Tools > Remote Development → 输入IP:端口 | `ping [开发板IP]` | --- ### **三、应用部署与问题排查** #### 部署流程 ```mermaid graph LR A[编译HAP] --> B(HAP签名) B --> C{连接方式} C -->|USB| D[adb push /data/app] C -->|网络| E[hdc_std install] D & E --> F[启动应用] ``` #### 常见问题排查表 | 故障现象 | 根本原因 | 解决方案 | |---------------------------|---------------------------|--------------------------------------------------------------------------| | DevEco无法识别设备 | HDC服务未启动 | 检查内核配置`CONFIG_DRIVERS_HDF_PLATFORM_HDC`并重新编译[^4] | | 应用安装失败(错误码907) | SDK版本不匹配 | 在`build-profile.json5`中修正`apiVersion`[^1] | | 触摸屏/显示异常 | HDF驱动未实现图形子系统 | 补充`//drivers/framework/model/display`驱动实现[^3] | | 日志提示“Permission deny” | 未配置SELinux策略 | 在`/etc/selinux/targeted/policy`中添加设备访问规则[^5] | --- ### **四、轻量系统开发特殊处理(以Hi3861为例)** 1. **HDC服务精简配置** 修改`//drivers/hdf/framework/tools/hdc/BUILD.gn`: ```gn group("hdc") { deps = [ "//drivers/hdf/framework/tools/hdc:hdcd" ] # 仅保留守护进程 } ``` 2. **设备描述文件最小化** 创建`/vendor/hisilicon/hi3861/hdf_config/device_info.hcs`: ```hcs device_system :: device { device0 :: deviceNode { policy = 1; // 内核态服务 name = "gpio"; serviceName = "HDF_PLATFORM_GPIO_MANAGER"; } } ``` 3. 使用 **串口日志调试**(当HDC不可用时): ```c #include "hilog.h" HILOG_INFO(LOG_APP, "App launched successfully!"); // 日志级别0x03 ``` 通过`cat /dev/kmsg | grep "APP"`过滤日志[^2] --- ### **关键结论** ✅ **成功标志**: 当DevEco的**设备列表**中显示开发板型号(如Hi3861),且能部署**系统签名应用**(如调用GPIO的Ability),即表明内核移植与应用开发通道完全打通[^1][^4]。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值