|
|
|
|
公众号矩阵

手把手教你搭建鸿蒙hi3518开发和运行环境

学习C语言,C++语言,数据结构和算法,操作系统,网络,驱动,设计模式等知识,用鸿蒙来强化就太对了。本文教你一步一步搭建鸿蒙的开发和运行环境,有点啰嗦,适合小白。

作者:wx5fac92438ed6a来源:鸿蒙社区|2021-01-13 14:00

想了解更多内容,请访问:

51CTO和华为官方战略合作共建的鸿蒙技术社区

https://harmonyos.51cto.com/#zz

前言

学习C语言,C++语言,数据结构和算法,操作系统,网络,驱动,设计模式等知识。

用鸿蒙来强化就太对了。本文教你一步一步搭建鸿蒙的开发和运行环境,有点啰嗦,适合小白。

本文所涉及的所有工具都可以在这里找到(提取码pbe2)。

具体有下列步骤:

  • 组装开发板
  • 连接开发板
  • 安装串口驱动
  • 安装USB驱动
  • 安装烧录工具
  • 擦除引导程序
  • 烧录系统
  • 登录开发板
  • 修改OS启动地址
  • 运行可执行程序
  • 安装VMWARE
  • 安装编译服务器
  • 访问编译服务器
  • 编译鸿蒙产品
  • 编译鸿蒙组件
  • 打通开发板网络
  • 部署NFS
  • 新增自定义组件

组装开发板

我们选用HiSpark IPC DIY Camera产品。内部含hi3518ev300芯片。

请参考产品的安装说明书。

或者参考安装视频指导。

连接开发板

开发板和PC的连接关系如下图。2条usb线(产品包装中的),其中一个三针插头,一个四针插头。



安装串口驱动

请双击USB-to-Serial Comm Port.exe。进行串口驱动安装,安装完成后。在设备管理器中应该能看到下面这样的COM接口,你的COM接口编号可能有所不同。表明串口驱动安装成功。


安装USB驱动

然后双击zadig-2.5.exe安装通用USB驱动,点击中间的Install。


安装烧录工具

直接解压HiTool-HM-5.4.9-win32-x86_64.zip文件。然后双击其中的HiTool.exe. 界面如下图。然后先将芯片切换到3518ev300。


擦除引导程序

然后就是擦除uboot了,记得使用串口来擦除。


有几点需要注意

由于编译服务器还没有创建,所以我把自己编译好的文件放网上了,你可以下载。

文件路径根据你自己的实际路径,下载下来后存放的位置。

COM口根据你之前设备管理器看到的那个CH340口选择。

确保顶部选中的芯片是3518ev300。

传输方式选择串口。

按分区烧写。

器件类型spi nor。

开始地址0,长度1M。

点击擦除后10秒内拔插usb电源线接口(即接4个针脚的那个usb口,小的那个usb头),让板子重启。

很快就能看到擦除成功的提示。


烧录系统


主要注意如下几点:

使用usb口烧录(不是串口)。

现在需要烧录4个文件(通过右侧绿色+可以添加文件)。

每个文件的名称,器件类型,地址,长度要填写正确。

最后点击烧写。

然后等待烧写成功。


如果你的烧写不成功,请检查之前的usb驱动是否已安装。

登录开发板

鸿蒙系统烧录好以后,就可以进去看一下鸿蒙系统的模样了。

双击MobaXterm_Personal_20.2.exe. 也可以用你自己喜欢的终端工具

然后点击Session, 在弹出的窗口中填好相关字段


点击OK以后,会进入下面这个界面。


这里是uboot程序的界面,还没有进入鸿蒙OS,原因是uboot此时不知道鸿蒙OS的启动地址。

然后我们设置启动地址

设置OS启动地址

setenv bootcmd "sf probe 0;sf read 0x40000000 0x100000 0x600000;go 0x40000000";

setenv bootargs "console=ttyAMA0,115200n8 root=flash fstype=jffs2 rw rootaddr=7M rootsize=8M";

保存配置

saveenv

然后重启


然后,很快就可以看到鸿蒙OS起来了。


如果你没有看到OHOS#字样,请按下几次enter键。接下来,我们手动运行一个鸿蒙的程序。

