自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

在CentOS中安裝鴻蒙LiteOS編譯環(huán)境-海思Hi3861

系統(tǒng)
前段時(shí)間收到了來自華為和51CTO提供的HiSpark Wi-Fi IoT智能家居套件,在此表示感謝。收到之后就迫不及待開始研究了。該套件基于海思Hi3861芯片,在官方文檔中,整個(gè)LiteOS的編譯環(huán)境是基于Ubuntu發(fā)行版的。如果你像我一樣從事互聯(lián)網(wǎng)行業(yè),那么可能工作中接觸更多的是CentOS。在CentOS中安裝LiteOS的編譯環(huán)境到底是否可行呢?那和Ubuntu環(huán)境的配置又有什么區(qū)別呢?讓我們來一起探索一下。

[[349887]]

想了解更多內(nèi)容,請(qǐng)?jiān)L問:

51CTO和華為官方合作共建的鴻蒙技術(shù)社區(qū)

https://harmonyos.51cto.com

 背景

前段時(shí)間收到了來自華為和51CTO提供的HiSpark Wi-Fi IoT智能家居套件,在此表示感謝。收到之后就迫不及待開始研究了。該套件基于海思Hi3861芯片,在官方文檔中,整個(gè)LiteOS的編譯環(huán)境是基于Ubuntu發(fā)行版的。如果你像我一樣從事互聯(lián)網(wǎng)行業(yè),那么可能工作中接觸更多的是CentOS。在CentOS中安裝LiteOS的編譯環(huán)境到底是否可行呢?那和Ubuntu環(huán)境的配置又有什么區(qū)別呢?讓我們來一起探索一下。

