概述
根据官方文档描述,鸿蒙系统的开发环境搭建比较复杂,无法直接在单纯的win或linux系统PC上完成。代码烧录必须在win系统下运行(mac环境后继将会支持,但是linux系统的环境尚没有支持的消息)。
win环境搭建较为简单,根据参考文档安装相应软件即可;
linux环境搭建较为复杂,包含一系统的编译构建工具及交叉编译环境,本文介绍Linux环境搭建。
参考官方提供的文档:搭建环境
为什么使用Deepin20系统
在鸿蒙出来之前,就已经用上了deepin系统,当时最新的版本是15.11,使用起来有点win的风格。除了打印机无法使用,以及其他小问题外,体验还算是比较可以了。最为主要的是,没有广告弹框弹出,WPS也是回归到了办公软件的本质。
鸿蒙出世后,时常关注信息,当润和软件开始发售基于鸿蒙OS的开发套件后,第一时间在淘宝上购买了IoT主板,本来计划先玩熟悉之后,再慢慢购买周边,没有想到能在电子发烧友上申请到全套使用套装,欣喜之余,更坚定了学习接纳鸿蒙OS的决心。
于是趁完整套件还未收到手之前,先行搭建好环境。
在初次尝试环境搭建时,15.11版本出现诸多的不适应,例如软件源中很多常用tools都没有,需要手工安装,最后仍卡在python安装中;后面发现最新版本的deepin20已经正式发布,尝试使用最新版本后,其软件源非常丰富,使用起来更得心应手,而且还解决了之前无法使用打印机的问题,同时搭建鸿蒙编译构建环境也较为顺利。
如何设置开发烧录环境(win10)与编译环境(deepin20)的连接及共享根据官方文档共享用到的samba服务,连接用到了ssh服务。
令人省心的是,deepin20已经预装次两项服务,其中ssh服务的支持可以直接用现有的帐号在win ssh终端登陆到deepin20主机;
要查看对应的服务是否已启动,可以使用$ sudo service --status-all命令
- $ sudo service --status-all
- [ + ] smartmontools
- [ + ] smbd
- [ + ] ssh
- [ - ] sudo
复制代码可以看到,需要的服务以及开启。
但是对于samba服务,则还需要手动配置下方可使用。需要配置如下两步:
- $sudo vim /etc/samba/smb.conf
复制代码在最后加上待共享的用户及文件目录配置,如下所示,其中path为你待共享的目录地址
- [davin]
- comment = davin guest share
- path = /home/davin
- public = yes
- writable = yes
- directory mask = 0775 # rwxrwxr_x
- create mask = 0775 # rwxrwxr_x
- valid users = davin,root
- write list = davin,root
- browseable = yes
- available = yes
复制代码修改完成之后点击"Esc"键,在输入":wq"后点击回车退出编辑。
注意该用户必须是deepin20下的已存在用户,但是samba的密码是单独设置的,与系统用户秘密无关。
- $ sudo smbpasswd -a davin
- New SMB password:
- Retype new SMB password:
- Added user davin.
复制代码以上两步成功之后依次执行如下命令重启服务器即可
- $ sudo service smbd reload
- $ sudo service smbd restart
复制代码解决安装Python包管理工具(pip3)报SSL错误
在根据鸿蒙系统环境搭建步骤执行到安装Python包管理工具(pip3)时,始终报错,提示ssl访问问题(pip is configured with locations that require TLS/SSL, however the ssl module in Python is not available.)
- $ sudo pip3 install --upgrade pip
- WARNING: pip is configured with locations that require TLS/SSL, however the ssl module in Python is not available.
- WARNING: Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'SSLError("Can't connect to HTTPS URL because the SSL module is not available.")': /simple/pip/
- WARNING: Retrying (Retry(total=3, connect=None, read=None, redirect=None, status=None)) after connection broken by 'SSLError("Can't connect to HTTPS URL because the SSL module is not available.")': /simple/pip/
- WARNING: Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'SSLError("Can't connect to HTTPS URL because the SSL module is not available.")': /simple/pip/
- WARNING: Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'SSLError("Can't connect to HTTPS URL because the SSL module is not available.")': /simple/pip/
- WARNING: Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'SSLError("Can't connect to HTTPS URL because the SSL module is not available.")': /simple/pip/
复制代码经排查发现预装的openssl环境不包含libssl-dev,导致配置编译python3.8.5时出现openssl无法配置成功而未使用到ssl库,导致后继错误。值得表扬的是,deepin20的软件源中已经包含了ssl-dev库,只是没有预装到系统,所以直接命令行安装即可(最初在deepin15.11版本为解决此问题,自行下载了openssl源码并编译出目标库,替换系统的openssl库,再重新编译python 3.8.5)。
- $ sudo apt-get install libssl-dev
复制代码安装成功之后,再配置python,将输出如下提仕,表示libssl库配置成功
- checking for pkg-config... /usr/bin/pkg-config
- checking whether compiling and linking against OpenSSL works... yes
- checking for X509_VERIFY_PARAM_set1_host in libssl... yes
- checking for --with-ssl-default-suites... python
复制代码PS: Deepin20系统已预装python 3.7.3,经验证,该版本也是可以完成鸿蒙OS工程的构建与编译的。所以此次安装python3.8.5也就不是必须的步骤了。
再deepin20系统中python环境及其相关工具安装均可以用命令行完成,不需要再手动下载安装相关的.whl文件,不错不错!!!
解决deepin20系统命令行安装的SCons版本过低的问题
编译Hi3861开发板第一个示例程序时遇到如下错误(Python 3.7 or greater required, but you have Python 2.7.16)
- Hi3861/code-1.0$ python build.py wifiiot
- ...
- [196/197] ACTION //vendor/hisi/hi3861/hi3861:run_wifiiot_scons(//build/lite/toolchain:linux_x86_64_riscv32_gcc)
- FAILED: obj/vendor/hisi/hi3861/hi3861/run_wifiiot_scons_build_ext_components.txt
- python ../../build/lite/build_ext_components.py --path=../../vendor/hisi/hi3861/hi3861 --command=sh hm_build.sh
- Python 3.7 or greater required, but you have Python 2.7.16
- Traceback (most recent call last):
- File "../../build/lite/build_ext_components.py", line 64, in <module>
- sys.exit(main())
- File "../../build/lite/build_ext_components.py", line 58, in main
- cmd_exec(args.command)
- File "../../build/lite/build_ext_components.py", line 32, in cmd_exec
- raise Exception("{} failed, return code is {}".format(cmd, ret_code))
- Exception: ['sh', 'hm_build.sh'] failed, return code is 2
- ninja: build stopped: subcommand failed.
- you can check build log in /home/davin/workplace/openharmony/Hi3861/code-1.0/out/wifiiot/build.log
- /home/davin/ninja/ninja -w dupbuild=warn -C /home/davin/workplace/openharmony/Hi3861/code-1.0/out/wifiiot failed, return code is 1
- usage:
- python build.py ipcamera_hi3516dv300
- python build.py ipcamera_hi3518ev300
- python build.py wifiiot
- positional arguments:
- product Name of the product
- optional arguments:
- -h, --help show this help message and exit
- -b BUILD_TYPE, --build_type BUILD_TYPE
- release or debug version.
- -t [TEST [TEST ...]], --test [TEST [TEST ...]]
- Compile test suit
- -n, --ndk Compile ndk
- Hi3861/code-1.0$
复制代码直接提示是python版本问题,但实际上我的python也是3.7.3版本,并不是2.7版本。尝试各种办法,包括重建编译构建环境均无法解决此问题。
最后重读按照官方文档,才发现“推荐SCons版本是3.0.4+”,deepin20软件源中以包含推荐SCons版本是3.0.1,低于推荐版本,于是手动升级到最新版本4.0.1版,升级成功后查看版本以确认
- $ scons -v
- SCons by Steven Knight et al.:
- SCons: v4.0.1.c289977f8b34786ab6c334311e232886da7e8df1, 2020-07-17 01:50:03, by bdbaddog on ProDog2020
- SCons path: ['/usr/local/lib/python3.8/site-packages/SCons-4.0.1-py3.8.egg/SCons']
- Copyright (c) 2001 - 2020 The SCons Foundation
复制代码
再次编译示例程序,编译成功!!!
编译环境搭建成功,后继再更新烧录及运行遇到的一些问题及解决方式。