运行可执行程序

进入bin目录,运行writer程序(这个程序是我新增的,如果你的开发板上没有,你可以运行./camera_app程序)。


创建编译服务器

为了省去搭建编译环境的繁琐,本次将一个已经搭建好的编译服务器制作成镜像。我们只需要使用这个镜像即可获得编译环境。

镜像文件比较大(超过8G),请直接找老师获取,也可以去前言提到的地方下载(建议晚上睡觉时下载)。

本次使用的Ubuntu是不带桌面环境的。内部已经安装好HarmonyOS的编译环境,并且安装了samba文件共享工具。方便windows访问。

请先安装VMWARE WorkStation软件

然后打开它, 选择 文件-->打开



然后开始了服务器创建过程,这个过程比较漫长,请保持耐心。

访问服务器

服务器创建完成后。然后我们对它进行上电启动


等待服务器开机。1分钟内一般就能正常起来。这个过程中,注意保持网线插入,因为虚拟机和PC之间是通过有线网卡桥接的。启机过程有软件会探测网络是否在,否则会很慢。

当屏幕输出变慢后,我们就可以访问它了,当然也可以在黑窗口里面直接键入各种命令,不过不方便。


把鼠标放入黑窗口,点击以后,鼠标焦点就进入黑窗口了,让焦点退出来的方法是按CTRL+g。

如果想在黑窗口操作linux相关命令,则键入用户名compile 密码compile。

一般我们不在黑窗口操作。

我们需要如下2种方法来访问虚拟机:

  • 通过ssh访问,即可以远程登录虚拟机的shell,并执行命令。
  • 通过文件共享访问,可以在windows上查看和修改虚拟机中的文件。

注意:

当前创建的虚拟机采用的是桥接模式,它的IP地址为192.168.2.20。你需要确保虚拟机中的IP地址和自己PC的IP地址在同一个网段。(最简单的方法是在自己的网卡上添加一个192.168.2.X网段的IP地址)。Windows添加IP地址的方法请自行查阅。

如果多台编译服务器在同一个局域网络,那么IP地址会冲突,因为都是192.168.2.20。所以,需要对地址进行修改。

SSH访问


点击OK以后,就登录到了编译服务器的shell。


文件共享访问

为了从Windows访问编译服务器上的源代码和编译出的目标文件,在编译服务器上已经安装好了samba文件共享服务,只需要在windows这边映射网络驱动器即可。按如下方法操作。


右键点击 计算机 ,选择映射网络驱动器。


然后就可以在windows看到编译服务器上的内容了。

现在开始,你就可以像操作windows的文件一样来操作编译服务器里面的文件了(比如通过Visual Studio来修改服务器上的C/C++代码文件)。

编译产品

整个工程是存放在~/harmonyos/openharmony目录,得先进入这个目录。

然后执行python脚本来编译产品。如下红色框即编译整个产品。


特别提醒:

python build.py ipcamera_hi3518ev300 -b debug

编译debug版本才会含有调试的shell,如果省略-b debug,无法通过shell命令行执行命令。

大约需要10多分钟完成产品编译,编译成功后,结果如下。


然后在windows文件夹下可以看到编译出来的结果。


每次系统烧录时,将上述3个文件以及uboot文件(Z:\vendor\hisi\hi35xx\hi3518ev300\uboot\out\boot\u-boot-hi3518ev300.bin)

拷贝到windows某个目录下(比如我的例子中的D:\BIN),然后用HiTool.exe来烧录。

更新源码

鸿蒙系统目前更新比较频繁,如果需要获取最新版本,请执行下面的命令更新源码。

这里有一个问题:编译服务器预设的192.168.2.20无法上网。这个时候你可以再添加1个IP地址(添加可以上网的IP地址)。然后再执行下面2条命令

cd ~/harmonyos/openharmony

repo sync -c

。。。待贴图。。。

编译组件

编译完整产品比较耗时,大多数时候我们修改的代码较少,只需要编译指定的组件就行了。

由-T指定编译一个已经存在的组件,只编译一个小组件,速度飞快。


注意,编译组件的时候 -T 后面的路径需要使用全路径。如何确定-T后面的参数?请看下图:

文本编辑器(如notepad++)打开build/lite/product/ ipcamera_hi3518ev300.json文件


这个组件涉及的代码文件是哪些呢,继续看对应目录的BUILD.gn文件,对于此例子为//applications/sample/camera/app


生成的程序在下面这个目录


打通网络

设备本身没有以太口,只有wifi接口。但默认情况下wifi是无法工作的。

输入ifconfig你会看到wlan0接口IP地址为0。


需要做如下工作才能让wifi正常运行起来。

  • 配置SSID和密码
  • 修改wpa_sample.c源码
  • 配置自启动
  • 编译系统

配置SSID和密码

修改applications\sample\camera\communication\wpa_supplicant\config\ wpa_supplicant.conf。

修改后的内容如下。这个文件的目的是配置wifi用户名和密码。

  1. country=GB 
  2.  
  3. ctrl_interface=udp 
  4.  
  5. network={ 
  6.  
  7.         ssid="teacher" 
  8.  
  9.         psk="12345678qwe" 
  10.  
  11.     } 

注意

  • =号2端不要留空格。
  • ssid和psk按你自己的实际进行配置,比如你手机热点的网络名和密码。

修改源码

修改applications\sample\camera\communication\wpa_supplicant\src\wpa_sample.c源代码。

只修改main函数部分。这个程序的目的是读取wifi用户名和密码配置文件,并进行wifi连接。

  1. int main(int argc, char *argv[]) 
  2.  
  3.  
  4. g_wpaArgc = argc; 
  5.  
  6. for (int i = 0; i < g_wpaArgc; i++) { 
  7.  
  8. g_wpaArg[i] = argv[i]; 
  9.  
  10.  
  11. g_wpaArgc=5; 
  12.  
  13. g_wpaArg[1] = "-i"
  14.  
  15. g_wpaArg[2]="wlan0"
  16.  
  17. g_wpaArg[3]="-c"
  18.  
  19. g_wpaArg[4]="/etc/wpa_supplicant.conf"
  20.  
  21. int ret = pthread_create(&g_wpaThread, NULL, ThreadMain, NULL); 
  22.  
  23. if (ret != 0) { 
  24.  
  25. printf("[WpaSample]create thread failed error:%s.\n", strerror(ret)); 
  26.  
  27. return 1; 
  28.  
  29.  
  30. pthread_join(g_wpaThread, NULL); 
  31.  
  32. return 0; 
  33.  

配置自启动

刚才修改的main会生成一个可执行程序,这个程序我们需要把它配置在启动脚本中,这样每次板子重启都会运行这个程序。

修改文件vendor\huawei\camera\init_configs\ init_liteos_a_3518ev300.cfg 。 红色部分为新增。

  1.  
  2. "jobs" : [{ 
  3.  
  4. "name" : "pre-init"
  5.  
  6. "cmds" : [ 
  7.  
  8. "mkdir /storage/data/log"
  9.  
  10. "chmod 0755 /storage/data/log"
  11.  
  12. "chown 4 4 /storage/data/log"
  13.  
  14. "mkdir /storage/data/softbus"
  15.  
  16. "chmod 0700 /storage/data/softbus"
  17.  
  18. "chown 7 7 /storage/data/softbus"
  19.  
  20. "mkdir /sdcard"
  21.  
  22. "chmod 0777 /sdcard"
  23.  
  24. "mount vfat /dev/mmcblk0 /sdcard rw,umask=000"
  25.  
  26. "mount vfat /dev/mmcblk1 /sdcard rw,umask=000" 
  27.  
  28.  
  29. }, { 
  30.  
  31. "name" : "init"
  32.  
  33. "cmds" : [ 
  34.  
  35. "start shell"
  36.  
  37. "start apphilogcat"
  38.  
  39. "start foundation"
  40.  
  41. "start bundle_daemon"
  42.  
  43. "start media_server"
  44.  
  45. "start appspawn"
  46.  
  47. "start wpa_supplicant" 
  48.  
  49.  
  50. }, { 
  51.  
  52. "name" : "post-init"
  53.  
  54. "cmds" : [ 
  55.  
  56. "chown 0 99 /dev/dev_mgr"
  57.  
  58. "chown 0 99 /dev/hdfwifi"
  59.  
  60. "chown 0 99 /dev/gpio"
  61.  
  62. "chown 0 99 /dev/i2c-0"
  63.  
  64. "chown 0 99 /dev/i2c-1"
  65.  
  66. "chown 0 99 /dev/i2c-2"
  67.  
  68. "chown 0 99 /dev/uartdev-0"
  69.  
  70. "chown 0 99 /dev/uartdev-1"
  71.  
  72. "chown 0 99 /dev/uartdev-2"
  73.  
  74. "chown 0 99 /dev/spidev0.0"
  75.  
  76. "chown 0 99 /dev/spidev1.0"
  77.  
  78. "chown 0 99 /dev/spidev1.1" 
  79.  
  80.  
  81.  
  82. ], 
  83.  
  84. "services" : [{ 
  85.  
  86. "name" : "foundation"
  87.  
  88. "path" : "/bin/foundation"
  89.  
  90. "uid" : 7, 
  91.  
  92. "gid" : 7, 
  93.  
  94. "once" : 0, 
  95.  
  96. "importance" : 1, 
  97.  
  98. "caps" : [10, 11, 12, 13] 
  99.  
  100. }, { 
  101.  
  102. "name" : "shell"
  103.  
  104. "path" : "/bin/shell"
  105.  
  106. "uid" : 2, 
  107.  
  108. "gid" : 2, 
  109.  
  110. "once" : 0, 
  111.  
  112. "importance" : 0, 
  113.  
  114. "caps" : [4294967295] 
  115.  
  116. }, { 
  117.  
  118. "name" : "appspawn"
  119.  
  120. "path" : "/bin/appspawn"
  121.  
  122. "uid" : 1, 
  123.  
  124. "gid" : 1, 
  125.  
  126. "once" : 0, 
  127.  
  128. "importance" : 0, 
  129.  
  130. "caps" : [2, 6, 7, 8, 23] 
  131.  
  132. }, { 
  133.  
  134. "name" : "apphilogcat"
  135.  
  136. "path" : "/bin/apphilogcat"
  137.  
  138. "uid" : 4, 
  139.  
  140. "gid" : 4, 
  141.  
  142. "once" : 1, 
  143.  
  144. "importance" : 0, 
  145.  
  146. "caps" : [] 
  147.  
  148. }, { 
  149.  
  150. "name" : "media_server"
  151.  
  152. "path" : "/bin/media_server"
  153.  
  154. "uid" : 5, 
  155.  
  156. "gid" : 5, 
  157.  
  158. "once" : 1, 
  159.  
  160. "importance" : 0, 
  161.  
  162. "caps" : [] 
  163.  
  164. }, { 
  165.  
  166. "name" : "wms_server"
  167.  
  168. "path" : "/bin/wms_server"
  169.  
  170. "uid" : 6, 
  171.  
  172. "gid" : 6, 
  173.  
  174. "once" : 1, 
  175.  
  176. "importance" : 0, 
  177.  
  178. "caps" : [] 
  179.  
  180. }, { 
  181.  
  182. "name" : "bundle_daemon"
  183.  
  184. "path" : "/bin/bundle_daemon"
  185.  
  186. "uid" : 8, 
  187.  
  188. "gid" : 8, 
  189.  
  190. "once" : 0, 
  191.  
  192. "importance" : 0, 
  193.  
  194. "caps" : [0, 1] 
  195.  
  196. },{ 
  197.  
  198. "name""wpa_supplicant"
  199.  
  200. "path""/bin/wpa_supplicant"
  201.  
  202. "uid" : 0, 
  203.  
  204. "gid" : 0, 
  205.  
  206. "once" : 1, 
  207.  
  208. "importance" : 0, 
  209.  
  210. "caps": [] 
  211.  
  212.  
  213.  

编译系统

此时我们配置好了wifi用户名和密码,也修改了wifi启动程序并设置好了启动脚本。接下来我们把这些修改编译到系统中,然后再烧录到板子上。

当完整编译系统,烧录好以后,新版本的系统起来以后,我们可以看到wlan0 的接口的IP地址正常获取到了。


部署NFS

当网络打通以后,我们就可以部署NFS(网络文件系统)了。部署NFS最大的好处是,可以将windows的某个文件夹当成开发板上的文件夹来使用,这样,不需要把编译的程序手动拷贝到开发板去,就可以执行编译出来的程序。

主要分为如下3个过程:

  1. 安装NFS Server
  2. 配置和启动Server
  3. 挂载NFS

安装NFS

在PC上安装NFS服务器。双击nfs1169.exe进行安装,同常规软件安装方法。

配置NFS

安装好以后,就是配置了,这一步稍微麻烦。首先需要以管理员身份运行NFS服务器。

开始-->所有程序-->haneWIN软件-->NFS-->NFS服务器(右键点击)--选择(以管理员身份运行)。


编辑输出表文件。如下。


然后保存。

然后我们配置防火墙,使得NFS相关的网络通信畅通。先看需要放行哪些端口。


需要放行的端口有: 111, 1058, 2049. TCP和UDP都需要。

然后我们配置放行这些端口(即允许这些端口的流量通过)。

控制面板\系统和安全\Windows 防火墙。

 



确保规则已配置好。然后重启防火墙(关闭防火墙,再打开防火墙)。


重启NFS

开始---所有程序---haneWIN软件---NFS---重启所有服务(以管理员身份运行)。

挂载NFS

在开发板shell界面,挂载NFS。

先确保开发板和PC之间能互通(可以从PC ping开发板)。我的开发板和PC都通过wifi连接手机热点,所以在一个网段,能互相ping通。

然后开发板上面执行下面的命令。


除了IP地址调整成你PC的地址,其它信息照抄。挂载成功会显示finished如红框所示。

然后我们就可以执行windows上的程序了。


在我的机器上,上述文件存放在d:\BIN目录。因为这个目录我配置成了NFS Server的根目录。

所以,能从开发板上看到并运行它们。

上述这些内容,是通过从编译服务器拷贝出来的。如何拷贝,请参阅访问虚拟机章节。

添加组件

如果我们要新增程序怎么处理。请仿照范例中的camer_app处理。具体如下,比如我新增了一个reader程序,一个writer程序。以下描述reader的添加逻辑。

在applications\sample\camera目录下,将app目录复制一份,改名为reader。


然后修改reader里面的文件。先修改BUILD.gn:


然后源码根据自己的实际情况修改。

最后修改编译脚本build\lite\product\ ipcamera_hi3518ev300.json。

添加红框中的一行,然后按组件编译方式编译就可以了。


编译好的程序在out\ipcamera_hi3518ev300\bin目录下。

©著作权归作者和HarmonyOS技术社区共同所有,如需转载,请注明出处,否则将追究法律责任

想了解更多内容,请访问:

51CTO和华为官方战略合作共建的鸿蒙技术社区

https://harmonyos.51cto.com/#zz

【编辑推荐】

  1. 一文教你探测虚拟环境是物理机、虚拟机还是容器?
  2. 比较9款代码质量工具,看看哪款更好用
  3. 推荐十个好用的程序员摸鱼网站,现在就给我玩起来!
  4. 2021年网络安全趋势:更高的预算,重点终端和云安全
  5. 为什么码农不应该在面试中同意进行编程测试
【责任编辑:jianghua TEL:(010)68476606】

点赞 0
分享:
大家都在看
猜你喜欢

订阅专栏+更多

数据湖与数据仓库的分析实践攻略

数据湖与数据仓库的分析实践攻略

助力现代化数据管理:数据湖与数据仓库的分析实践攻略
共3章 | 创世达人

3人订阅学习

云原生架构实践

云原生架构实践

新技术引领移动互联网进入急速赛道
共3章 | KaliArch

30人订阅学习

数据中心和VPDN网络建设案例

数据中心和VPDN网络建设案例

漫画+案例
共20章 | 捷哥CCIE

209人订阅学习

订阅51CTO邮刊

点击这里查看样刊

订阅51CTO邮刊

51CTO服务号

51CTO官微