首先本文中的CentOS是以CentOS 7.8.2003為基礎(chǔ)。我事先在VMware中安裝了全新的CentOS-7-x86_64-Minimal-2003(下載地址:http://mirrors.huaweicloud.com/centos/7.8.2003/isos/x86_64/),盡可能在一個(gè)較為干凈的系統(tǒng)中,一步步探索編譯的最小環(huán)境。

2. 需求分析

海思Hi3861芯片的架構(gòu)為RISC-V(32位版本),因此交叉編譯工具鏈必不可少:gcc_riscv32;

鴻蒙LiteOS的部分源代碼是基于gn、ninja構(gòu)建工具組織的。我們熟悉的Chrome開源版Chromium,使用同樣的構(gòu)建工具管理。gn用來實(shí)現(xiàn)一種跨平臺(tái)的、程序員方便理解的編譯管理,執(zhí)行g(shù)n后,會(huì)生成給ninja使用的編譯預(yù)處理配置。經(jīng)過ninja預(yù)處理后,將會(huì)明顯加快編譯速度。這種特性對(duì)于操作系統(tǒng)等超大型項(xiàng)目來講非常有用;

在鴻蒙LiteOS源代碼中,關(guān)于Hi3861芯片的一些適配代碼,它的編譯使用了SCons工具,此工具基于Python;

另外還有一部分源代碼(例如第三方庫(kù):curl)使用了傳統(tǒng)的makefile方式編譯,為了實(shí)現(xiàn)一條命令即可完成編譯,也同樣需要Python腳本來進(jìn)行集成。

3. 安裝編譯環(huán)境

3.1 準(zhǔn)備好工具

在編譯過程中,輸入命令有時(shí)候需要復(fù)制粘貼,你需要一個(gè)好用的SSH客戶端,這里我用的是ZOC,類似的像SecureCRT之類的客戶端也可以;

另外,如果你的網(wǎng)絡(luò)狀況不是很好的話,使用wget方式下載編譯器會(huì)比較慢,我們可以使用迅雷等工具先把編譯器下載好,然后通過rz命令傳入CentOS。

  1. yum install -y lrzsz 

在官方文檔中指出一些必要的工具需要通過下載二進(jìn)制的形式安裝,需要用到wget這樣的命令。在最小化安裝的CentOS中,wget等命令是默認(rèn)未安裝的,此時(shí)我們要將此工具準(zhǔn)備好:

  1. yum install -y wget 

3.2 下載交叉編譯工具

常規(guī)的操作是在CentOS中執(zhí)行:

  1. wget https://repo.huaweicloud.com/harmonyos/compiler/gcc_riscv32/7.3.0/linux/gcc_riscv32-linux-7.3.0.tar.gz 

如果你事先通過迅雷在本地下載好了交叉編譯器,可以在CentOS中輸入:

  1. rz 

命令來激活SSH客戶端的上傳窗口,選擇本地文件后,點(diǎn)擊“打開”即可上傳至SSH中的當(dāng)前目錄。

使用tar命令對(duì)工具鏈解壓

  1. tar -xvf gcc_riscv32-linux-7.3.0.tar.gz 

這里有個(gè)稍微需要注意的地方,雖然壓縮包文件名為tar.gz,一般這種文件在tar基礎(chǔ)上還使用了gz方式壓縮,因此通常解壓時(shí)需要加-z選項(xiàng),可真的加上這個(gè)選項(xiàng)會(huì)提示:

  1. gzip: stdin: not in gzip format 
  2.  
  3. tar: Child returned status 1 
  4.  
  5. tar: Error is not recoverable: exiting now 

3.3 安裝交叉編譯工具

解壓好交叉編譯工具后,一般按照習(xí)慣,我會(huì)把這類應(yīng)用放到/usr/local目錄下。

  1. mv gcc_riscv32 /usr/local

當(dāng)然,你也可以在上一步解壓的過程中直接使用

  1. tar -xvf gcc_riscv32-linux-7.3.0.tar.gz -C /usr/local 

為了能在Shell中直接使用交叉編譯命令,需要將工具所在路徑加入到PATH環(huán)境變量中。

打開全局環(huán)境變量配置文件:

  1. vi /etc/profile 

快捷命令Shift+g將光標(biāo)定位到文件尾部

修改PATH環(huán)境變量定義:

  1. export PATH=/usr/local/gcc_riscv32/bin:$PATH 

快捷命令:wq!將修改保存。

執(zhí)行命令:

  1. source /etc/profile 

使環(huán)境變量配置立即生效。為了驗(yàn)證安裝正確性,可以使用:

  1. cd 
  2.  
  3. riscv32-unknown-elf-gcc --version 

 應(yīng)當(dāng)輸出 

  1. riscv32-unknown-elf-gcc (GCC) 7.3.0 
  2.  
  3. Copyright (C) 2017 Free Software Foundation, Inc. 
  4.  
  5. This is free software; see the source for copying conditions. There is NO 
  6.  
  7. warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 

 3.4 編譯安裝Python 3

官方文檔中指出,Python需要3.7以上版本,看了一下CentOS官方源的Python版本,是2.7。而且一些運(yùn)維的工具也是基于2.7的,不能強(qiáng)行刪除。因此我們變通一下,自己編譯個(gè)Python 3??戳艘幌鹿倬W(wǎng),目前的最新穩(wěn)定版本為:3.9.0。

和交叉編譯工具一樣,你也可以提前下載好源碼包,或者使用命令下載

  1. wget https://www.python.org/ftp/python/3.9.0/Python-3.9.0.tgz 

然后將源碼包解壓

  1. tar -xzvf Python-3.9.0.tgz 

在編譯開始前,需要安裝一些編譯過程中依賴的其他組件,以下是我逐個(gè)嘗試過的,為最精簡(jiǎn)的依賴包:

注意:如果你追求一個(gè)更為精簡(jiǎn)的環(huán)境,可以在另外一個(gè)環(huán)境中編譯好Python 3,然后將二進(jìn)制包拷貝過來。這樣就不用安裝下面的組件了

  1. yum groupinstall -y "Development tools" 
  2.  
  3. yum install -y openssl-devel 
  4.  
  5. yum install -y libffi libffi-devel 
  6.  
  7. yum install -y bzip2-devel 
  8.  
  9. yum install -y sqlite-devel 
  10.  
  11. yum install -y readline-devel 
  12.  
  13. yum install -y libuuid-devel 
  14.  
  15. yum install -y uuid-devel 
  16.  
  17. yum install -y xz-devel 
  18.  
  19. yum install -y gdbm-devel 
  20.  
  21. yum install -y tk-devel 

 按照習(xí)慣,希望將Python 3安裝到/usr/local/python3目錄下。需要配置編譯,指定prefix 

  1. cd Python-3.9.0 
  2.  
  3. ./configure --prefix=/usr/local/python3 

 接下來進(jìn)行編譯Python 3 

  1. make -j8 && make install 

這里的參數(shù) -j 是并行job數(shù)。請(qǐng)結(jié)合自身CentOS運(yùn)行實(shí)際硬件環(huán)境(CPU核數(shù))配置,過大、過小都不太好,適當(dāng)優(yōu)化可改善編譯速度。

為了能在Shell中直接使用Python3命令,又不與系統(tǒng)中的Python 2.7產(chǎn)生沖突,我們需要?jiǎng)?chuàng)建兩個(gè)軟鏈接

  1. ln -s /usr/local/python3/bin/python3 /usr/bin/python3 
  2.  
  3. ln -s /usr/local/python3/bin/pip3 /usr/bin/pip3 

 /usr/bin目錄是默認(rèn)在PATH環(huán)境變量中的,上述兩個(gè)軟鏈接創(chuàng)建好后即可直接在Shell中使用了: 

  1. [root@localhost ~]# python3 --version 
  2.  
  3. Python 3.9.0 
  4.  
  5. [root@localhost ~]# pip3 --version 
  6.  
  7. pip 20.2.3 from /usr/local/python3/lib/python3.9/site-packages/pip (python 3.9) 

 3.5 安裝一些基于Python 3的必要組件

