引言

本文通过一个非常简单的程序,展现了在小熊派BearPi-HM_Micro_Small开发板上进行鸿蒙设备开发的完整流程:下载源码、创建工程、编写源程序、编写/修改编译脚本、编译、烧写、测试。


提示: 请先按照《搭建小熊派BearPi-HM_Micro_Small的纯Ubuntu开发环境》搭建好开发环境。

本文参考了小熊派BearPi-HM_Micro_Small开发板的部分教程。

https://gitee.com/bearpi/bearpi-hm_micro_small


一、下载源码

1、如果没有安装git,先参考《git与gitee快速入门》第二部分,安装git。

2、在希望放置小熊派鸿蒙源码的目录下执行以下命令,下载源码。

git clone https://gitee.com/bearpi/bearpi-hm_micro_small.git

小熊派 python 小熊派开源社区官网_鸿蒙


二、创建工程

1、打开DevEco Device Tool。(1)单击左侧工具栏中的DevEco图标;(2)单击Projects;(3)单击Import Project按钮;(4)在弹出的窗口中,选择文件夹Projects;(5)选择项目bearpi-hm_micro_small;(6)单击Import按钮。

小熊派 python 小熊派开源社区官网_鸿蒙_02

2、在下图所示窗口中,单击Import。

小熊派 python 小熊派开源社区官网_git_03

3、在下图所示窗口中,选择Import from OpenHarmony Source。

小熊派 python 小熊派开源社区官网_开发板_04

4、按下图设置完毕后,单击Open。

小熊派 python 小熊派开源社区官网_小熊派 python_05

5、在下图所示窗口中,选择Current Window,打开项目。

小熊派 python 小熊派开源社区官网_开发板_06

小熊派 python 小熊派开源社区官网_git_07


三、编写源程序

1、在路径applications/BearPi/BearPi-HM_Micro/samples下新建一个文件夹:dandelion

2、在文件夹dandelion下新建一个文件夹:hello_world

3、在文件夹hello_world下新建一个文件:hello_world.c,在这个文件中编写源程序:

#include <stdio.h>

int main(int argc, char **argv)
{
    printf("\n************************************************\n");
    printf("\n\t\tHello BearPi!\n");
    printf("\n************************************************\n\n");
    
    return 0;
}


四、编写/修改编译脚本

1、在文件夹hello_world下新建一个文件:BUILD.gn,在这个文件中编写源程序hello_world.c的编译脚本:

executable("hello_world_exe") {
    output_name = "hello_world"
    sources = [ "hello_world.c" ]
    include_dirs = []
    defines = []
    cflags_c = []
    ldflags = []
}

executable("hello_world_exe"):指示编译构建子系统去完成一个名为hello_world_exe的编译构建“小目标”。executable是这个“小目标”类型;这个“小目标”的具体内容:将sources列表中的源文件(也就是hello_world.c)编译成一个可执行文件,生成的可执行文件的名字由output_name指定,也就是hello_world

2、在文件夹dandelion下新建一个文件:BUILD.gn

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

lite_component("dandelion_app") {
    features = [
        "hello_world:hello_world_exe",
    ]
}

lite_component("dandelion_app"):指示编译构建子系统去完成一个类型为lite_component的、名为dandelion_app的编译构建目标。

lite_component这种类型是在lite_component.gni定义的,用于指示编译构建子系统去编译构建一个组件(Component)。

目前,在dandelion_app这个编译构建目标中只包含了hello_world目录中的编译构建“小目标” hello_world_exe。也就是说,这里要构建的组件(Component)中只包含一个可执行程序:hello_world。至于这个组件的名称,是在下个文件applications.json中指定的。

3、打开路径build/lite/components下的子系统applications的配置文件applications.json,将之前要编译构建的组件添加到子系统applications的组件列表中。

小熊派 python 小熊派开源社区官网_源程序_08

{
          "component": "bearpi_dandelion_app",
          "description": "app written by dandelion",
          "optional": "true",
          "dirs": [
            "applications/BearPi/BearPi-HM_Micro/samples/dandelion"
          ],
          "targets": [
            "//applications/BearPi/BearPi-HM_Micro/samples/dandelion:dandelion_app"
          ],
          "rom": "",
          "ram": "",
          "output": [],
          "adapted_kernel": [ "liteos_a" ],
          "features": [],
          "deps": {
            "components": [],
            "third_party": []
          }
        },

