#2020征文-开发板#【 AI Camera连载】第一个应用程序

蓝初柳
发布于 2021-1-8 17:04
浏览
0收藏

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. 源码目录简介

#2020征文-开发板#【 AI Camera连载】第一个应用程序-鸿蒙开发者社区

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

#2020征文-开发板#【 AI Camera连载】第一个应用程序-鸿蒙开发者社区

 界面如下:

#2020征文-开发板#【 AI Camera连载】第一个应用程序-鸿蒙开发者社区

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

 下面部分是管理串口烧录的部分:

#2020征文-开发板#【 AI Camera连载】第一个应用程序-鸿蒙开发者社区


7.1.4 通过网口烧写其他内容(OHOS_Image.bin、rootfs.img、userfs.img)
7.1.4.1 设置PC的IP地址:
在网络图标上点击鼠标右键,单击打开“打开网络和共享中心”

#2020征文-开发板#【 AI Camera连载】第一个应用程序-鸿蒙开发者社区

 点击当前网络:

#2020征文-开发板#【 AI Camera连载】第一个应用程序-鸿蒙开发者社区

 进入PC的IP设置:

#2020征文-开发板#【 AI Camera连载】第一个应用程序-鸿蒙开发者社区

 设置PC的静态IP为:192.168.1.3

#2020征文-开发板#【 AI Camera连载】第一个应用程序-鸿蒙开发者社区

7.1.4.2 设置目标板(uboot)的IP
通过HiTool的终端连接到目标板系统,下面是管理终端的串口的部分:

#2020征文-开发板#【 AI Camera连载】第一个应用程序-鸿蒙开发者社区

 在uboot倒计时阶段输入任意键,让系统停留在uboot阶段:

#2020征文-开发板#【 AI Camera连载】第一个应用程序-鸿蒙开发者社区

查看默认配置:
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。

#2020征文-开发板#【 AI Camera连载】第一个应用程序-鸿蒙开发者社区

 流程如下:

#2020征文-开发板#【 AI Camera连载】第一个应用程序-鸿蒙开发者社区

 点击“烧写”按键后,控制台会提示重启目标板:

#2020征文-开发板#【 AI Camera连载】第一个应用程序-鸿蒙开发者社区

 重启后,系统就自动进入烧写了:

#2020征文-开发板#【 AI Camera连载】第一个应用程序-鸿蒙开发者社区

 烧写成功:

#2020征文-开发板#【 AI Camera连载】第一个应用程序-鸿蒙开发者社区

登陆系统:
此时登陆会进入之前的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

 重启后系统即可登陆到官方系统:

#2020征文-开发板#【 AI Camera连载】第一个应用程序-鸿蒙开发者社区

 拍照或者录视频:

#2020征文-开发板#【 AI Camera连载】第一个应用程序-鸿蒙开发者社区

 wifi列表:

#2020征文-开发板#【 AI Camera连载】第一个应用程序-鸿蒙开发者社区

 关于:

#2020征文-开发板#【 AI Camera连载】第一个应用程序-鸿蒙开发者社区

 但是uart-debug无法输入指令:

#2020征文-开发板#【 AI Camera连载】第一个应用程序-鸿蒙开发者社区

 下面烧写自己修改过~/harmony/sdk/applications/sample/camera/app/src/helloworld.c应用的系统:

#2020征文-开发板#【 AI Camera连载】第一个应用程序-鸿蒙开发者社区

 设置环境变量:

    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

重启后进入系统:
桌面和官方提供的镜像一样的,不过终端界面有变化了,可以登录操作:

#2020征文-开发板#【 AI Camera连载】第一个应用程序-鸿蒙开发者社区

 执行测试:

    OHOS # ./bin/camera_app

#2020征文-开发板#【 AI Camera连载】第一个应用程序-鸿蒙开发者社区

7.2 使用VSCode烧录
使用该方法最好搭配共享文件夹来使用,用VSCode编辑源码、烧录固件,用Linux服务器进行代码编译。
“官方-开发Hi3516第一个应用程序示例”中有VSCode烧录的详细说明,这里不再赘述。

本文结束,感谢您的阅读!

 

分类
标签
已于2021-1-8 17:04:42修改
收藏
回复
举报
回复
    相关推荐