安裝完P(guān)ython 3之后,根據(jù)官方指導(dǎo),還需要安裝一些基于Python 3的編譯時(shí)用到的組件,整理如下: 

  1. pip3 install setuptools 
  2.  
  3. pip3 install kconfiglib 
  4.  
  5. pip3 install pycryptodome 
  6.  
  7. pip3 install six --upgrade --ignore-installed six 
  8.  
  9. pip3 install ecdsa 

 如果你在安裝時(shí)遇到了這樣的提示: 

  1. WARNING: Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'SSLError(SSLCertVerificationError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: certificate is not yet valid (_ssl.c:1122)'))': /simple/kconfiglib/ 
  2.  
  3. WARNING: Retrying (Retry(total=3, connect=None, read=None, redirect=None, status=None)) after connection broken by 'SSLError(SSLCertVerificationError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: certificate is not yet valid (_ssl.c:1122)'))': /simple/kconfiglib/ 
  4.  
  5. WARNING: Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'SSLError(SSLCertVerificationError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: certificate is not yet valid (_ssl.c:1122)'))': /simple/kconfiglib/ 

 請(qǐng)檢查一下是否本地時(shí)間與真實(shí)時(shí)間相差比較大(寫這篇文章時(shí)的時(shí)間為2020年10月14日)

  1. [root@localhost ~]# date 

2020年 09月 23日 星期三 15:46:28 CST

可以使用

  1. ntpdate -u time.windows.com 

來校準(zhǔn)本地時(shí)間

3.6 安裝SCons

上文中提到,鴻蒙LiteOS的源碼編譯過程還需要Scons工具,接下來要安裝一下。

首先下載其源代碼

  1. wget http://prdownloads.sourceforge.net/scons/scons-4.0.1.tar.gz 

解壓

  1. tar -xzvf scons-4.0.1.tar.gz 

安裝

  1. cd SCons-4.0.1/ 
  2.  
  3. python3 setup.py install 

 生成SCons命令的軟鏈接,使其在Shell中能夠直接使用

  1. ln -s /usr/local/python3/bin/scons /usr/bin/scons 

