OpenHarmony 2.0 如何移植 RK3399
概述
本教程介紹 OpenAtom OpenHarmony(以下簡稱“OpenHarmony”) L2如何快速移植 rk3288/RK3326/RK3399/RK3566 等芯片, 讓開發者能夠進一步開發和適配 Rockchip 平臺。
各芯片系統支持狀態

獲取OpenHarmony L2官網源碼
參考 OpenHarmony官網 獲取最新 master 分支代碼
- repo init -u https://gitee.com/openharmony/manifest.git -b master --no-repo-verify
- repo sync -c
- repo forall -c 'git lfs pull'
獲取Rockchip官方Linux SDK源碼
Rockchip Linux SDK 下載命令如下:

如果您碰到無權限下載代碼的問題,可訪問:
https://gitee.com/caesar-wang/openharmony-rockchip/issues/I45DEB
編譯說明
OpenHarmony L2 編譯
- bash build/prebuilts_download.sh
- ./build.sh --product-name Hi3516DV300
Rockchip Linux 編譯
- ./build.sh lunch (選擇對應的芯片)
- ./build.sh
RK3399 移植
分區掛載的處理
- sudo vi init.cfg
- "mount ext4 /dev/block/platform/fe330000.sdhci/by-name/oem /vendor wait rdonly barrier=1",
- "mount ext4 /dev/block/platform/fe330000.sdhci/by-name/userdata /data wait nosuid nodev noatime barrier=1,data=ordered,noauto_da_alloc"
顯示問題
vsync, 請 git apply 打上如下 patch
- patches/
- └── foundation
- └── graphic
- └── standard
- └── vsync.patch
- base commit:
- commit 3301ec6b2669ff1c7014ecbc320dcb41aab16734 (HEAD)
- Merge: 8186179 1441a80
- Author: openharmony_ci <7387629+openharmony_ci@user.noreply.gitee.com>
- Date: Thu Jul 29 08:16:36 2021 +0000
- !16 modify for musl compile
- Merge pull request !16 from huanglei/modify-for-musl-compile
Kernel適配
a. 找到對應設備
- console:/ $ cat /proc/bus/input/devices
- 找到對應設備,比如觸摸gsl3673, usb對應的handler event
- I: Bus=0018 Vendor=0000 Product=0000 Version=0000
- N: Name4="gsl3673"
- P: Phys=
- S: Sysfs=/de.vices/platform/ff110000.i2c/i2c-1/91-0040/input/input1
- U: Uniq=
- H: 7 Handlers=event1 cpufreq dmcfreq
- B: PROP=2
- B: EV=10000b
- B: KEY=0
- B: ABS=2658000 0
b. 找到對應設備. 上面觸摸屏是 event1
- console:/ $ cat /sys/class/input/event1/dev
- 13:65
- 得到從設備號是13:65
c. 主設備號的文件 data/udev/data/看下有沒有對應,沒有的話,copy 一份修改一下比如 tp 修改如下:
- console:/ # cat data/udev/data/c13\:65
- I:1104248553
- E:ID_INPUT=1
- E:ID_INPUT_TOUCHSCREEN=1
調試工具
- tools/
- ├── busybox
- └── strace
添加工具方便調試,hilog 也可以調試
系統分區說明
鏡像的分區如下
- ├── MiniLoaderAll.bin
- ├── boot.img
- ├── misc.img
- ├── oem.img
- ├── parameter.txt
- ├── recovery.img
- ├── rootfs.img
- ├── trust.img
- ├── uboot.img
- └── userdata.img
其中 rootfs.img 對應 OpenHarmony L2 編譯出來的 system.imgoem.img 對應 OpenHarmony L2 編譯出來的 vendor.imguserdata.img 對應 OpenHarmony L2 編譯出來的 userdata.img
默認分區說明 ( 下面是 RK3399 IND 分區參考)

