#2020征文-开发板#【 AI Camera连载】第一个应用程序
1. 参考文档:
● 官方-开发Hi3516第一个应用程序示例 :https://device.HarmonyOS.com/cn/docs/start/introduce/oem_camera_start_first_example-0000001051610926
● 源码码获取:https://openharmony.gitee.com/openharmony/docs/blob/master/get-code/%E6%BA%90%E7%A0%81%E8%8E%B7%E5%8F%96.md
2. 获取源码:从代码仓库获取
该方法和网速有关,可能耗时较久,推荐用后文通过镜像站点下载的方法。
2.1 注册码云gitee账号。
2.2 注册码云SSH公钥,请参考码云帮助中心的公钥管理:https://gitee.com/help/articles/4181
2.3 安装git客户端并配置用户信息。
$ git config --global user.name "xxx"
$ git config --global user.email "xxx@xxx.com"
$ git config --global credential.helper store
安装码云repo工具,可以执行如下命令:
$ sudo su // 不在root用户,sudo都不让执行下面内容
$ apt install curl
$ curl https://gitee.com/oschina/repo/raw/fork_flow/repo-py3 > /usr/local/bin/repo
$ chmod a+x /usr/local/bin/repo
$ chown ubuntu:ubuntu /usr/local/bin/repo
$ pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple requests
$ exit
2.4 通过repo下载
执行下载:
$ mkdir ~/harmony/sdk-repo && cd ~/harmony/sdk-repo
$ repo init -u https://gitee.com/openharmony/manifest.git -b master --no-repo-verify
$ repo sync -c
注意:repo获取的镜像是不带git管理的,需要自己重新添加。
3. 获取源码:通过镜像站点下载(推荐)
OpenHarmony全量代码:https://repo.huaweicloud.com/harmonyos/os/1.0/code-1.0.tar.gz
Hi3516解决方案(二进制):https://repo.huaweicloud.com/harmonyos/os/1.0/ipcamera_hi3516dv300-1.0.tar.gz
添加git管理:
~/harmony/sdk$ tar -xzvf ~/harmony/backup/source/code-all-1.0.tar.gz -C ~/harmony/sdk/
~/harmony/sdk$ git init
~/harmony/sdk$ git add .
~/harmony/sdk$ git commit -m "initial commit"
4. 源码目录简介
5. 修改源码
~/harmony/harmony-sdk$ sudo chown ubuntu:ubuntu -R harmony-sdk/
$ vi ~/harmony/sdk/applications/sample/camera/app/src/helloworld.c
#include <stdio.h>
#include "los_sample.h"
int main(int argc, char **argv)
{
printf("\n************************************************\n");
printf("\n\t\tHello OHOS!\n");
+ printf("\n\t\tHello World!\n");
printf("\n************************************************\n\n");
LOS_Sample(g_num);
return 0;
}
6. 编译
$ python build.py ipcamera_hi3516dv300 -b debug
...
[1336/1338] STAMP obj/build/lite/ohos.stamp
[1337/1338] ACTION //build/lite:gen_rootfs(//build/lite/toolchain:linux_x86_64_clang)
[1338/1338] STAMP obj/build/lite/gen_rootfs.stamp
ohos ipcamera_hi3516dv300 build success!
注意:
如果删除了SDK的部分内容可能导致再次编译会报错(即使用“git reset --hard
”恢复都没有用),解决办法是删除当前工程,重新解压源码,然后重新编译即可。
写成编译脚本:
$ touch build.sh && chmod 777 build.sh && vi build.sh
#/bin/bash
python build.py ipcamera_hi3516dv300 -b debug
脚本可根据自己需求慢慢完善,下面是用脚本进行编译:
$ ./build.sh
=== start build ===
Done. Made 247 targets from 156 files in 1025ms
ninja: Entering directory `/home/ubuntu/harmony/sdk/out/ipcamera_hi3516dv300'
[1/1338] STAMP obj/applications/sample/camera/communication/sample.stamp
[2/1338] COPY ../../applications/sample/camera/hap/launcher.hap system/internal/launcher.hap
...
[1337/1338] ACTION //build/lite:gen_rootfs(//build/lite/toolchain:linux_x86_64_clang)
[1338/1338] STAMP obj/build/lite/gen_rootfs.stamp
ohos ipcamera_hi3516dv300 build success!
将产物拷贝到Windows共享目录中:
$ rm /mnt/hgfs/proj-harmony/images/out/ -RF
$ cp -rf out/ /mnt/hgfs/proj-harmony/images/
7. 烧录
7.1 使用HiTool烧录
7.1.1 下载HiTool
百度网盘下载地址:https://pan.baidu.com/s/1J51RpFUgJlyDxYs_mnuojw
提取码:4fn5
7.1.2 鼠标双击打开HiTool.exe
界面如下:
7.1.3 通过串口烧写bootloader(fastboot,uboot)
uboot位置:
$ ls -al ~/harmony/sdk/vendor/hisi/hi35xx/hi3516dv300/uboot/out/boot/u-boot-hi3516dv300.bin
-rwxr-xr-x 1 ubuntu ubuntu 237403 9月 9 22:57 /home/ubuntu/harmony/sdk/vendor/hisi/hi35xx/hi3516dv300/uboot/out/boot/u-boot-hi3516dv300.bin
张飞电子的视频中讲SDK中的uboot固件有问题,可能导致系统无法启动,暂时先不更新uboot,您可以直接跳到7.1.4小节阅读。
uboot网络配置:
# setenv serverip 192.168.1.3;setenv ipaddr 192.168.1.2;saveenv;
uboot启动指令:
# setenv bootcmd "sf probe 0;mmc read 0x0 0x80000000 0x800 0x3000;";
# setenv bootargs "console=ttyAMA0,115200n8 root=emmc fstype=vfat rootaddr=7M rootsize=15M rw"; saveenv; go 0x80000000
下面部分是管理串口烧录的部分:
7.1.4 通过网口烧写其他内容(OHOS_Image.bin、rootfs.img、userfs.img)
7.1.4.1 设置PC的IP地址:
在网络图标上点击鼠标右键,单击打开“打开网络和共享中心”
点击当前网络:
进入PC的IP设置:
设置PC的静态IP为:192.168.1.3
7.1.4.2 设置目标板(uboot)的IP
通过HiTool的终端连接到目标板系统,下面是管理终端的串口的部分:
在uboot倒计时阶段输入任意键,让系统停留在uboot阶段:
查看默认配置:
hisilicon # print
arch=arm
baudrate=115200
board=hi3516dv300
board_name=hi3516dv300
bootargs=mem=512M console=ttyAMA0,115200 root=/dev/mmcblk0p3 rw rootfstype=ext4 rootwait blkdevparts=mmcblk0:1M(boot),4M(kernel),7440M(rootfs)
bootcmd=mmc read 0x0 0x82000000 0x800 0x2000;bootm 0x82000000
bootdelay=2
cpu=armv7
ethact=eth0
soc=hi3516dv300
stderr=serial
stdin=serial
stdout=serial
vendor=hisilicon
verify=n
Environment size: 419/262140 bytes
设置uboot的IP地址:
hisilicon # setenv serverip 192.168.1.3;setenv ipaddr 192.168.1.2;saveenv;
hisilicon # print
arch=arm
baudrate=115200
board=hi3516dv300
board_name=hi3516dv300
bootargs=mem=512M console=ttyAMA0,115200 root=/dev/mmcblk0p3 rw rootfstype=ext4 rootwait blkdevparts=mmcblk0:1M(boot),4M(kernel),7440M(rootfs)
bootcmd=mmc read 0x0 0x82000000 0x800 0x2000;bootm 0x82000000
bootdelay=2
cpu=armv7
ethact=eth0
ipaddr=192.168.1.2
serverip=192.168.1.3
soc=hi3516dv300
stderr=serial
stdin=serial
stdout=serial
vendor=hisilicon
verify=n
Environment size: 463/262140 bytes
查看网络是否通畅:
hisilicon # ping 192.168.1.3
Hisilicon ETH net controler
eth0 : phy status change : LINK=UP : DUPLEX=FULL : SPEED=100M
Using eth0 device
ping faiLED; host 192.168.1.3 is not alive
目前不能通过路由器连接,只能通过网线直连:
hisilicon # ping 192.168.1.3
Hisilicon ETH net controler
eth0 : phy status change : LINK=UP : DUPLEX=FULL : SPEED=100M
Using eth0 device
host 192.168.1.3 is alive
7.1.4.3 在HiTool工具中依次填入OHOS_Image.bin、rootfs.img、userfs.img的文件位置
这里我们使用官方编译好的固件:ipcamera_hi3516dv300-1.0。
流程如下:
点击“烧写”按键后,控制台会提示重启目标板:
重启后,系统就自动进入烧写了:
烧写成功:
登陆系统:
此时登陆会进入之前的uboot中,单板初次启动需要修改启动参数。
hisilicon # setenv bootcmd "mmc read 0x0 0x80000000 0x800 0x2800; go 0x80000000";
注释:读取FLASH起始地址为0x800(单位为512B,即uboot大小为1MB),大小为0x2800(单位为512B,即OHOS_Image.bin大小为5MB)的内容到0x80000000的内存地址。
hisilicon # setenv bootargs "console=ttyAMA0,115200n8 root=emmc fstype=vfat rootaddr=6M rootsize=15M rw";
注释:表示设置启动参数,输出模式为串口输出,波特率为115200,数据位8,rootfs挂载于emmc器件,文件系统类型为vfat,“rootaddr=6M rootsize=14M rw”处对应填入rootfs.img的烧写起始位置与长度,此处与新增rootfs.img文件时所填大小必须相同。
保存环境变量,然后重启系统:
hisilicon # saveenv
hisilicon # reset
重启后系统即可登陆到官方系统:
拍照或者录视频:
wifi列表:
关于:
但是uart-debug无法输入指令:
下面烧写自己修改过~/harmony/sdk/applications/sample/camera/app/src/helloworld.c应用的系统:
设置环境变量:
hisilicon # setenv bootcmd "mmc read 0x0 0x80000000 0x800 0x3000; go 0x80000000";
hisilicon # setenv bootargs "console=ttyAMA0,115200n8 root=emmc fstype=vfat rootaddr=7M rootsize=15M rw";
hisilicon # saveenv
hisilicon # reset
重启后进入系统:
桌面和官方提供的镜像一样的,不过终端界面有变化了,可以登录操作:
执行测试:
OHOS # ./bin/camera_app
7.2 使用VSCode烧录
使用该方法最好搭配共享文件夹来使用,用VSCode编辑源码、烧录固件,用Linux服务器进行代码编译。
“官方-开发Hi3516第一个应用程序示例”中有VSCode烧录的详细说明,这里不再赘述。
本文结束,感谢您的阅读!