3.7 安裝gn工具(用來產(chǎn)生ninja編譯腳本)

gn工具是由google公司開發(fā)的一套預(yù)編譯工具,源代碼地址:https://gn.googlesource.com/gn/

由于一些眾所周知的原因,國(guó)內(nèi)下載源碼不太方便,幸好華為為我們提供了編譯好的二進(jìn)制文件。(如果你感興趣,想自己編譯的話,需要事先準(zhǔn)備Python、ninja和LLVM環(huán)境)

下載:

  1. wget https://repo.huaweicloud.com/harmonyos/compiler/gn/1523/linux/gn.1523.tar 

解壓:

  1. tar -xvf gn.1523.tar 

安裝:

  1. mv gn /usr/local
  2.  
  3. ln -s /usr/local/gn/gn /usr/bin/gn 

 驗(yàn)證:

  1. [root@localhost ~]# gn --version 
  2.  
  3. 1523 (5bd8e26b) 

 3.8 安裝ninja工具

同樣,華為為我們也提供了相應(yīng)的二進(jìn)制版本。

下載: 

  1. wget https://repo.huaweicloud.com/harmonyos/compiler/ninja/1.9.0/linux/ninja.1.9.0.tar 

解壓:

  1. tar -xvf ninja.1.9.0.tar 

安裝:

  1. mv ninja /usr/local
  2.  
  3. ln -s /usr/local/ninja/ninja /usr/bin/ninja 

 驗(yàn)證: 

  1. [root@localhost ~]# ninja --version 
  2.  
  3. 1.9.0 

 3.9 測(cè)試編譯

經(jīng)過上述步驟,編譯環(huán)境已基本安裝完成,我們來嘗試編譯一下。

下載全量源代碼:

  1. wget https://repo.huaweicloud.com/harmonyos/os/1.0/code-1.0.tar.gz 

解壓:

  1. mkdir liteos 
  2.  
  3. tar -xzvf code-1.0.tar.gz -C liteos 

 注意,源代碼壓縮文件內(nèi)部未包含單獨(dú)的目錄,會(huì)解壓出來一大堆文件,應(yīng)當(dāng)先建立一個(gè)目錄,再向該目錄解壓!

解壓好之后,按照官方提供的命令進(jìn)行編譯。由于我們安裝的Python 3為了避免與Python 2.7命令沖突,可執(zhí)行命令變?yōu)閜ython3,故編譯稍有差別: 

  1. python3 build.py wifiiot 

我們看到,最終編譯成功,且輸出了可以燒寫的固件:out/wifiiot/Hi3861_wifiiot_app_allinone.bin

3.10 小結(jié)

上述過程,雖然稍顯繁瑣,但大致的思路就是如果有二進(jìn)制版本,直接下載、解壓、安裝、驗(yàn)證,這樣的步驟。沒有提供二進(jìn)制版本的,可以嘗試通過CentOS官方源來解決。如果官方源仍然無法滿足要求(例如Python 3),也可以嘗試自行通過源碼編譯的方式來解決。

4. 啟用局域網(wǎng)共享

之所以要打開局域網(wǎng)共享,還是因?yàn)槟壳暗拈_發(fā)環(huán)境還不完善。RISC-V架構(gòu)的編譯器只提供了Linux版,這就決定了編譯必須在Linux環(huán)境中。而Hi3861的芯片燒錄程序,只提供了Windows版(有時(shí)間我們可以聊聊鴻蒙LiteOS開發(fā)環(huán)境Deveco的燒錄原理)。而且大多數(shù)從事單片機(jī)開發(fā)的工程師(或者說單片機(jī)廠商提供的開發(fā)環(huán)境,例如燒錄驅(qū)動(dòng)、燒錄工具)還都是以Windows平臺(tái)為主。我們希望編譯完后直接能拿到二進(jìn)制文件進(jìn)行燒錄,所以想到了這樣一種變通方式。

4.1 安裝samba

samba協(xié)議即Windows中的網(wǎng)上鄰居所使用的協(xié)議。在CentOS的最小安裝環(huán)境下需要單獨(dú)安裝。

  1. yum install -y samba 

允許開機(jī)啟動(dòng),這樣在編譯服務(wù)器掉電恢復(fù)后能自動(dòng)啟動(dòng)局域網(wǎng)共享:

  1. systemctl enable smb 

4.2 配置samba服務(wù)前的一些準(zhǔn)備工作

我們先創(chuàng)建一個(gè)用于文件共享的賬號(hào),因?yàn)楹罄m(xù)很多的操作都是基于這個(gè)賬號(hào)的。假設(shè)這個(gè)賬號(hào)名為:harmony

  1. useradd -r -s /bin/false harmony 

使用useradd創(chuàng)建一個(gè)“三無賬戶”,即:沒有home目錄,沒有密碼,沒有系統(tǒng)Shell。畢竟我們只是希望有個(gè)專用身份而已。隨后,要在samba系統(tǒng)中添加剛剛創(chuàng)建的賬戶,并且設(shè)置samba專用密碼。此處示例設(shè)置密碼為:harmony。即用戶名密碼均為:harmony。當(dāng)然也可以根據(jù)自己喜好設(shè)置。

  1. smbpasswd -a harmony 

賬號(hào)初始化之后,就可以創(chuàng)建一個(gè)專門用于存放共享代碼的目錄了:

  1. mkdir /data 

BTW:其實(shí)更加穩(wěn)妥的操作是在安裝系統(tǒng)時(shí)單獨(dú)分一個(gè)/data掛載點(diǎn)分區(qū),這樣一旦系統(tǒng)發(fā)生故障,哪怕重裝系統(tǒng),我們的代碼也不會(huì)丟失。

因?yàn)閯?chuàng)建該目錄的用戶是root,所以samba用戶還不能對(duì)這個(gè)目錄進(jìn)行寫入操作,要修改目錄所有者:

  1. chown -R harmony:harmony /data 

4.3 配置samba服務(wù)

接下來就是最關(guān)鍵的配置samba服務(wù)環(huán)節(jié)了。本來希望配置一個(gè)不需要用戶名密碼即可上傳、下載的共享目錄。但后來查閱資料,發(fā)現(xiàn)Windows 10默認(rèn)情況下已經(jīng)不允許這種方式了。更改Windows安全策略來實(shí)現(xiàn)倒也不是不可以,只是以犧牲我們操作系統(tǒng)的安全性為代價(jià)不劃算,所以我們選擇了在CentOS中創(chuàng)建一個(gè)Samba專用賬戶,用它來登錄。

首先將默認(rèn)配置備份一下,以后如果配置錯(cuò)誤,還可以回滾到初始狀態(tài)

  1. cd /etc/samba 
  2.  
  3. cp smb.conf smb.conf.bak 

然后使用vi命令編輯smb.conf文件 

  1. vi smb.conf 

下面的這段是我之前整理好的一套配置:

  1. [global
  2.  
  3. netbios name = Compiler 
  4.  
  5. server string = RISC-V Compiler 
  6.  
  7. workgroup = WORKGROUP 
  8.  
  9. security = user 
  10.  
  11. map to guest = Bad User 
  12.  
  13. passdb backend = tdbsam 
  14.  
  15. log file = /var/log/samba/log.%m 
  16.  
  17. [code] 
  18.  
  19. comment = Public Stuff 
  20.  
  21. path = /data 
  22.  
  23. valid users = harmony 
  24.  
  25. browseable = yes 
  26.  
  27. writable = yes 
  28.  
  29. available = yes 
  30.  
  31. read only = no 
  32.  
  33. create mode = 0644 
  34.  
  35. directory mode = 0755 

這里簡(jiǎn)單解釋一下,[code]表示掛載點(diǎn),如果你使用Windows,在地址欄輸入\\[IP]之后,出現(xiàn)的第一級(jí)目錄,即掛載點(diǎn)。valid users表示允許我們的harmony用戶訪問。因?yàn)橐獡碛袑懭霗?quán)限,因此writable設(shè)置為yes,read only設(shè)置為no。新建文件的默認(rèn)權(quán)限為644,即:rw-r--r--;新建目錄的默認(rèn)權(quán)限為755,即:drwxr-xr-x,必須擁有執(zhí)行權(quán)限,否則新建完的目錄刪不掉。

4.4 開啟SELinux的安全選項(xiàng)

在CentOS中,默認(rèn)開啟了SELinux,此功能是建立在系統(tǒng)內(nèi)核的一套安全機(jī)制,對(duì)于samba服務(wù),默認(rèn)是不允許用戶向服務(wù)器寫入內(nèi)容的。既然我們有這個(gè)需求,那就將此功能啟用:

  1. setsebool -P samba_export_all_rw 1 

另附:查看SELinux中關(guān)于samba服務(wù)配置的選項(xiàng)狀態(tài):

  1. sestatus -b | grep samba 

4.5 別忘了防火墻

在CentOS中,防火墻默認(rèn)開啟,samba服務(wù)相關(guān)的端口不在防火墻策略中,此時(shí)即便開啟服務(wù),外部也無法訪問,因此需要將端口加入到防火墻允許策略中: 

  1. firewall-cmd --zone=public --add-port=139/tcp --permanent 
  2.  
  3. firewall-cmd --zone=public --add-port=389/tcp --permanent 
  4.  
  5. firewall-cmd --zone=public --add-port=445/tcp --permanent 
  6.  
  7. firewall-cmd --zone=public --add-port=901/tcp --permanent 
  8.  
  9. firewall-cmd --reload 
  10.  
  11. firewall-cmd --list-all 

 當(dāng)然,最簡(jiǎn)單的還是禁用防火墻,但是會(huì)帶來安全隱患,請(qǐng)酌情使用。 

  1. systemctl stop firewalld 
  2.  
  3. systemctl disable firewalld 

 4.6 啟動(dòng)共享服務(wù)

一切配置好后,就可以啟動(dòng)共享服務(wù)了

  1. systemctl start smb 

也可以查看服務(wù)的運(yùn)行狀態(tài)

  1. systemctl status smb 

在Windows中,地址欄輸入\\[IP]地址,即可看到之前共享的目錄內(nèi)容。

4.7 額外補(bǔ)充

如果后續(xù)使用中,samba用戶密碼修改,或者用戶名更改。那么在Windows下,以前能夠正常訪問也有可能變得不能訪問了。這時(shí)我們?cè)诳刂泼姘逯兴阉?ldquo;憑據(jù)”,在“憑據(jù)管理器”->“Windows憑據(jù)”中刪除之前老的登錄賬號(hào)即可。如果登錄時(shí)沒有勾選過記住憑據(jù),可以在Windows的命令行中使用:

  1. net use * /del 

來清除連接緩存。

參考資料:

[1]Huawei. 搭建環(huán)境 [EB/OL]. https://device.harmonyos.com/cn/docs/start/introduce/oem_quickstart_3861_build-0000001054781998, 2020-10-14/2020-10-14

[2]mikey-no. pip always fails ssl verification [EB/OL].https://stackoverflow.com/questions/49324802/pip-always-fails-ssl-verification, 2019-01-28/2020-10-14

[3]一畝三分地. CentOS 7設(shè)置Samba共享目錄 [EB/OL]. https://www.cnblogs.com/ldm1989/p/9229921.html, 2018-06-26/2020-10-14

想了解更多內(nèi)容,請(qǐng)?jiān)L問:

51CTO和華為官方合作共建的鴻蒙技術(shù)社區(qū) 

https://harmonyos.51cto.com

 

責(zé)任編輯:jianghua 來源: 鴻蒙社區(qū)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)