`
本帖最后由 jf_64182030 于 2020-10-17 17:08 编辑
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
- 如何在Linux环境下在Hi3516DV300开发板搭载鸿蒙OS实现一个简单的Helloworld程序:https://bbs.elecfans.com/jishu_1991158_1_1.html
- Open Harmony OS烧录总结(张飞电子):http://t.elecfans.com/c1302.html
视频课程的播放键不是点击正文里的播放图标,而是右侧边栏“关于讲师”介绍内容上面的红色图标“进入学习”或者“继续学习”。
- 【HarmonyOS HiSpark AI Camera试用连载 】AI Camera 鸿蒙程序编写编译及烧录Linux完全版:https://bbs.elecfans.com/jishu_1996035_1_1.html
这篇文章是发烧友jf_89761755写的一篇很赞的编译、烧录说明文档。
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. 源码目录简介
目录名
| 描述
|
applications
| 应用程序样例,包括wifi-iot,camera等
|
base
| 基础软件服务子系统集&硬件服务子系统集
|
build
| 组件化编译、构建和配置脚本
|
domains
| 增强软件服务子系统集
|
drivers
| 驱动子系统
|
foundation
| 系统基础能力子系统集
|
kernel
| 内核子系统
|
prebuilts
| 编译器及工具链子系统
|
test
| 测试子系统
|
third_party
| 开源第三方组件
|
utils
| 常用的工具集
|
vendor
| 厂商提供的软件
|
build.py
| 编译脚本文件
|
5. 修改源码
~/harmony/harmony-sdk$ sudo chown ubuntu:ubuntu -R harmony-sdk/
$ vi ~/harmony/sdk/applications/sample/camera/app/src/helloworld.c
- #include
- #include "los_sample.h"
- int main(int argc, char **argv)
- {
- printf("
- ************************************************
- ");
- printf("
- Hello OHOS!
- ");
- + printf("
- Hello World!
- ");
- printf("
- ************************************************
- ");
- 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
重启后进入系统:
桌面和官方提供的镜像一样的,不过终端界面有变化了,可以登录操作:
执行测试:
7.2 使用VSCode烧录
使用该方法最好搭配共享文件夹来使用,用VSCode编辑源码、烧录固件,用Linux服务器进行代码编译。
“官方-开发Hi3516第一个应用程序示例”中有VSCode烧录的详细说明,这里不再赘述。
本文结束,感谢您的阅读!
`