OpenHarmony鸿蒙硬件Hi3861-添加应用程序位置、流程

介绍

在开源鸿蒙(OpenHarmony)Hi3861开发板上添加新功能(如驱动、应用程序、自定义模块等),需要遵循其源码目录结构和构建规则。以下是具体的添加位置、步骤和示例,帮助你快速上手:

功能类型与添加位置

Hi3861属于OpenHarmony轻量系统(LiteOS-M内核),源码目录结构清晰,不同类型的功能需放在对应目录下:

功能类型 建议添加目录 说明
应用程序 applications/sample/wifi-iot/app 如LED控制、传感器采集、UART通信等上层应用(基于系统API开发)。
自定义驱动 drivers/peripheral/[新驱动目录] 如新增温湿度传感器(DHT11)、OLED屏等硬件驱动(需对接GPIO/I2C等外设)。
系统组件/库 utils/native/lite/[自定义库目录] 如通用算法库、日志工具等可复用的组件(供多个应用/驱动调用)。
内核定制 kernel/liteos_m/ 如修改任务调度、添加系统调用(需熟悉LiteOS-M内核,谨慎修改)。

添加应用程序

以LED控制为例

1. 目录位置:applications/sample/wifi-iot/app

该目录用于存放Hi3861的上层应用程序,每个子目录对应一个独立功能模块。例如:

  • 已有led_example(LED示例)、button_example(按键示例)等,可参考其结构添加新功能。

2. 添加步骤:

(1)创建功能目录

在applications/sample/wifi-iot/app下新建目录(如my_led_app),用于存放代码和构建配置:

mkdir -p applications/sample/wifi-iot/app/my_led_app
(2)编写功能代码

在my_led_app目录下创建源码文件(如my_led.c),实现LED闪烁功能:

#include <stdio.h>
#include "ohos_init.h"
#include "wifiiot_gpio.h"
#include "wifiiot_gpio_ex.h"
#include "wifiiot_pwm.h"
#include "wifiiot_timer.h"

// LED初始化(Hi3861的LED接在GPIO9)
static void LedInit(void) {
    GpioInit();
    IoSetFunc(WIFI_IOT_GPIO_9, WIFI_IOT_GPIO_FUNC_GPIO_9_GPIO);  // 配置GPIO9为GPIO功能
    GpioSetDir(WIFI_IOT_GPIO_9, WIFI_IOT_GPIO_DIR_OUT);         // 设置为输出
}

// LED闪烁任务
static void LedTask(void) {
    LedInit();
    while (1) {
        GpioSetOutputVal(WIFI_IOT_GPIO_9, 1);  // 点亮LED
        usleep(500000);                        // 延时500ms
        GpioSetOutputVal(WIFI_IOT_GPIO_9, 0);  // 熄灭LED
        usleep(500000);
    }
}

// 注册任务到系统初始化流程
APP_FEATURE_INIT(LedTask);
(3)编写BUILD.gn配置文件

在my_led_app目录下创建BUILD.gn,定义构建规则(告诉系统如何编译该模块):

# 引入OpenHarmony轻量系统的组件模板
import("//build/lite/config/component/lite_component.gni")

# 定义可执行程序目标(目标名为my_led_app)
executable("my_led_app") {
    # 源码文件(当前目录下的my_led.c)
    sources = [ "my_led.c" ]

    # 依赖的系统模块(GPIO驱动、初始化框架等)
    deps = [
        "//base/iot_hardware/peripheral:peripheral_api",  # 外设API(含GPIO)
        "//utils/native/lite:utils",                      # 基础工具库
    ]

    # 编译选项(可选,如开启调试)
    cflags = [ "-Wall", "-O0" ]  # -O0关闭优化,便于调试
}

# 将目标添加到系统组件,使其被打包进固件
lite_component("my_led_component") {
    features = [ ":my_led_app" ]  # 关联上面定义的可执行程序
}
(4)修改上层组件配置,引入新功能

为了让新功能被系统识别并编译,需要在上级目录的BUILD.gn 中添加组件依赖:

打开applications/sample/wifi-iot/app/BUILD.gn,在features中添加新组件:

import("//build/lite/config/component/lite_component.gni")

lite_component("app") {
    features = [
        "led_example:led_example",  # 已有示例(保留)
        "my_led_app:my_led_component"  # 添加新组件
    ]
}

原文出处:/show_1GW2DcHuZPj0.html