uboot 分區:供 uboot 編譯出來的 uboot.img。
trust 分區:供 uboot 編譯出來的 trust.img。
misc 分區:供 misc.img,給 recovery 使用。
boot 分區:供 kernel 編譯出來的 boot.img。
recovery 分區:供 recovery 編譯出的 recovery.img。
backup 分區:預留,暫時沒有用。
oem 分區:供 OHOS 編出來的vendor.img。掛載在 /vendor目錄。
rootfs 分區:供 OHOS 編出來的 system.img。
userdata 分區:供 OHOS 編出來的 userdata.img,掛載在 /data 目錄下。
RK3399EVBIND 固件
預編好的 Openharmoy L2 固件,適配 RK3399 EVB 行業版開發板, 分享如下:
RK3399 EVB IND行業版-OHOS L2 提取碼: xrry
刷機說明
RK3399 挖掘機接口分布圖如下:

RK3399 IND 行業板接口分布圖如下:

Windows 刷機說明
SDK 提供 Windows 燒寫工具(工具版本需要 V2.84 或以上),工具位于工程根目錄:
- RK3399_EVB_IND-OHOS_L2-20210810/RKDevTool_Release
如下圖,編譯生成相應的固件后,設備燒寫需要進入 MASKROM 或 BootROM 燒寫模式,連接好 USB 下載線后,按住按鍵“MASKROM”不放并按下復位鍵“RST”后松手,就能進入 MASKROM 模式,加載編譯生成固件的相應路徑后,點擊“執行”進行燒寫,也可以按 “recovery" 按鍵不放并按下復位鍵 “RST” 后松手進入 loader 模式進行燒寫,下面是 MASKROM 模式的分區偏移及燒寫文件。(注意:Windows PC 需要在管理員權限運行工具才可執行)

注:燒寫前,需安裝最新 USB 驅動,驅動詳見:
- tools/DriverAssitant_v5.11.zip
Linux 刷機說明
Linux 下的燒寫工具位于 tools 目錄下(Linux_Upgrade_Tool 工具版本需要 V1.65 或以上),請確認你的板子連接到 MASKROM/loader rockusb。比如編譯生成的固件在 rockdev 目錄下,升級命令如下:
- sudo ./upgrade_tool ul rockdev/MiniLoaderAll.bin
- sudo ./upgrade_tool di -p rockdev/parameter.txt
- sudo ./upgrade_tool di -u rockdev/uboot.img
- sudo ./upgrade_tool di -t rockdev/trust.img
- sudo ./upgrade_tool di -misc rockdev/misc.img
- sudo ./upgrade_tool di -b rockdev/boot.img
- sudo ./upgrade_tool di -recovery rockdev/recovery.img
- sudo ./upgrade_tool di -oem rockdev/oem.img
- sudo ./upgrade_tool di -rootfs rocdev/rootfs.img
- sudo ./upgrade_tool di -userdata rockdev/userdata.img
- sudo ./upgrade_tool rd
或升級打包后的完整固件:
- sudo ./upgrade_tool uf rockdev/update.img
或在根目錄,機器在 MASKROM 狀態運行如下升級:
- ./rkflash.sh
運行效果


FAQ
目前發現存在的一些問題:
1.Launcher顯示顏色反調,需要要求內核format更改位DRM_FORMAT_XBGR8888,實際是 weston 或顯示框架上的問題;
2.vsync 問題,如上顯示補丁 vsync.patch,主要還是框架上的不兼容;
3.OS 對 UI 或框架對顯示寬需要 16 字節對齊,如果遇到寬不是 16 對齊的分辨率,就會遇到顯示異常。
TODO
1.適配 Rockchip 的 device 目錄,添加 SOC 內核構建的子系統;
2.使用 OHOS 自帶的 kernel,來適配 Rockchip 平臺;
3.HDF 驅動的移植, LCD、觸摸屏,WiFi 等外設的適配;
4.Rockchip 音視頻多媒體,圖形加速的適配;
5.Weston 性能、功能優化的適配。