当前位置: 首页 > 科技观察

CentOS安装鸿蒙LiteOS编译环境-海思Hi3861

时间:2023-03-17 20:37:44 科技观察

更多信息请访问:鸿蒙科技社区https://harmonyos.51cto.com,与华为官方和HiSparkWi-Fi物联网智能家居共同打造提供的工具包,谢谢你。收到之后就迫不及待的开始研究了。该套件基于海思Hi3861芯片。在官方文档中,整个LiteOS的编译环境都是基于Ubuntu发行版的。如果你和我一样从事互联网行业,那么你在工作中接触到CentOS的机会可能会比较多。CentOS安装LiteOS编译环境是否可行?与Ubuntu环境配置有何不同?让我们一起探索。首先,本文中的CentOS是基于CentOS7.8.2003的。我提前在VMware安装了一个全新的CentOS-7-x86_64-Minimal-2003(下载地址:http://mirrors.huaweicloud.com/centos/7.8.2003/isos/x86_64/),尽量在一个cleaner系统中,逐步探索编译的最小环境。2、需求分析海思Hi3861芯片架构为RISC-V(32位版本),因此交叉编译工具链必不可少:gcc_riscv32;鸿蒙LiteOS的部分源码是基于gn和ninja构建工具整理的。Chromium,也就是我们熟悉的Chrome的开源版本,也是使用同样的构建工具进行管理的。gn用于实现一个易于程序员理解的跨平台编译管理。执行gn后,会生成ninja的编译预处理配置。经过ninja预处理后,编译速度会明显加快。此功能对于操作系统等非常大的项目非常有用;鸿蒙LiteOS源码中,部分Hi3861芯片的适配代码是使用SCons工具编译的,该工具基于Python;还有一部分源码(比如第三方库:curl)是使用传统的makefile方式编译的。为了通过一条命令完成编译,还需要一个Python脚本进行集成。3.安装编译环境3.1准备工具在编译过程中,输入的命令有时需要复制粘贴。您需要一个易于使用的SSH客户端。这里我用的是ZOC。SecureCRT等类似的客户端也可用。;另外,如果你的网络条件不是很好,使用wget下载编译器会比较慢,我们可以先使用迅雷等工具下载编译器,然后通过rz命令传给CentOS。yuminstall-ylrzsz在官方文档中指出,需要通过下载二进制形式安装一些必要的工具,需要使用wget等命令。在最小安装的CentOS中,wget等命令默认是没有安装的。这时候我们需要准备这个工具:yuminstall-ywget3.2下载交叉编译工具的正常操作是在CentOS中执行:wgethttps://repo.huaweicloud.com/harmonyos/compiler/gcc_riscv32/7.3。0/linux/gcc_riscv32-linux-7.3.0.tar.gz如果已经通过迅雷下载了交叉编译器到本地,可以在CentOS输入:rz命令激活SSH客户端的上传窗口,选择本地文件后,点击“打开”上传到SSH中的当前目录。使用tar命令解压工具链tar-xvfgcc_riscv32-linux-7.3.0.tar.gz这里有一点需要注意,虽然压缩后的文件名为tar.gz,但一般上也使用这种文件基于targz方式压缩,所以通常解压的时候需要加上-z选项,但是如果真的加上这个选项,会提示:gzip:stdin:notingzipformattar:Childreturnedstatus1tar:Errorisnotrecoverable:exitingnow3.3安装cross-编译工具交叉编译工具解压后,一般按照习惯,我会把这类应用放在/usr/local目录下。mvgcc_riscv32/usr/local/当然也可以在上一步解压的过程中直接使用tar-xvfgcc_riscv32-linux-7.3.0.tar.gz-C/usr/local。为了直接在shell中使用交叉编译命令,需要在PATH环境变量中加入工具所在的路径。打开全局环境变量配置文件:vi/etc/profile快捷命令Shift+g将光标定位到文件末尾修改PATH环境变量定义:exportPATH=/usr/local/gcc_riscv32/bin:$PATH快捷方式命令:wq!保存修改。执行命令:source/etc/profile使环境变量配置立即生效。为了验证安装的正确性,可以使用:cdriscv32-unknown-elf-gcc--versionshouldoutputriscv32-unknown-elf-gcc(GCC)7.3.0Copyright(C)2017FreeSoftwareFoundation,Inc.Thisisfreesoftware;seethesourceforcopyingconditions。ThereisNOwarranty.notevenforMERCHANTABILITYorFITNESSPOS编译安装Python3官方文档,指出Python需要3.7以上的版本。我看了一下CentOS官方源码的Python版本,是2.7的。而且有些运维工具也是基于2.7的,不能强行删除。所以让我们解决这个问题并自己编译一个Python3。看了官网,最新的稳定版是:3.9.0。和交叉编译工具一样,也可以提前下载源码包,或者使用命令下载wgethttps://www.python.org/ftp/python/3.9.0/Python-3.9.0.tgz然后将源码包解压为tar-xzvfPython-3.9.0.tgz在开始编译之前,还需要安装一些依赖于编译过程的其他组件。以下是我一一尝试过的最精简的依赖:注:如果追求更精简的环境,可以在其他环境编译Python3,然后把二进制包copy过来。这样就不需要再安装以下组件了develyumminstall-develyumzinstall-develyuinstall-ytk-devel希望按照习惯在/usr/local/python3目录下安装Python3。编译需要配置,指定prefixcdPython-3.9.0./configure--prefix=/usr/local/python3然后编译Python3make-j8&&makeinstall其中参数-j为并行作业数。请结合自己的CentOS运行实际硬件环境(CPU核心数)配置,太大或太小都不好,适当优化可以提高编译速度。为了在Shell中直接使用Python3的命令而不与系统中的Python2.7冲突,我们需要创建两个软链接ln-s/usr/local/python3/bin/python3/usr/bin/python3ln-s/usr/local/python3/bin/pip3/usr/bin/pip3/usr/bin目录默认在PATH环境变量中。以上两个软链接创建后,直接在shell中使用即可:[root@localhost~]#python3--versionPython3.9.0[root@localhost~]#pip3--versionpip20.2.3from/usr/local/python3/lib/python3.9/site-packages/pip(python3.9)3.5安装一些基于Python3的必要组件安装完Python3之后,按照官方的指导,需要安装一些基于编译的组件在Python3上,如下所示:pip3installsetuptoolspip3installkconfiglibpip3installpycryptodomepip3installsix--upgrade-ignore-installedsixpip3installecdsa1,'[SSL:CERTIFICATE_VERIFY_FAILED]certificateverifyfailed:certificateisnotyetvalid(_ssl.c:1122)'))':/simple/kconfiglib/WARNING:Retrying(Retry(Total=3,connect=None,read=None,redirect=None,status=None))afterconnectionbrokenby'SSLError(SSLCertVerification错误(1,'[SSL:CERTIFICATE_VERIFY_FAILED]certificateverifyfailed:certificateisnotyetvalid(_ssl.c:1122)'))':/simple/kconfiglib/WARNING:Retrying(Retry(total=2,connect=None,read=None,redirect=None,status=None))afterconnectionbrokenby'SSLError(SSLCertVerificationError(1,'[SSL:CERTIFICATE_VERIFY_FAILED]certificateverifyfailed:certificateisnotyetvalid(_ssl.c:1122)'))':/simple/kconfiglib/请检查本地时间是否相同由于实时时间差异比较大(写这篇文章的时间是2020年10月14日)[root@localhost~]#date2020-09-23Wednesday15:46:28CST可以使用ntpdate-utime.windows来校准.com本地时间3.6安装SCons上面说了鸿蒙LiteOS的源码编译过程也需要Scons工具。接下来,要安装它,首先下载它的源代码wgethttp://prdownloads.sourceforge.net/scons/scons-4.0.1.tar.gz解压tar-xzvfscons-4.0.1.tar.gzinstallcdSCons-4.0。1/python3setup.pyinstall生成SCons命令的软链接,这样就可以在Shell中直接使用ln-s/usr/local/python3/bin/scons/usr/bin/scons3.7安装gn工具(用来生成ninja编译脚本)gn工具是google开发的一套预编译工具,源码地址:https://gn.googlesource.com/gn/由于一些众所周知的原因,不方便下载源代码在中国。幸运的是,华为为我们提供了编译好的二进制文件。(如果有兴趣想自己编译,需要提前准备好Python、ninja和LLVM环境)下载地址:wgethttps://repo.huaweicloud.com/harmonyos/compiler/gn/1523/linux/gn.1523.tar解压:tar-xvfgn.1523.tar安装:mvgn/usr/local/ln-s/usr/local/gn/gn/usr/bin/gn验证:[root@localhost~]#gn--version1523(5bd8e26b)3.8安装ninja工具同样如此,华为也为我们提供了对应的二进制版本。下载:wgethttps://repo.huaweicloud.com/harmonyos/compiler/ninja/1.9.0/linux/ninja.1.9.0.tar解压:tar-xvfninja.1.9.0.tar安装:mvninja/usr/local/ln-s/usr/local/ninja/ninja/usr/bin/ninja验证:[root@localhost~]#ninja--version1.9.03.9测试编译经过上面的步骤,编译环境已经基本安装好了,下面尝试编译它。完整源码下载:wgethttps://repo.huaweicloud.com/harmonyos/os/1.0/code-1.0.tar.gz解压:mkdirliteostar-xzvfcode-1.0.tar.gz-Cliteos注意不含源码在压缩文件一个单独的目录下会解压很多文件。你应该先建立一个目录,然后解压到这个目录下!解压后按照官方命令编译。由于我们安装的是Python3,为了避免和Python2.7的命令冲突,所以可执行的命令改为python3,所以编译略有不同:python3build.pywifiiot我们看到最终编译成功,输出可以烧写的固件:out/wifiiot/Hi3861_wifiiot_app_allinone.bin3.10总结一下上面的过程,虽然有点繁琐,但是大意是如果有二进制版本,直接下载,解压,安装,验证,这样的步骤。如果没有提供二进制版本,可以尝试通过CentOS官方源码解决。如果官方源还是不能满足要求(比如Python3),也可以尝试自己编译源码解决。4、启用局域网共享之所以启用局域网共享,是因为目前的开发环境还不够完善。RISC-V架构的编译器只提供了Linux版本,这就决定了编译必须在Linux环境下进行。Hi3861的芯片烧录程序只提供了Windows版本(有空可以说说鸿蒙LiteOS开发环境天维科的烧录原理)。而且大部分从事单片机开发的工程师(或者说单片机厂商提供的开发环境,如烧录驱动、烧录工具等)仍然是基于Windows平台的。我们希望编译后直接得到二进制文件进行烧录,所以想到了这样的解决方法。4.1安装sambasamba协议,这是Windows网上邻居使用的协议。需要在CentOS的最小安装环境中单独安装。yuminstall-ysamba允许开机,这样编译服务器断电恢复后可以自动启动局域网共享:systemctlenablesmb4.2配置samba服务前的一些准备我们先创建一个文件共享的账号,因为后面的很多操作都是基于此帐户。假设账户名为:harmonyuseradd-r-s/bin/falseharmony使用useradd创建一个“三无账户”,即:无家目录、无密码、无系统shell。毕竟,我们只是想要一个专用的身份。然后,在samba系统中添加刚刚创建的账户,并设置一个samba专用的密码。这是一个将密码设置为:harmony的示例。即用户名和密码都是:harmony。当然你也可以根据自己的喜好进行设置。smbpasswd-harmony账号初始化后,可以创建一个专门存放共享代码的目录:mkdir/dataBTW:其实更稳妥的操作是在安装系统的时候单独分出一个/data挂载点分区,这样一旦系统失败,即使重装系统,我们的代码也不会丢失。因为创建这个目录的用户是root,所以samba用户不能写这个目录。修改目录属主:chown-Rharmony:harmony/data4.3配置samba服务接下来就是配置samba服务了。本来想配置一个不需要用户名和密码就可以上传下载的共享目录。但是查了资料发现Windows10默认是不允许这种方法的。改变Windows的安全策略也不是不可以,但是以牺牲我们操作系统的安全为代价是不划算的,所以我们选择在CentOS中创建一个专用的Samba账户,用它来登录。一、回默认配置。如果以后配置有误,可以回滚到初始状态cd/etc/sambacpsmb.confsmb.??conf.bak然后使用vi命令编辑smb.conf文件vismb.conf。下面一段是我之前整理好的一套配置:[global]netbiosname=Compilerserverstring=RISC-VCompilerworkgroup=WORKGROUPsecurity=usermaptoguest=BadUserpassdbbackend=tdbsamlogfile=/var/log/samba/log.%m[code]comment=PublicStuffpath=/datavalidusers=harmonybrowseable=yeswriteable=yesavailable=yesreadonly=nocreatemode=0644directorymode=0755这里简单说明一下,【code】表示挂载点。如果是Windows,在地址栏输入\\[IP]后,出现的一级目录就是挂载点。有效用户是指允许我们的和谐用户访问。因为要有写权限,所以设置writable为yes,readonly为no。新建文件默认权限为644,即:rw-r--r--;新建目录默认权限为755,即:drwxr-xr-x,必须有执行权限,否则无法删除新建目录。4.4启用SELinux的安全选项在CentOS中,SELinux默认是启用的。该功能是系统内核内置的安全机制。对于samba服务,默认不允许用户向服务器写入内容。既然我们有这个需求,就开启这个功能:setsebool-Psamba_export_all_rw1附:查看SELinux中samba服务配置的选项状态:sestatus-b|grepsamba4.5别忘了CentOS默认开启了防火墙,samba的与服务相关的端口不在防火墙策略中。即使启用了该服务,外部也无法访问它。因此需要在防火墙策略中加入端口:firewall-cmd--zone=public--add-port=139/tcp--permanentfirewall-cmd--zone=public--add-port=389/tcp--permanentfirewall-cmd--zone=public--add-port=445/tcp--permanentfirewall-cmd--zone=public--add-port=901/tcp--permanentfirewall-cmd--reloadfirewall-cmd--list-all当然,最简单的方法是关闭防火墙,但会带来安全隐患,请酌情使用。systemctlstopfirewalldsystemctldisablefirewalld4.6启动共享服务一切配置完成后,就可以启动共享服务了。systemctlstartsmb还可以查看服务的运行状态。4.7补充说明后续使用过程中如修改samba用户密码或修改用户名。那么在Windows下,如果之前可以正常访问,可能会变得无法访问。这时我们在控制面板中搜索“凭据”,在“凭据管理器”->“Windows凭据”中删除旧的登录账号。如果登录时没有勾选记住凭据,可以在Windows命令行中使用:netuse*/del清除连接缓存。参考文献:[1]华为.构建环境[EB/OL]。2]mikey-不。pip总是无法通过ssl验证[EB/OL]。https://stackoverflow.com/questions/49324802/pip-always-fails-ssl-verification,2019-01-28/2020-10-14[3]一亩三分地。CentOS7设置Samba共享目录[EB/OL].https://www.cnblogs.com/ldm1989/p/9229921.html,2018-06-26/2020-10-14更多信息请访问:Harmonyos.51cto.com,与华为官方