作者:westinyang
最近小米 6 和一加 6T 的 OpenHarmony 移植,可以說是振奮人心,不禁感慨到 OH 終於有廉價的開發設備可用了。
我一直是比較關注 OpenHarmony 的發展和應用開發的相關技術,雖然對系統設備開發並不了解,但還是想著漸進式的嘗試和學習下。
①搭建編譯環境編譯官方 rk3568(已完成)。
②基於 Wathinst 的開源移植倉庫,編譯一加 6T 的 OH 系統,熟悉過程解鎖一些知識盲區(已完成)。
https://gitee.com/wathinst
③嘗試移植其他更廉價的安卓設備(待完成)。
④除此之外,我還會在我的「開源組織 ohos-dev」提交我個人學習開發的應用和相關工具。
https://gitee.com/ohos-dev
編譯所使用的一加 6T 開源移植倉庫是由 @Wathinst 完成的。非常感謝 @Wathinst 的耐心指點,我才能順利編譯成功。
https://gitee.com/wathinst
最終效果如下:
個人認為,這篇筆記更適合以下人群閱讀(其實就是我 [手動狗頭]):
- 缺乏系統移植經驗或者沒有
- 想基於現有的開源移植倉編譯 OpenHarmony 作為學習的開端
- 儘快用上設備做應用開發真機調試,為 OpenHarmony 應用生態做貢獻
設備和源碼信息概述
如下:
- OnePlus 6T (fajita)
- OpenHarmony master 分支 2023-03-15
環境搭建和獲取源碼
官方文檔,看這個就 OK:
https://docs.openharmony.cn/pages/v3.2Beta/zh-cn/device-dev/quick-start/quickstart-pkg-prepare.md/
我是用虛擬機跑的 Ubuntu18.04,分配的 8c16g,官方 rk3568 首次編譯實測耗時 85 分鐘。
關於環境搭建官方提供了 3 種,IDE、安裝包、Docker,我用的第 2 種方式。
加入開源移植倉庫並同步
作者:https://gitee.com/wathinst
組織:https://gitee.com/ohos_port @Wathinst移植的一加6T開源倉庫
.repo/manifestsipsets/all.xml 追加:
<include name="chipsets/oneplus/fajita.xml" />
新增:
.repo/manifestsipsets/oneplus/fajita.xml
<?xml versinotallow="1.0" encoding="UTF-8"?>
<manifest>
<remote fetch="https://gitee.com/ohos_port/" name="ohos_port" review="https://gitee.com/ohos_port/"/>
<!-- <default remote="ohos_port" revisinotallow="master" sync-j="4" /> -->
<project name="device_board_oneplus" path="device/board/oneplus" remote="ohos_port" revision="master"/>
<project name="device_soc_qualcomm" path="device/soc/qualcomm" remote="ohos_port" revision="master"/>
<project name="vendor_oneplus" path="vendor/oneplus" remote="ohos_port" revision="master"/>
</manifest>
再次同步源碼和編譯:
repo sync
repo forall -c 'git lfs pull'
./build.sh --product-name fajita
編譯成功輸出目錄:
~/ohos/out/fajita/packages/phone/images
修復編譯中出現的代碼錯誤
master 分支問題會多一些,編譯期間根據錯誤日誌不斷分析修正,直至成功(Release 應該沒什麼問題的)。
# err1,2: 作者已經修正,https://gitee.com/ohos_port/device_board_oneplus/issues/I6ND82
# err3: third_party/libdrm/tests/util/pattern.c
// void *mem_base = mem; // @errfix 1
# err4,5: foundation/ability/form_fwk/services/src/form_event_util.cpp
HILOG_INFO("%{public}s formId:%{public}lld", __func__, (long long) formRecord.formId); // @errfix 2
HILOG_INFO("%{public}s formId:%{public}lld", __func__, (long long) formRecord.formId); // @errfix 3
OH 源碼和開源移植的修改記錄
fstab 調整:
# device/board/oneplus/fajita/cfg/fstab.fajita
# /dev/block/sda18 修改為 /dev/block/sda17,因為一加6T的data分區就在這裡,原作者新增分區做雙系統,才這麼配置的
# fstab file.
#<src> <mnt_point> <type> <mnt_flags and options> <fs_mgr_flags>
/dev/block/sda14 /usr ext4 ro,barrier=1 wait,required
/dev/block/sde44 /vendor ext4 ro,barrier=1 wait,required
/dev/block/sda18 /data ext4 nosuid,nodev,noatime,barrier=1,data=ordered,noauto_da_alloc wait,reservedsize=104857600
/dev/block/sda3 /misc none none wait,required
DPI 修正:
# foundation/window/window_manager/resources/config/BUILD.gn
window_manager_dayu210_resource_config = true # line 16,修改為false
install_enable = false # line 44,display_manager_config下面的最後一個else中的改為true
編譯內核和打包 boot.img
sudo apt install abootimg
mkdir ~/oneplus & cd oneplus
git clone https://gitee.com/ohos_port/linux-sdm845-6.2
cd linux-sdm845-6.2
./make_sdm845.sh
./make_bootimg.sh # 我把boot.img輸出目錄INSTALL_DIR改為了/home/ubuntu/