00. 目錄
文章目錄
- 00. 目錄
- 01. OpenHarmony概述
- 02. hdc簡介
- 03. hdc獲取
- 04. option相關的命令
- 05. 查詢設備列表的命令
- 06. 服務進程相關命令
- 07. 網絡相關的命令
- 08. 文件相關的命令
- 09. 應用相關的命令
- 10. 調試相關的命令
- 11. 常見問題
- 12. 附錄
01. OpenHarmony概述
OpenHarmony是由開放原子開源基金會(OpenAtom Foundation)孵化及運營的開源項目,目標是面向全場景、全連接、全智能時代,基于開源的方式,搭建一個智能終端設備操作系統的框架和平臺,促進萬物互聯產業的繁榮發展。
OpenHarmony整體遵從分層設計,從下向上依次為:內核層、系統服務層、框架層和應用層。系統功能按照“系統 > 子系統 > 組件”逐級展開,在多設備部署場景下,支持根據實際需求裁剪某些非必要的組件。OpenHarmony技術架構如下所示:
內核層
- 內核子系統:采用多內核(Linux內核或者LiteOS)設計,支持針對不同資源受限設備選用適合的OS內核。內核抽象層(KAL,Kernel Abstract Layer)通過屏蔽多內核差異,對上層提供基礎的內核能力,包括進程/線程管理、內存管理、文件系統、網絡管理和外設管理等。
- 驅動子系統:驅動框架(HDF)是系統硬件生態開放的基礎,提供統一外設訪問能力和驅動開發、管理框架。
系統服務層
系統服務層是OpenHarmony的核心能力集合,通過框架層對應用程序提供服務。該層包含以下幾個部分:
- 系統基本能力子系統集:為分布式應用在多設備上的運行、調度、遷移等操作提供了基礎能力,由分布式軟總線、分布式數據管理、分布式任務調度、公共基礎庫、多模輸入、圖形、安全、AI等子系統組成。
- 基礎軟件服務子系統集:提供公共的、通用的軟件服務,由事件通知、電話、多媒體、DFX(Design For X) 等子系統組成。
- 增強軟件服務子系統集:提供針對不同設備的、差異化的能力增強型軟件服務,由智慧屏專有業務、穿戴專有業務、IoT專有業務等子系統組成。
- 硬件服務子系統集:提供硬件服務,由位置服務、用戶IAM、穿戴專有硬件服務、IoT專有硬件服務等子系統組成。
根據不同設備形態的部署環境,基礎軟件服務子系統集、增強軟件服務子系統集、硬件服務子系統集內部可以按子系統粒度裁剪,每個子系統內部又可以按功能粒度裁剪。
框架層
框架層為應用開發提供了C/C++/JS等多語言的用戶程序框架和Ability框架,適用于JS語言的ArkUI框架,以及各種軟硬件服務對外開放的多語言框架API。根據系統的組件化裁剪程度,設備支持的API也會有所不同。
應用層
應用層包括系統應用和第三方非系統應用。應用由一個或多個FA(Feature Ability)或PA(Particle Ability)組成。其中,FA有UI界面,提供與用戶交互的能力;而PA無UI界面,提供后臺運行任務的能力以及統一的數據訪問抽象。基于FA/PA開發的應用,能夠實現特定的業務功能,支持跨設備調度與分發,為用戶提供一致、高效的應用體驗。
技術特性
硬件互助,資源共享
主要通過下列模塊達成
-
分布式軟總線
分布式軟總線是多設備終端的統一基座,為設備間的無縫互聯提供了統一的分布式通信能力,能夠快速發現并連接設備,高效地傳輸任務和數據。
-
分布式數據管理
分布式數據管理基于分布式軟總線,實現了應用程序數據和用戶數據的分布式管理。用戶數據不再與單一物理設備綁定,業務邏輯與數據存儲分離,應用跨設備運行時數據無縫銜接,為打造一致、流暢的用戶體驗創造了基礎條件
-
分布式任務調度
分布式任務調度基于分布式軟總線、分布式數據管理、分布式Profile等技術特性,構建統一的分布式服務管理(發現、同步、注冊、調用)機制,支持對跨設備的應用進行遠程啟動、遠程調用、綁定/解綁、以及遷移等操作,能夠根據不同設備的能力、位置、業務運行狀態、資源使用情況并結合用戶的習慣和意圖,選擇最合適的設備運行分布式任務
-
設備虛擬化
分布式設備虛擬化平臺可以實現不同設備的資源融合、設備管理、數據處理,將周邊設備作為手機能力的延伸,共同形成一個超級虛擬終端。
一次開發,多端部署
OpenHarmony提供用戶程序框架、Ability框架以及UI框架,能夠保證開發的應用在多終端運行時保證一致性。一次開發、多端部署。
多終端軟件平臺API具備一致性,確保用戶程序的運行兼容性。
- 支持在開發過程中預覽終端的能力適配情況(CPU/內存/外設/軟件資源等)。
- 支持根據用戶程序與軟件平臺的兼容性來調度用戶呈現。
統一OS,彈性部署
OpenHarmony通過組件化和組件彈性化等設計方法,做到硬件資源的可大可小,在多種終端設備間,按需彈性部署,全面覆蓋了ARM、RISC-V、x86等各種CPU,從百KiB到GiB級別的RAM。
02. hdc簡介
hdc(OpenHarmony Device Connector)是 OpenHarmony 為開發人員提供的用于調試的命令行工具,通過該工具可以在Windows/Linux/MacOS等系統上與開發機或者模擬器進行交互。
03. hdc獲取
hdc 工具獲取方式:
通過OpenHarmony sdk獲取,hdc在sdk的toolchains目錄下。
使用舉例:
下面以windows側使用方式舉例:
獲取windows的sdk,將hdc.exe放到磁盤某個位置即可使用。
注意事項
- 使用hdc,如果出現異常,可以嘗試通過hdc kill命令殺掉hdc服務,或者通過hdc start -r命令重啟服務進程進行解決。
- 如果出現hdc list targets獲取不到設備信息,通過任務管理器查看是否有hdc進程存在,如果進程存在,可以通過殺掉該進程進行解決。
04. option相關的命令
option涉及以下命令:
- -h/help -v/version 用于顯示hdc相關的幫助、版本信息。
命令說明
返回值 | 返回值說明 |
---|---|
返回對應信息 | 幫助或者版本信息 |
示例
# 查看幫助信息
D:\tools>hdc -hD:\tools>hdc help# 查看版本信息
D:\tools>hdc -v
Ver: 1.1.1lD:\tools>hdc version
Ver: 1.1.1l
- -l 0-5 用于指定運行時日志等級,默認為LOG_INFO。
命令說明
參數 | 參數說明 |
---|---|
0 | LOG_OFF |
1 | LOG_FATAL |
2 | LOG_WARN |
3 | LOG_INFO |
4 | LOG_DEBUG |
5 | LOG_ALL |
示例
D:\tools>hdc -l5 start
[D][2025-03-08 19:14:13.154][1228][channel.cpp:341] Mallocchannel:564292774
[D][2025-03-08 19:14:13.155][1228][base.cpp:761] File "HDCServer" locked. proc already exit!!![D][2025-03-08 19:14:13.156][1228][channel.cpp:424] Begin to free channel, channelid:564292774
[D][2025-03-08 19:14:13.156][1228][main.cpp:346] !!!!!!!!!Main finish mainD:\tools>
- -t key 用于連接指定設備標識為key的設備。
命令說明
參數 | 參數說明 |
---|---|
key | 為 IP地址:port 格式,或者USB序列號 |
返回值 | 返回值說明 |
①error: device ‘***’ not found ②Nothing to do… | ①設備不存在 ②附加的命令不存在 |
示例
該option需要與具體的操作命令搭配使用,下面以shell命令舉例:
hdc list targets (獲取設備信息)hdc -t key shell (-t后面添加的_key_ 需要替換為上面查詢的設備信息)D:\tools>hdc list targets
2f011130375330303010b6204718ab00D:\tools>hdc -t 2f011130375330303010b6204718ab00 shell
#
說明
一臺開發機可支持多個設備連接,每個設備有其唯一的設備標識,如果通過網絡與設備連接,其標識為IP地址:port格式,如果通過USB連接則標識為設備sn號。該命令需要跟隨具體操作命令。
- checkserver 用于獲取client-server版本。
命令說明
返回值 | 返回值說明 |
---|---|
Client version: server version: | client-server版本號 |
示例
D:\tools>hdc checkserver
05. 查詢設備列表的命令
查詢設備列表涉及以下命令:
list targets[-v]
顯示所有已經連接的目標設備列表
表5 命令說明
參數 | 參數說明 |
---|---|
-v | 添加-v選項,則會打印設備詳細信息 |
返回值 | 返回值說明 |
①返回設備信息 ②[Empty] | ①已經連接的設備列表信息 ②沒有查詢到設備信息 |
示例
D:\tools>hdc list targets
2f011130375330303010b6204718ab00D:\tools>hdc list targets -v
2f011130375330303010b6204718ab00 USB Connected localhost
COM1 UART Ready
COM3 UART Ready
COM4 UART ReadyD:\tools>
06. 服務進程相關命令
服務進程涉及以下命令:
-
target mount 以讀寫模式掛載系統分區。
表6 命令說明
參數 參數說明 無 無 返回值 返回值說明 ①Mount finish
②返回具體信息①成功情況下返回的信息
②失敗情況下的具體信息
示例
D:\tools>hdc target mount
Mount finish
- target boot 設備重啟。
示例
D:\tools>hdc target boot
- smode [-r] 授予后臺服務進程root權限, 使用-r參數取消授權。
示例
D:\tools>hdc smodeD:\tools>
D:\tools>hdc smode -r
- kill [-r] 終止服務進程。
命令說明
參數 | 參數說明 |
---|---|
-r | 觸發服務重啟 |
返回值 | 返回值說明 |
①Kill server finish ②返回具體信息 | ①成功情況下返回的信息 ②失敗情況下的具體信息 |
示例
D:\tools>hdc kill
Kill server finishD:\tools>
- start [-r] 啟動服務進程。
命令說明
參數 | 參數說明 |
---|---|
-r | 如果服務進程已經啟動,-r選項會觸發服務進程重新啟動 |
返回值 | 返回值說明 |
無 | 無 |
示例
D:\tools>hdc startD:\tools>
07. 網絡相關的命令
網絡部分涉及以下命令:
- tconn host[:port][-remove] 通過【ip地址:端口號】來指定連接的設備
命令說明
參數 | 參數說明 |
---|---|
host[:port] | 為IP地址:port格式 |
-remove | 表示斷開與指定設備的連接 |
返回值 | 返回值說明 |
①返回具體信息 ②無 | ①失敗情況下的具體信息 ②成功情況下無返回值 |
示例
D:\tools>hdc tconn 192.168.0.100:8710
- tmode usb 執行后設備端對應daemon進程重啟,并首先選用USB連接方式。
命令說明
參數 | 參數說明 |
---|---|
無 | 無 |
返回值 | 返回值說明 |
①返回具體信息 ②無 | ①失敗情況下的具體信息 ②成功情況下無返回值 |
示例
hdc tmode usb
- tmode port port-number 執行后設備端對應daemon進程重啟,并優先使用網絡方式連接設備,如果連接設備失敗,再選擇USB連接。
命令說明
參數 | 參數說明 |
---|---|
port-number | listen連接的網絡端口號 |
返回值 | 返回值說明 |
①返回具體信息 ②無 | ①失敗情況下的具體信息 ②成功情況下無返回值 |
示例
hdc tmode port 8710
說明
執行完畢后,遠端daemon將會退出并重啟,默認啟用TCP連接,如果不加上listen端口則listen隨機端口。
- fport localnode remotenode 端口轉發,指定 主機端口 轉發數據到 設備側端口。
示例
hdc fport tcp:1234 tcp:1080
- rport remotenode localnode 端口轉發,指定 設備側端口 轉發數據到 主機端口。
示例
hdc rport tcp:2080 tcp:2345
- fport ls 列出全部轉發端口轉發任務。
命令說明
參數 | 參數說明 |
---|---|
無 | 無 |
返回值 | 返回值說明 |
‘tcp:1234 tcp:1080’ [Forward] | 正向端口轉發任務 |
‘tcp:2080 tcp:2345’ [Reverse] | 反向端口轉發任務 |
示例
hdc fport ls
- fport rm 刪除指定端口轉發任務。
示例
hdc fport rm tcp:1234 tcp:1080
08. 文件相關的命令
文件部分涉及以下命令:
- file send local remote 發送文件至遠端設備。
命令說明
參數 | 參數說明 |
---|---|
local | 本地待發送文件路徑 |
remote | 遠程待接收文件路徑 |
返回值 | 返回值說明 |
①返回具體信息 ②返回傳輸結果 | ①失敗情況下的具體信息 ②成功傳輸的結果信息 |
示例
D:\tools>hdc file send D:\tools/SN.txt /data/local/tmp/SN.txt
FileTransfer finish, Size:22, File count = 1, time:31ms rate:0.71kB/sD:\tools>
- file recv [-a] remote local 從遠端設備接收文件至本地。
命令說明
參數 | 參數說明 |
---|---|
-a | 文件保留時間戳模式 |
local | 本地待接收文件路徑 |
remote | 遠程待發送文件路徑 |
返回值 | 返回值說明 |
①返回具體信息 ②無 | ①失敗情況下的具體信息 ②成功情況下無返回值 |
示例
D:\tools>hdc file recv /data/local/tmp/SN.txt ./a.txt
FileTransfer finish, Size:22 time:3ms rate:7.33kB/s
09. 應用相關的命令
應用部分涉及以下命令:
- install [-r/-d/-g] package 安裝OpenHarmony APP package。
命令說明
參數 | 參數說明 |
---|---|
package | OpenHarmony應用安裝包文件名 |
-r | 替換已存在應用 |
-d | 允許降級安裝 |
-g | 應用動態授權 |
返回值 | 返回值說明 |
①返回具體信息 ②無 | ①失敗情況下的具體信息 ②成功情況下無返回值 |
示例
hdc install hwadmin.hap
- uninstall [-k] package 卸載OpenHarmony應用。
命令說明
參數 | 參數說明 |
---|---|
package | OpenHarmony應用安裝包 |
-k | 保留/data/cache |
返回值 | 返回值說明 |
①返回具體信息 ②無 | ①失敗情況下的具體信息 ②成功情況下無返回值 |
示例
hdc uninstall package
10. 調試相關的命令
調試涉及以下命令:
- hilog 支持抓取log信息。
命令說明
參數 | 參數說明 |
---|---|
無 | 無 |
返回值 | 返回值說明 |
返回具體信息 | 抓取的日志信息 |
抓取hilog日志:
hdc hilog
清理hilog緩存日志:
hdc shell "hilog -r"
- shell [command] 遠程執行命令或進入交互命令環境。
命令說明
參數 | 參數說明 |
---|---|
command | 需要執行的單次命令 |
返回值 | 返回值說明 |
返回具體信息 | shell后面執行命令的結果信息 |
示例
hdc shell
- jpid 獲取可調試進程列表。
示例
D:\tools>hdc jpid
1037
1061
1105
1117
1260
1653
11. 常見問題
11.1 hdc連接不到設備
- 現象描述 執行 "hdc list targets"命令后結果為:[Empty]
- 解決方法
- 設備沒有被識別: 在設備管理器中查看是否有hdc設備,在通用串行總線設備中會有“HDC Device”信息。如果沒有,hdc無法連接。此時需要斷開并重聯PC和OpenHarmony設備之間的USB連接,或者燒寫最新的鏡像。
- hdc工作異常: 可以執行"hdc kill"或者"hdc start -r"殺掉hdc服務或者重啟hdc服務,然后再執行hdc list targets查看是否已經可以獲取設備信息。
- hdc與設備不匹配: 如果設備燒寫的是最新鏡像,hdc也需要使用最新版本。
11.2 hdc運行不了
- 現象描述 點擊hdc.exe文件無法運行。
- 解決方法
- 運行環境異常: linux版本建議ubuntu 18.04以上 64位,其他相近版本也可;libc++.so引用錯誤請使用ldd/readelf等命令檢查庫引用 windows版本建議windows10 64位,如果低版本windows winusb庫缺失,請使用zadig更新庫。對于復合設備,需要使用zadig工具安裝libusb-win32驅動。
- 如何運行hdc.exe: hdc.exe不需要安裝,直接放到磁盤上就能使用,也可以添加到環境變量中。通過打開cmd執行hdc命令直接使用。
11.3 hdc client如何遠程訪問hdc server
-
使用場景
本地client指定遠程server上的設備,執行hdc命令。
-
連接步驟
-
關閉本地sever:
hdc kill
-
-s [ip:]port -m
啟動遠程server:
hdc -s severIP:8710 -m
-
-s [ip:]port command
指定server執行指令:
hdc -s severIP:8710 list targets
-