手把手教你搭建鴻蒙hi3518開發和運行環境
https://harmonyos.51cto.com/#zz
前言
學習C語言,C++語言,數據結構和算法,操作系統,網絡,驅動,設計模式等知識。
用鴻蒙來強化就太對了。本文教你一步一步搭建鴻蒙的開發和運行環境,有點啰嗦,適合小白。
本文所涉及的所有工具都可以在這里找到(提取碼pbe2)。
具體有下列步驟:
- 組裝開發板
- 連接開發板
- 安裝串口驅動
- 安裝USB驅動
- 安裝燒錄工具
- 擦除引導程序
- 燒錄系統
- 登錄開發板
- 修改OS啟動地址
- 運行可執行程序
- 安裝VMWARE
- 安裝編譯服務器
- 訪問編譯服務器
- 編譯鴻蒙產品
- 編譯鴻蒙組件
- 打通開發板網絡
- 部署NFS
- 新增自定義組件
組裝開發板
我們選用HiSpark IPC DIY Camera產品。內部含hi3518ev300芯片。
請參考產品的安裝說明書。
或者參考安裝視頻指導。
連接開發板
開發板和PC的連接關系如下圖。2條usb線(產品包裝中的),其中一個三針插頭,一個四針插頭。


安裝串口驅動
請雙擊USB-to-Serial Comm Port.exe。進行串口驅動安裝,安裝完成后。在設備管理器中應該能看到下面這樣的COM接口,你的COM接口編號可能有所不同。表明串口驅動安裝成功。

安裝USB驅動
然后雙擊zadig-2.5.exe安裝通用USB驅動,點擊中間的Install。

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

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

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

燒錄系統

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

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

點擊OK以后,會進入下面這個界面。

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

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


然后開始了服務器創建過程,這個過程比較漫長,請保持耐心。
訪問服務器
服務器創建完成后。然后我們對它進行上電啟動

等待服務器開機。1分鐘內一般就能正常起來。這個過程中,注意保持網線插入,因為虛擬機和PC之間是通過有線網卡橋接的。啟機過程有軟件會探測網絡是否在,否則會很慢。
當屏幕輸出變慢后,我們就可以訪問它了,當然也可以在黑窗口里面直接鍵入各種命令,不過不方便。

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

點擊OK以后,就登錄到了編譯服務器的shell。

文件共享訪問
為了從Windows訪問編譯服務器上的源代碼和編譯出的目標文件,在編譯服務器上已經安裝好了samba文件共享服務,只需要在windows這邊映射網絡驅動器即可。按如下方法操作。

右鍵點擊 計算機 ,選擇映射網絡驅動器。

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

特別提醒:
python build.py ipcamera_hi3518ev300 -b debug
編譯debug版本才會含有調試的shell,如果省略-b debug,無法通過shell命令行執行命令。
大約需要10多分鐘完成產品編譯,編譯成功后,結果如下。

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

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

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

這個組件涉及的代碼文件是哪些呢,繼續看對應目錄的BUILD.gn文件,對于此例子為//applications/sample/camera/app

生成的程序在下面這個目錄

打通網絡
設備本身沒有以太口,只有wifi接口。但默認情況下wifi是無法工作的。
輸入ifconfig你會看到wlan0接口IP地址為0。

需要做如下工作才能讓wifi正常運行起來。
- 配置SSID和密碼
- 修改wpa_sample.c源碼
- 配置自啟動
- 編譯系統
配置SSID和密碼
修改applications\sample\camera\communication\wpa_supplicant\config\ wpa_supplicant.conf。
修改后的內容如下。這個文件的目的是配置wifi用戶名和密碼。
- country=GB
- ctrl_interface=udp
- network={
- ssid="teacher"
- psk="12345678qwe"
- }
注意
- =號2端不要留空格。
- ssid和psk按你自己的實際進行配置,比如你手機熱點的網絡名和密碼。
修改源碼
修改applications\sample\camera\communication\wpa_supplicant\src\wpa_sample.c源代碼。
只修改main函數部分。這個程序的目的是讀取wifi用戶名和密碼配置文件,并進行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;
- }
配置自啟動
剛才修改的main會生成一個可執行程序,這個程序我們需要把它配置在啟動腳本中,這樣每次板子重啟都會運行這個程序。
修改文件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": []
- }
- ]
- }
編譯系統
此時我們配置好了wifi用戶名和密碼,也修改了wifi啟動程序并設置好了啟動腳本。接下來我們把這些修改編譯到系統中,然后再燒錄到板子上。
當完整編譯系統,燒錄好以后,新版本的系統起來以后,我們可以看到wlan0 的接口的IP地址正常獲取到了。

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

編輯輸出表文件。如下。

然后保存。
然后我們配置防火墻,使得NFS相關的網絡通信暢通。先看需要放行哪些端口。

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



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

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

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

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

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

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

編譯好的程序在out\ipcamera_hi3518ev300\bin目錄下。
©著作權歸作者和HarmonyOS技術社區共同所有,如需轉載,請注明出處,否則將追究法律責任
https://harmonyos.51cto.com/#zz