手把手教你搭建鴻蒙hi3518開發(fā)和運(yùn)行環(huán)境
51CTO和華為官方合作共建的鴻蒙技術(shù)社區(qū)
https://harmonyos.51cto.com/#zz
前言
學(xué)習(xí)C語言,C++語言,數(shù)據(jù)結(jié)構(gòu)和算法,操作系統(tǒng),網(wǎng)絡(luò),驅(qū)動(dòng),設(shè)計(jì)模式等知識(shí)。
用鴻蒙來強(qiáng)化就太對(duì)了。本文教你一步一步搭建鴻蒙的開發(fā)和運(yùn)行環(huán)境,有點(diǎn)啰嗦,適合小白。
本文所涉及的所有工具都可以在這里找到(提取碼pbe2)。
具體有下列步驟:
- 組裝開發(fā)板
- 連接開發(fā)板
- 安裝串口驅(qū)動(dòng)
- 安裝USB驅(qū)動(dòng)
- 安裝燒錄工具
- 擦除引導(dǎo)程序
- 燒錄系統(tǒng)
- 登錄開發(fā)板
- 修改OS啟動(dòng)地址
- 運(yùn)行可執(zhí)行程序
- 安裝VMWARE
- 安裝編譯服務(wù)器
- 訪問編譯服務(wù)器
- 編譯鴻蒙產(chǎn)品
- 編譯鴻蒙組件
- 打通開發(fā)板網(wǎng)絡(luò)
- 部署NFS
- 新增自定義組件
組裝開發(fā)板
我們選用HiSpark IPC DIY Camera產(chǎn)品。內(nèi)部含hi3518ev300芯片。
請(qǐng)參考產(chǎn)品的安裝說明書。
或者參考安裝視頻指導(dǎo)。
連接開發(fā)板
開發(fā)板和PC的連接關(guān)系如下圖。2條usb線(產(chǎn)品包裝中的),其中一個(gè)三針插頭,一個(gè)四針插頭。


安裝串口驅(qū)動(dòng)
請(qǐng)雙擊USB-to-Serial Comm Port.exe。進(jìn)行串口驅(qū)動(dòng)安裝,安裝完成后。在設(shè)備管理器中應(yīng)該能看到下面這樣的COM接口,你的COM接口編號(hào)可能有所不同。表明串口驅(qū)動(dòng)安裝成功。

安裝USB驅(qū)動(dòng)
然后雙擊zadig-2.5.exe安裝通用USB驅(qū)動(dòng),點(diǎn)擊中間的Install。

安裝燒錄工具
直接解壓HiTool-HM-5.4.9-win32-x86_64.zip文件。然后雙擊其中的HiTool.exe. 界面如下圖。然后先將芯片切換到3518ev300。

擦除引導(dǎo)程序
然后就是擦除uboot了,記得使用串口來擦除。

有幾點(diǎn)需要注意
由于編譯服務(wù)器還沒有創(chuàng)建,所以我把自己編譯好的文件放網(wǎng)上了,你可以下載。
文件路徑根據(jù)你自己的實(shí)際路徑,下載下來后存放的位置。
COM口根據(jù)你之前設(shè)備管理器看到的那個(gè)CH340口選擇。
確保頂部選中的芯片是3518ev300。
傳輸方式選擇串口。
按分區(qū)燒寫。
器件類型spi nor。
開始地址0,長(zhǎng)度1M。
點(diǎn)擊擦除后10秒內(nèi)拔插usb電源線接口(即接4個(gè)針腳的那個(gè)usb口,小的那個(gè)usb頭),讓板子重啟。
很快就能看到擦除成功的提示。

燒錄系統(tǒng)

主要注意如下幾點(diǎn):
使用usb口燒錄(不是串口)。
現(xiàn)在需要燒錄4個(gè)文件(通過右側(cè)綠色+可以添加文件)。
每個(gè)文件的名稱,器件類型,地址,長(zhǎng)度要填寫正確。
最后點(diǎn)擊燒寫。
然后等待燒寫成功。

如果你的燒寫不成功,請(qǐng)檢查之前的usb驅(qū)動(dòng)是否已安裝。
登錄開發(fā)板
鴻蒙系統(tǒng)燒錄好以后,就可以進(jìn)去看一下鴻蒙系統(tǒng)的模樣了。
雙擊MobaXterm_Personal_20.2.exe. 也可以用你自己喜歡的終端工具
然后點(diǎn)擊Session, 在彈出的窗口中填好相關(guān)字段

點(diǎn)擊OK以后,會(huì)進(jìn)入下面這個(gè)界面。

這里是uboot程序的界面,還沒有進(jìn)入鴻蒙OS,原因是uboot此時(shí)不知道鴻蒙OS的啟動(dòng)地址。
然后我們?cè)O(shè)置啟動(dòng)地址
設(shè)置OS啟動(dòng)地址
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#字樣,請(qǐng)按下幾次enter鍵。接下來,我們手動(dòng)運(yùn)行一個(gè)鴻蒙的程序。
運(yùn)行可執(zhí)行程序
進(jìn)入bin目錄,運(yùn)行writer程序(這個(gè)程序是我新增的,如果你的開發(fā)板上沒有,你可以運(yùn)行./camera_app程序)。

創(chuàng)建編譯服務(wù)器
為了省去搭建編譯環(huán)境的繁瑣,本次將一個(gè)已經(jīng)搭建好的編譯服務(wù)器制作成鏡像。我們只需要使用這個(gè)鏡像即可獲得編譯環(huán)境。
鏡像文件比較大(超過8G),請(qǐng)直接找老師獲取,也可以去前言提到的地方下載(建議晚上睡覺時(shí)下載)。
本次使用的Ubuntu是不帶桌面環(huán)境的。內(nèi)部已經(jīng)安裝好HarmonyOS的編譯環(huán)境,并且安裝了samba文件共享工具。方便windows訪問。
請(qǐng)先安裝VMWARE WorkStation軟件
然后打開它, 選擇 文件-->打開


然后開始了服務(wù)器創(chuàng)建過程,這個(gè)過程比較漫長(zhǎng),請(qǐng)保持耐心。
訪問服務(wù)器
服務(wù)器創(chuàng)建完成后。然后我們對(duì)它進(jìn)行上電啟動(dòng)

等待服務(wù)器開機(jī)。1分鐘內(nèi)一般就能正常起來。這個(gè)過程中,注意保持網(wǎng)線插入,因?yàn)樘摂M機(jī)和PC之間是通過有線網(wǎng)卡橋接的。啟機(jī)過程有軟件會(huì)探測(cè)網(wǎng)絡(luò)是否在,否則會(huì)很慢。
當(dāng)屏幕輸出變慢后,我們就可以訪問它了,當(dāng)然也可以在黑窗口里面直接鍵入各種命令,不過不方便。

把鼠標(biāo)放入黑窗口,點(diǎn)擊以后,鼠標(biāo)焦點(diǎn)就進(jìn)入黑窗口了,讓焦點(diǎn)退出來的方法是按CTRL+g。
如果想在黑窗口操作linux相關(guān)命令,則鍵入用戶名compile 密碼compile。
一般我們不在黑窗口操作。
我們需要如下2種方法來訪問虛擬機(jī):
- 通過ssh訪問,即可以遠(yuǎn)程登錄虛擬機(jī)的shell,并執(zhí)行命令。
- 通過文件共享訪問,可以在windows上查看和修改虛擬機(jī)中的文件。
注意:
當(dāng)前創(chuàng)建的虛擬機(jī)采用的是橋接模式,它的IP地址為192.168.2.20。你需要確保虛擬機(jī)中的IP地址和自己PC的IP地址在同一個(gè)網(wǎng)段。(最簡(jiǎn)單的方法是在自己的網(wǎng)卡上添加一個(gè)192.168.2.X網(wǎng)段的IP地址)。Windows添加IP地址的方法請(qǐng)自行查閱。
如果多臺(tái)編譯服務(wù)器在同一個(gè)局域網(wǎng)絡(luò),那么IP地址會(huì)沖突,因?yàn)槎际?92.168.2.20。所以,需要對(duì)地址進(jìn)行修改。
SSH訪問

點(diǎn)擊OK以后,就登錄到了編譯服務(wù)器的shell。

文件共享訪問
為了從Windows訪問編譯服務(wù)器上的源代碼和編譯出的目標(biāo)文件,在編譯服務(wù)器上已經(jīng)安裝好了samba文件共享服務(wù),只需要在windows這邊映射網(wǎng)絡(luò)驅(qū)動(dòng)器即可。按如下方法操作。

右鍵點(diǎn)擊 計(jì)算機(jī) ,選擇映射網(wǎng)絡(luò)驅(qū)動(dòng)器。

然后就可以在windows看到編譯服務(wù)器上的內(nèi)容了。
現(xiàn)在開始,你就可以像操作windows的文件一樣來操作編譯服務(wù)器里面的文件了(比如通過Visual Studio來修改服務(wù)器上的C/C++代碼文件)。
編譯產(chǎn)品
整個(gè)工程是存放在~/harmonyos/openharmony目錄,得先進(jìn)入這個(gè)目錄。
然后執(zhí)行python腳本來編譯產(chǎn)品。如下紅色框即編譯整個(gè)產(chǎn)品。

特別提醒:
python build.py ipcamera_hi3518ev300 -b debug
編譯debug版本才會(huì)含有調(diào)試的shell,如果省略-b debug,無法通過shell命令行執(zhí)行命令。
大約需要10多分鐘完成產(chǎn)品編譯,編譯成功后,結(jié)果如下。

然后在windows文件夾下可以看到編譯出來的結(jié)果。

每次系統(tǒng)燒錄時(shí),將上述3個(gè)文件以及uboot文件(Z:\vendor\hisi\hi35xx\hi3518ev300\uboot\out\boot\u-boot-hi3518ev300.bin)
拷貝到windows某個(gè)目錄下(比如我的例子中的D:\BIN),然后用HiTool.exe來燒錄。
更新源碼
鴻蒙系統(tǒng)目前更新比較頻繁,如果需要獲取最新版本,請(qǐng)執(zhí)行下面的命令更新源碼。
這里有一個(gè)問題:編譯服務(wù)器預(yù)設(shè)的192.168.2.20無法上網(wǎng)。這個(gè)時(shí)候你可以再添加1個(gè)IP地址(添加可以上網(wǎng)的IP地址)。然后再執(zhí)行下面2條命令
cd ~/harmonyos/openharmony
repo sync -c
。。。待貼圖。。。
編譯組件
編譯完整產(chǎn)品比較耗時(shí),大多數(shù)時(shí)候我們修改的代碼較少,只需要編譯指定的組件就行了。
由-T指定編譯一個(gè)已經(jīng)存在的組件,只編譯一個(gè)小組件,速度飛快。

注意,編譯組件的時(shí)候 -T 后面的路徑需要使用全路徑。如何確定-T后面的參數(shù)?請(qǐng)看下圖:
文本編輯器(如notepad++)打開build/lite/product/ ipcamera_hi3518ev300.json文件

這個(gè)組件涉及的代碼文件是哪些呢,繼續(xù)看對(duì)應(yīng)目錄的BUILD.gn文件,對(duì)于此例子為//applications/sample/camera/app

生成的程序在下面這個(gè)目錄

打通網(wǎng)絡(luò)
設(shè)備本身沒有以太口,只有wifi接口。但默認(rèn)情況下wifi是無法工作的。
輸入ifconfig你會(huì)看到wlan0接口IP地址為0。

需要做如下工作才能讓wifi正常運(yùn)行起來。
- 配置SSID和密碼
- 修改wpa_sample.c源碼
- 配置自啟動(dòng)
- 編譯系統(tǒng)
配置SSID和密碼
修改applications\sample\camera\communication\wpa_supplicant\config\ wpa_supplicant.conf。
修改后的內(nèi)容如下。這個(gè)文件的目的是配置wifi用戶名和密碼。
- country=GB
- ctrl_interface=udp
- network={
- ssid="teacher"
- psk="12345678qwe"
- }
注意
- =號(hào)2端不要留空格。
- ssid和psk按你自己的實(shí)際進(jìn)行配置,比如你手機(jī)熱點(diǎn)的網(wǎng)絡(luò)名和密碼。
修改源碼
修改applications\sample\camera\communication\wpa_supplicant\src\wpa_sample.c源代碼。
只修改main函數(shù)部分。這個(gè)程序的目的是讀取wifi用戶名和密碼配置文件,并進(jìn)行wifi連接。
- int main(int argc, char *argv[])
- {
- g_wpaArgc = argc;
- for (int i = 0; i < g_wpaArgc; i++) {
- g_wpaArg[i] = argv[i];
- }
- g_wpaArgc=5;
- g_wpaArg[1] = "-i";
- g_wpaArg[2]="wlan0";
- g_wpaArg[3]="-c";
- g_wpaArg[4]="/etc/wpa_supplicant.conf";
- int ret = pthread_create(&g_wpaThread, NULL, ThreadMain, NULL);
- if (ret != 0) {
- printf("[WpaSample]create thread failed error:%s.\n", strerror(ret));
- return 1;
- }
- pthread_join(g_wpaThread, NULL);
- return 0;
- }
配置自啟動(dòng)
剛才修改的main會(huì)生成一個(gè)可執(zhí)行程序,這個(gè)程序我們需要把它配置在啟動(dòng)腳本中,這樣每次板子重啟都會(huì)運(yùn)行這個(gè)程序。
修改文件vendor\huawei\camera\init_configs\ init_liteos_a_3518ev300.cfg 。 紅色部分為新增。
- {
- "jobs" : [{
- "name" : "pre-init",
- "cmds" : [
- "mkdir /storage/data/log",
- "chmod 0755 /storage/data/log",
- "chown 4 4 /storage/data/log",
- "mkdir /storage/data/softbus",
- "chmod 0700 /storage/data/softbus",
- "chown 7 7 /storage/data/softbus",
- "mkdir /sdcard",
- "chmod 0777 /sdcard",
- "mount vfat /dev/mmcblk0 /sdcard rw,umask=000",
- "mount vfat /dev/mmcblk1 /sdcard rw,umask=000"
- ]
- }, {
- "name" : "init",
- "cmds" : [
- "start shell",
- "start apphilogcat",
- "start foundation",
- "start bundle_daemon",
- "start media_server",
- "start appspawn",
- "start wpa_supplicant"
- ]
- }, {
- "name" : "post-init",
- "cmds" : [
- "chown 0 99 /dev/dev_mgr",
- "chown 0 99 /dev/hdfwifi",
- "chown 0 99 /dev/gpio",
- "chown 0 99 /dev/i2c-0",
- "chown 0 99 /dev/i2c-1",
- "chown 0 99 /dev/i2c-2",
- "chown 0 99 /dev/uartdev-0",
- "chown 0 99 /dev/uartdev-1",
- "chown 0 99 /dev/uartdev-2",
- "chown 0 99 /dev/spidev0.0",
- "chown 0 99 /dev/spidev1.0",
- "chown 0 99 /dev/spidev1.1"
- ]
- }
- ],
- "services" : [{
- "name" : "foundation",
- "path" : "/bin/foundation",
- "uid" : 7,
- "gid" : 7,
- "once" : 0,
- "importance" : 1,
- "caps" : [10, 11, 12, 13]
- }, {
- "name" : "shell",
- "path" : "/bin/shell",
- "uid" : 2,
- "gid" : 2,
- "once" : 0,
- "importance" : 0,
- "caps" : [4294967295]
- }, {
- "name" : "appspawn",
- "path" : "/bin/appspawn",
- "uid" : 1,
- "gid" : 1,
- "once" : 0,
- "importance" : 0,
- "caps" : [2, 6, 7, 8, 23]
- }, {
- "name" : "apphilogcat",
- "path" : "/bin/apphilogcat",
- "uid" : 4,
- "gid" : 4,
- "once" : 1,
- "importance" : 0,
- "caps" : []
- }, {
- "name" : "media_server",
- "path" : "/bin/media_server",
- "uid" : 5,
- "gid" : 5,
- "once" : 1,
- "importance" : 0,
- "caps" : []
- }, {
- "name" : "wms_server",
- "path" : "/bin/wms_server",
- "uid" : 6,
- "gid" : 6,
- "once" : 1,
- "importance" : 0,
- "caps" : []
- }, {
- "name" : "bundle_daemon",
- "path" : "/bin/bundle_daemon",
- "uid" : 8,
- "gid" : 8,
- "once" : 0,
- "importance" : 0,
- "caps" : [0, 1]
- },{
- "name": "wpa_supplicant",
- "path": "/bin/wpa_supplicant",
- "uid" : 0,
- "gid" : 0,
- "once" : 1,
- "importance" : 0,
- "caps": []
- }
- ]
- }
編譯系統(tǒng)
此時(shí)我們配置好了wifi用戶名和密碼,也修改了wifi啟動(dòng)程序并設(shè)置好了啟動(dòng)腳本。接下來我們把這些修改編譯到系統(tǒng)中,然后再燒錄到板子上。
當(dāng)完整編譯系統(tǒng),燒錄好以后,新版本的系統(tǒng)起來以后,我們可以看到wlan0 的接口的IP地址正常獲取到了。

部署NFS
當(dāng)網(wǎng)絡(luò)打通以后,我們就可以部署NFS(網(wǎng)絡(luò)文件系統(tǒng))了。部署NFS最大的好處是,可以將windows的某個(gè)文件夾當(dāng)成開發(fā)板上的文件夾來使用,這樣,不需要把編譯的程序手動(dòng)拷貝到開發(fā)板去,就可以執(zhí)行編譯出來的程序。
主要分為如下3個(gè)過程:
- 安裝NFS Server
- 配置和啟動(dòng)Server
- 掛載NFS
安裝NFS
在PC上安裝NFS服務(wù)器。雙擊nfs1169.exe進(jìn)行安裝,同常規(guī)軟件安裝方法。
配置NFS
安裝好以后,就是配置了,這一步稍微麻煩。首先需要以管理員身份運(yùn)行NFS服務(wù)器。
開始-->所有程序-->haneWIN軟件-->NFS-->NFS服務(wù)器(右鍵點(diǎn)擊)--選擇(以管理員身份運(yùn)行)。

編輯輸出表文件。如下。

然后保存。
然后我們配置防火墻,使得NFS相關(guān)的網(wǎng)絡(luò)通信暢通。先看需要放行哪些端口。

需要放行的端口有: 111, 1058, 2049. TCP和UDP都需要。
然后我們配置放行這些端口(即允許這些端口的流量通過)。
控制面板\系統(tǒng)和安全\Windows 防火墻。



確保規(guī)則已配置好。然后重啟防火墻(關(guān)閉防火墻,再打開防火墻)。

重啟NFS
開始---所有程序---haneWIN軟件---NFS---重啟所有服務(wù)(以管理員身份運(yùn)行)。
掛載NFS
在開發(fā)板shell界面,掛載NFS。
先確保開發(fā)板和PC之間能互通(可以從PC ping開發(fā)板)。我的開發(fā)板和PC都通過wifi連接手機(jī)熱點(diǎn),所以在一個(gè)網(wǎng)段,能互相ping通。
然后開發(fā)板上面執(zhí)行下面的命令。

除了IP地址調(diào)整成你PC的地址,其它信息照抄。掛載成功會(huì)顯示finished如紅框所示。
然后我們就可以執(zhí)行windows上的程序了。

在我的機(jī)器上,上述文件存放在d:\BIN目錄。因?yàn)檫@個(gè)目錄我配置成了NFS Server的根目錄。
所以,能從開發(fā)板上看到并運(yùn)行它們。
上述這些內(nèi)容,是通過從編譯服務(wù)器拷貝出來的。如何拷貝,請(qǐng)參閱訪問虛擬機(jī)章節(jié)。
添加組件
如果我們要新增程序怎么處理。請(qǐng)仿照范例中的camer_app處理。具體如下,比如我新增了一個(gè)reader程序,一個(gè)writer程序。以下描述reader的添加邏輯。
在applications\sample\camera目錄下,將app目錄復(fù)制一份,改名為reader。

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

然后源碼根據(jù)自己的實(shí)際情況修改。
最后修改編譯腳本build\lite\product\ ipcamera_hi3518ev300.json。
添加紅框中的一行,然后按組件編譯方式編譯就可以了。

編譯好的程序在out\ipcamera_hi3518ev300\bin目錄下。
©著作權(quán)歸作者和HarmonyOS技術(shù)社區(qū)共同所有,如需轉(zhuǎn)載,請(qǐng)注明出處,否則將追究法律責(zé)任
51CTO和華為官方合作共建的鴻蒙技術(shù)社區(qū)
https://harmonyos.51cto.com/#zz