一加6T成功刷入OpenHarmony

51cto 發佈 2024-03-05T05:42:55.973460+00:00

作者:westinyang最近小米 6 和一加 6T 的 OpenHarmony 移植,可以說是振奮人心,不禁感慨到 OH 終於有廉價的開發設備可用了。

作者: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/
關鍵字: