引言
本文通过一个非常简单的程序,展现了在小熊派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
二、创建工程
1、打开DevEco Device Tool。(1)单击左侧工具栏中的DevEco图标;(2)单击Projects;(3)单击Import Project按钮;(4)在弹出的窗口中,选择文件夹Projects;(5)选择项目bearpi-hm_micro_small;(6)单击Import按钮。
2、在下图所示窗口中,单击Import。
3、在下图所示窗口中,选择Import from OpenHarmony Source。
4、按下图设置完毕后,单击Open。
5、在下图所示窗口中,选择Current Window,打开项目。
三、编写源程序
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
的组件列表中。
{
"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
的组件列表中。
{
"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
如上图所示,只有一个产品选项,所以直接回车即可。
2、编译。在项目的根目录下执行以下命令:
hb build -t notest --tee -f
等待,直到终端中出现如下图所示的build success
字样,说明编译成功。
六、烧写
1、复制镜像
编译完成后,生成的镜像文件在目录:out/bearpi_hm_micro/bearpi_hm_micro
中,将三个镜像文件:OHOS_Image.stm32
、rootfs_vfat.img
和userfs_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虚拟机。
3、将开发板的拨码开关上拨到“000”烧录模式,并按一下开发板的RESET按键。
4、双击打开STM32CubeProgrammer;选择接口类型:USB;单击刷新按钮;单击Connect连接开发板。
5、连接上以后,单击Open file;在工程目录下选中烧录配置的tvs文件,单击Open。
6、点击Browse按钮,然后选择工程源码下的烧录镜像路径,单击Open
7、点击Download按钮启动镜像烧录,并等待烧录完毕。
8、烧写完毕后,在弹出的窗口中单击OK;关闭STM32CubeProgrammer。
9、点击DevEco Device Tool左侧工具栏中的DevEco图标,在“PROJECT TASKS”–鸿蒙工程bearpi-hm_micro_small下,单击Monitor按钮,打开串口终端。
终端窗口如下图所示:
10、将开发板的拨码开关拨至“010”emmc启动模式,并按一下开发板的“RESET”按钮复位开发板,开发板开始启动。
在串口终端中打印出启动日志信息。
七、测试
在串口终端中输入指令:./bin/hello_world
,然后回车,在串口终端中会显示下图所示结果: