【当OpenHarmony遇见华为云IoT】基于云主机ECS和命令行的L0设备对接华为云实验复现与心路历程【华为云IoT+鸿蒙】
在上一篇博文【当OpenHarmony遇见华为云IoT】L0设备对接华为云实验复现与心路历程【华为云IoT+鸿蒙】中,我记录了使用DevEco Device Tool方式在两台笔记本(一台win10,一台ubuntu),复现OpenHarmony小熊派对接华为云IoT的实验和踩坑经历。在阅读开发文档时,我注意到OpenHarmony有两种开发方式,一是基于IDE开发(即使用DevEco Device Tool),一是基于命令行开发。作为刚接触小熊派的OpenHarmony萌新,我优先选择了IDE,这次我尝试使用命令行,使用本地windows主机(8G+256固态)和远程Tencent云主机(1核2G内存50G固态,来自隔壁宿舍老王的友情支持)复现该实验。参考的技术资料来自OpenAtom OpenHarmony设备开发文档和基于OpenHarmony3.0对接IoTDA_设备接入最佳实践。这篇博文记录我的复现过程、踩坑经历和心路历程。
首先是在云主机上使用Ubuntu,不得不说云上操作太方便了,重装个操作系统就是30秒不到的时间,比在本地机上装ubuntu体验好太多了。创建好后,依据Openharmony文档,安装并配置Samba。文档上写的是
[Share] #在Windows中映射的根文件夹名称(此处以“Share”为例)
comment = Shared Folder #共享信息说明
path = /home/share #共享目录
valid users = username #可以访问该共享目录的用户(Ubuntu的用户名)
directory mask = 0775 #默认创建的目录权限
create mask = 0775 #默认创建的文件权限
public = yes #是否公开
writable = yes #是否可写
available = yes #是否可获取
browseable = yes #是否可浏览
但依据个人实操经验,最好是在~目录下先建好share文件夹,并附以相应的权限,即配置Samba文件前,我们先操作
sudo mkdir ~/share
sudo chmod -R 777 ~/share
再修改相应的smb.conf文件,即
[share]
comment = share folder
browseable = yes
path = /home/ubuntu_username/share
create mask = 0700
directory mask = 0700
valid users = ubuntu_username
force users = ubuntu_username
force group = ubuntu_username
public = yes
available = yes
writeable = yes
添加Samba服务器用户和访问密码,再重启Samba服务
sudo smbpasswd -a ubuntu_username #用户名为Ubuntu用户名。输入命令后,根据提示设置密码。
sudo service smbd restart
设置Windows映射时,我遇到了本次复现实验最大的坑。云主机有固定IP, 开放Samba端口后,常识告知我们应该Windows运行中填入:\\云主机IP地址\share。但根本找不到主机。查相关资料文档才得知,云主机Samba服务的445端口,被运营商(移动、电信、联通)禁掉了,原因是445端口容易被病毒感染,被运营商屏蔽。华为云也有文档可查。如图所示:
我采取的解决方案是修改云主机Samba端口,本地 机Windows做端口转发
Ubuntu云主机上只需要修改端口配置即可,即在配置文件[global]下,添加代码,重启生效
smb ports = 4455
windows本地机使用 PowShell管理员身份命令做端口转发,重启生效
netsh interface portproxy add v4tov4 listenaddress=127.0.0.1 listenport=445 connectaddress=云主机固定ip connectport=4455
netsh interface portproxy show all
显示效果如下
表明端口配置正确,现在只需要在云主机安全组中开放相应的4455端口,我们就可以做Samba端口映射了。在Windows运行
就能正常显示远程云主机ubuntu上的share文件夹了
再映射相应的网络文件夹,我这里设置成了W分区驱动器。
设置好后,远程ubuntu云主机就变成了我本地windows上的一个逻辑分区了,就像操纵本地硬盘一样,自由访问和操作ubuntu云主机上的代码和材料,多了50G的硬盘空间,非常方便。
解决了云主机和本地机关联的痛点后,就是安装库和工具集。依据OpenHarmony文档来说,对于Ubuntu18.04,我们要使用apt-get命令安装后续操作所需的库和工具。
sudo apt-get update && sudo apt-get install binutils binutils-dev git git-lfs gnupg flex bison gperf build-essential zip curl zlib1g-dev gcc-multilib g++-multilib gcc-arm-linux-gnueabi libc6-dev-i386 libc6-dev-amd64 lib32ncurses5-dev x11proto-core-dev libx11-dev lib32z1-dev ccache libgl1-mesa-dev libxml2-utils xsltproc unzip m4 bc gnutls-bin python3.8 python3-pip ruby genext2fs device-tree-compiler make libffi-dev e2fsprogs pkg-config perl openssl libssl-dev libelf-dev libdwarf-dev u-boot-tools mtd-utils cpio doxygen liblz4-tool openjdk-8-jre gcc g++ texinfo dosfstools mtools default-jre default-jdk libncurses5 apt-utils wget scons python3.8-distutils tar rsync git-core libxml2-dev lib32z-dev grsync xxd libglib2.0-dev libpixman-1-dev kmod jfsutils reiserfsprogs xfsprogs squashfs-tools pcmciautils quota ppp libtinfo-dev libtinfo5 libncurses5-dev libncursesw5 libstdc++6 gcc-arm-none-eabi vim ssh locales libxinerama-dev libxcursor-dev libxrandr-dev libxi-dev
但实际操作过程中,ubuntu会报错,类似于如下的错误
E: Unable to locate package libc6-dev-amd64
The following packages have unmet dependencies:
gcc-arm-linux-gnueabi : Depends: gcc-9-arm-linux-gnueabi (>= 9.3.0-3~) but it is not going to be installed
E: Unable to correct problems, you have held broken packages.
我的排查经验表明,大部分的错误,可以升级ubuntu来解决,可使用代码
sudo apt-get install
sudo apt-get dist-upgrade
但个别库需要更换名字,在Ubuntu20.04上顺利安装,如报错中提到的libc6-dev-amd64可以换成libc6-dev-amd6-cross来安装。
在实践操作中,我发现这些库和工具是为编译源码而存在的,为了避免一个个下载相应的安装包,我放弃上述的安装方式,而是采取了更为便利的Docker编译环境。依据OpenHarmony文档,对于OpenHarmony3.1.1源码而言(下载源码和修改源码,使用Huaweicloud_iotlinkSDK的方式请参考我上篇博文【当OpenHarmony遇见华为云IoT】L0设备对接华为云实验复现与心路历程【华为云IoT+鸿蒙】,选取轻量和小型系统的Docker镜像仓库。
进入下载OpenHarmony源码的根目录,获取Docker镜像,执行如下命令
sudo docker pull swr.cn-south-1.myhuaweicloud.com/openharmony-docker/openharmony-docker:1.0.0
在源码目录下面运行命令,进入Docker构建环境
sudo docker run -it --name ohos -v $(pwd):/home/openharmony swr.cn-south-1.myhuaweicloud.com/openharmony-docker/openharmony-docker:1.0.0
这里使用name命名,是为了更方便进入Docker环境。需要编译环境时,只需要使用命令重新进入Docker环境即可。
sudo docker start ohos -i
进入Docker编译环境成功之后,Ubuntu自带的用户名@设备名的格式变成白色的root@Docker编译环境,使用ls可查看当前目录下的OpenHarmony源码
返回上一层路径,可查看Docker环境下载的编译安装包,这也是上文所说的编译环境安装包要求。Docker大法好!
在命令行中输入 hb set, 会显示
这里我们选择修改源码后的小熊派。输入hb build进行编译。
编译成功后的结果如图所示
让我有点小惊喜的是,轻量级OpenHarmony设备小熊派,1核2G的云主机就可以搞定了。编译前,我还担心过会不会爆内存,毕竟文档上要求开发环境是16G内存Ubuntu,轻量级设备就是轻量级设备,对鸿蒙萌新友好,适合小白上手。必须手动点个赞!
编译成功后就是烧录,之前IDE模式下是DevEco Device Tool编译烧录一体化,这里我们使用命令行,采用轻量级烧录工具HiBurn对小熊派烧录。
烧录成功后,如图所示。
现在就可以打开手机热点,让小熊派对接华为云IoT了,这里的文字就不重复了,具体实验效果可参考我之前的博文【当OpenHarmony遇见华为云IoT】L0设备对接华为云实验复现与心路历程【华为云IoT+鸿蒙】,我们成功实现了华为云IoT与OpenHarmony小熊派协同联动。
最后,总结本次实验实践,并和上次实验做对比,本篇博文的探索创新意义和个人心得体会总结如下:
1. 实现了云主机和本地机的联动,这可以解决某些类似我这样使用较低配置且只有一台主力机的笔记本电脑同学,上手入门学习OpenHarmony,提供了新的解决方案和思路。在当下的数字经济时代,云计算是无处不在的!
2. OpenHarmony轻量级设备对开发机的要求是较低的,经过个人亲身验证,哪怕是1核2G的云主机也是可以编译运行。
3. 不管是IDE方式,还是命令行方式,本质上都是同样的流程,只是前者图形化的界面可以节省小白的很多时间,两者对比后,个人更推荐IDE方式。毕竟对于技术爱好和学习者而言,开发环境的配置是第一步同时也最让人头疼且最容易放弃的环节。
4. 技术的实现方式有多种,同样的目的总有不同的实施路径,你总能找到适合自己的哪一款。
本篇博文完结,散花纪念!
P.S. 我正在参加【有奖征文 第25期】深度体验OpenHarmony对接华为云IoT,输出优质体验文章,赢开发者定制大礼包!https://bbs.huaweicloud.cn/blogs/406570
- 点赞
- 收藏
- 关注作者
评论(0)