4、打开路径vendor/bearpi/bearpi_hm_micro下的产品bearpi_hm_micro的配置文件config.json,将之前要编译构建的组件bearpi_dandelion_app添加到子系统applications的组件列表中。

小熊派 python 小熊派开源社区官网_小熊派 python_09

{
        "subsystem": "applications",
        "components": [
           { "component": "bearpi_dandelion_app", "features":[] },
           { "component": "bearpi_sample_app", "features":[] },
           { "component": "bearpi_screensaver_app", "features":[] },
           { "component": "bearpi_sample_communication", "features":[] }
        ]
      },


五、编译

1、选择产品。在项目的根目录下执行以下命令:

hb set

小熊派 python 小熊派开源社区官网_开发板_10

如上图所示,只有一个产品选项,所以直接回车即可。

2、编译。在项目的根目录下执行以下命令:

hb build -t notest --tee -f

小熊派 python 小熊派开源社区官网_鸿蒙_11

等待,直到终端中出现如下图所示的build success字样,说明编译成功。

小熊派 python 小熊派开源社区官网_小熊派 python_12


六、烧写

1、复制镜像

编译完成后,生成的镜像文件在目录:out/bearpi_hm_micro/bearpi_hm_micro中,将三个镜像文件:OHOS_Image.stm32rootfs_vfat.imguserfs_vfat.img拷贝到目录:applications/BearPi/BearPi-HM_Micro/tools/download_img/kernel中。

cp out/bearpi_hm_micro/bearpi_hm_micro/OHOS_Image.stm32 applications/BearPi/BearPi-HM_Micro/tools/download_img/kernel/
cp out/bearpi_hm_micro/bearpi_hm_micro/rootfs_vfat.img applications/BearPi/BearPi-HM_Micro/tools/download_img/kernel/
cp out/bearpi_hm_micro/bearpi_hm_micro/userfs_vfat.img applications/BearPi/BearPi-HM_Micro/tools/download_img/kernel/

2、用USB线将开发板接入Ubuntu虚拟机。

小熊派 python 小熊派开源社区官网_git_13

小熊派 python 小熊派开源社区官网_git_14

3、将开发板的拨码开关上拨到“000”烧录模式,并按一下开发板的RESET按键。

小熊派 python 小熊派开源社区官网_开发板_15

4、双击打开STM32CubeProgrammer;选择接口类型:USB;单击刷新按钮;单击Connect连接开发板。

小熊派 python 小熊派开源社区官网_小熊派 python_16

5、连接上以后,单击Open file;在工程目录下选中烧录配置的tvs文件,单击Open。

小熊派 python 小熊派开源社区官网_git_17

小熊派 python 小熊派开源社区官网_鸿蒙_18

6、点击Browse按钮,然后选择工程源码下的烧录镜像路径,单击Open

小熊派 python 小熊派开源社区官网_git_19

小熊派 python 小熊派开源社区官网_开发板_20

7、点击Download按钮启动镜像烧录,并等待烧录完毕。

小熊派 python 小熊派开源社区官网_鸿蒙_21

小熊派 python 小熊派开源社区官网_开发板_22

8、烧写完毕后,在弹出的窗口中单击OK;关闭STM32CubeProgrammer。

小熊派 python 小熊派开源社区官网_源程序_23

9、点击DevEco Device Tool左侧工具栏中的DevEco图标,在“PROJECT TASKS”–鸿蒙工程bearpi-hm_micro_small下,单击Monitor按钮,打开串口终端。

小熊派 python 小熊派开源社区官网_小熊派 python_24

终端窗口如下图所示:

小熊派 python 小熊派开源社区官网_源程序_25

10、将开发板的拨码开关拨至“010”emmc启动模式,并按一下开发板的“RESET”按钮复位开发板,开发板开始启动。

小熊派 python 小熊派开源社区官网_开发板_26

在串口终端中打印出启动日志信息。


七、测试

在串口终端中输入指令:./bin/hello_world,然后回车,在串口终端中会显示下图所示结果:

小熊派 python 小熊派开源社区官网_git_27