0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

鴻蒙富設(shè)備移植指南:編譯框架適配

OpenHarmony技術(shù)社區(qū) ? 來源:OST開源開發(fā)者 ? 2023-02-08 09:15 ? 次閱讀

上一篇我們成功將 OpenHarmony 移植到小米 6 手機上,今天給大家講解 OpenHarmony 編譯部分。

OH 編譯框架適配

特別說明:OH 3.2 beta4 我移植過多款設(shè)備,輸入子系統(tǒng)會開機崩潰,還沒找到具體原因。

移植的時候 OH 3.2 beta5 還沒出來了,所以小米 6 先以樹莓派移植時比較順利的 OH 3.2 beta3 版本進(jìn)行移植,勇于嘗試的同學(xué)可以基于最新的 OH3.2 beta5 版本。

修改編譯框架需要 GN 相關(guān)的知識,同時社區(qū)也有豐富的文章講解鴻蒙的編譯框架,有疑問時可以先查看社區(qū)文章進(jìn)行學(xué)習(xí)。

OH 編譯框架適配新設(shè)備時,在 3.2 版本的前提下,需要新增 3 個文件夾,以下為我適配小米 6 的目錄:

/device/board/xiaomi/sagit

/device/soc/qualcomm/

/vendor/xiaomi/sagit

基本配置思路是參考官方開發(fā)板,復(fù)制 hihope 的 rk3568,替換成自己的,比如小米 6 的代號是 sagit,需要把 rk3568 替換成 sagit。

以下進(jìn)行簡單舉例,詳細(xì)移植方法之前有發(fā)過移植適配的文章,可以先看,別的大神也都發(fā)過,編譯框架的移植適配套路都差不多,在此不再重復(fù)講解,文章中的代碼是 beta1 的,查看代碼倉時請切換到 beta3 分支。

https://ost.51cto.com/posts/14280

修改配置文件:config.json;修改 GN 編譯文件:各級目錄下的 x.gn,x.gni,x.build。

config.json 舉例:

0238dd6c-a735-11ed-bfe3-dac502259ad0.png

.build 文件舉例:

024a3030-a735-11ed-bfe3-dac502259ad0.png

.gn 文件文件舉例:

0259f628-a735-11ed-bfe3-dac502259ad0.png

定制部分可以先不做,先把編譯需要的文件補充完整,并修改替換掉必要的部分:

hihope--->xiaomi

rk3568--->sagit(soc目錄下是rk3568--->msm8998)

rockchip--->qualcomm
修改完成之后執(zhí)行編譯:
./build.sh--product-namesagit--ccache

修改時會不斷有修改漏的或者錯的地方,沒有經(jīng)驗的話可能會花比較長的時間,新手需要注意,成功的標(biāo)志是編譯完成并顯示 build successful。

02684e30-a735-11ed-bfe3-dac502259ad0.png

OH編譯框架定制

①vendor 部分的定制修改

OH 編譯的起點是從 vendor 下的 config.json 開始的,我們首先進(jìn)行這個配置文件的修改,首先加密相關(guān)的這兩個選項關(guān)掉,降低移植難度。

027a9806-a735-11ed-bfe3-dac502259ad0.png

ril 蜂窩網(wǎng)絡(luò)相關(guān),xiaomi6 沒有驅(qū)動進(jìn)行使能,去掉,新增 graphic 配置,覆蓋掉 rich.json 繼承過來的配置,配置關(guān)閉 gpu 渲染。

028f7762-a735-11ed-bfe3-dac502259ad0.png

ab 分區(qū)啟動不適配,設(shè)置成 false:

02b14b76-a735-11ed-bfe3-dac502259ad0.png

config.json 可以在 subsystems 內(nèi)配置完所有組件,但是那樣組件列表會很長。 不同的設(shè)備配置會有大量重復(fù)的配置,所以大部分重復(fù)的組件都添加到了 rich.json 這個文件中,源碼在 productdefine/common/inherit 下,方便開發(fā)者繼承引用。 如果開發(fā)者需要定制某項組件的屬性,只要像我一樣在產(chǎn)品的 config.json 中再聲明一遍即可覆蓋,其他文件沒有特別需要定制修改的地方,這里不再做講解。

②board 部分的定制修改

在 board 中,我刪掉了 bootanimation,updater,定制了 kernel,增加了 frimware,test。 刪掉 bootanimation 是因為這個是廠商根據(jù) OH 動畫生成工具生成的動畫,我不需要定制開機畫面所以去掉了 bootanimation,updater 也是一樣,我不需要更新分區(qū),所以不需要配置也刪掉了。 我也定制了 kernel 的編譯方式,因為 OH 官方的編譯方式是從 board 倉中統(tǒng)一轉(zhuǎn)到 kernel/linux/build 下,調(diào)用里面的編譯腳本,采用官方 OH 內(nèi)核+soc 廠商 patch+config 的形式進(jìn)行編譯。 我是采用第三方內(nèi)核的方式進(jìn)行移植,所以不適用官方的編譯方式,需要自己定制編譯腳本。

增加 frimware 是為了在 ramdisk 中添加驅(qū)動固件,test 是自己找的一些測試?yán)?,用來輔助移植。

02c3a6b8-a735-11ed-bfe3-dac502259ad0.png

定制 kernel 編譯方式,官方的編譯方式可以概括為:

復(fù)制 kernel 源碼到 out/KERNEL_OBJ/kernel/src_tmp 目錄下

打上 hdf.patch(使內(nèi)核支持 hdf 驅(qū)動框架)

打上 soc.patch(使內(nèi)核支持對應(yīng)的芯片平臺)

復(fù)制 config(復(fù)制對應(yīng)芯片平臺的內(nèi)核配置到 out 下的 kernel 目錄)

編譯內(nèi)核,設(shè)備樹

我是參考了官方的 build 方式,精簡不用的判斷,定制了自己的編譯方式,概括為:

復(fù)制我定制的 kernel 源碼到 out/KERNEL_OBJ/kernel/src_tmp 目錄下

打上 hdf.patch(使內(nèi)核支持 hdf 驅(qū)動框架)

復(fù)制 config(修改復(fù)制為放置在我 board 倉下的 config)

編譯內(nèi)核,設(shè)備樹

內(nèi)核源碼我是采用了 pmOS 的 msm8998 的主線代碼:

QualcommSnapdragon835Mainline/Linux·GitLab
https://gitlab.com/msm8998-mainline/linux
根據(jù) pmOS 移植教程我找到了 xiaomi6 的內(nèi)核編譯配置,可以看到是采用 Linux 6.0 版本。

02e4f3b8-a735-11ed-bfe3-dac502259ad0.png

克隆代碼到 kernel 目錄下:

gitclonehttps://gitlab.com/msm8998-mainline/linux.git-bmainline/6.0linux-sagit
03171992-a735-11ed-bfe3-dac502259ad0.png 修改定制自己內(nèi)核編譯的一些信息,完整代碼參考樹莓派移植 board 倉。 0326b154-a735-11ed-bfe3-dac502259ad0.png

定制 ramdisk:把上一篇解包得到的固件放到源碼目錄中。

033342b6-a735-11ed-bfe3-dac502259ad0.png

新建 BUILD.gn,每個文件都寫一個配置:

0345ef92-a735-11ed-bfe3-dac502259ad0.png

四個文件寫完配置之后放到一個分組里:

035e8340-a735-11ed-bfe3-dac502259ad0.png

對應(yīng)到上層目錄的 BUILD.gn:

036d6f2c-a735-11ed-bfe3-dac502259ad0.png

定制分區(qū)配置:根據(jù)上一篇我們獲取到的分區(qū)信息,修改分區(qū)配置,另外 rk3568 的 data 分區(qū)采用 f2fs 格式,我們采用 ext4 格式。

所以采用的是舊的格式,可以參考 fstab.A311D 的配置。

0381e1aa-a735-11ed-bfe3-dac502259ad0.png

定制 test:這個目錄下是我自己添加的輔助移植測試顯示基本功能的例子,來源自【何小龍】的 drm 系列文章,用于學(xué)習(xí) drm 和測試顯示屏驅(qū)動,大家感興趣的話可以去看看何小龍的文章。

不懂如何添加到 OH 編譯框架的話可以去我開源的樹莓派 board 倉參考:

https://gitee.com/diemit/device_board_raspberrypi/tree/OpenHarmony-3.2-Beta4/rpi4/test

③soc 部分的定制修改

soc 目錄是為了適配各種硬件的比如顯示,GPU,WIFI 等待,這里我只定制了 display,目標(biāo)不要太大,使用 cpu 渲染適配 display 就可以顯示開機了。

039d8180-a735-11ed-bfe3-dac502259ad0.png display 源碼是采用 OH 官方的示例,源代碼在: 03b18e1e-a735-11ed-bfe3-dac502259ad0.png 直接復(fù)制到 qualcomm/msm8998/hardware 下并改名成 display。

修改 drm_display.cpp 文件:修改 drm 驅(qū)動名稱為【msm】。

03c6f506-a735-11ed-bfe3-dac502259ad0.png

驅(qū)動名新手可能怎么找可能會比較懵,可以進(jìn)入內(nèi)核源碼目錄下的 driver/gpu/drm/ 對應(yīng)的 gpu,找到有 xxxdrv.c 的文件,找到 drm_driver 結(jié)構(gòu)體,找到 name 屬性。

04079462-a735-11ed-bfe3-dac502259ad0.png

樹莓派的 gpu 是 vc4: 042246c2-a735-11ed-bfe3-dac502259ad0.png

高通的是 msm:

042e503e-a735-11ed-bfe3-dac502259ad0.png

修改 drm_allocator.cpp 文件:注釋掉海思的私有函數(shù),我們不需要,順便刪掉 hisilicon_drm.h 的引用和 hisilicon_drm.h 文件。

044a97c6-a735-11ed-bfe3-dac502259ad0.png

045c11f4-a735-11ed-bfe3-dac502259ad0.png

添加 display_gfx.c 文件:內(nèi)部不用實現(xiàn),這部分是 2d 圖形加速適配的,先不適配。

0466b5b4-a735-11ed-bfe3-dac502259ad0.png

修改 BUILD.gn 文件:修改基本原則是把 def 去掉,include 改為自己的目錄。

0477316e-a735-11ed-bfe3-dac502259ad0.png

display_device 需要部分修改適配,根據(jù)樹莓派移植經(jīng)驗。

049417e8-a735-11ed-bfe3-dac502259ad0.png

添加 display_gfx 的動態(tài)庫編譯配置:

04aa4ec8-a735-11ed-bfe3-dac502259ad0.png

display 這部分的移植都可以參照我之前移植樹莓派的教程,源碼也開源的,這里只是部分講解,完整代碼請去代碼倉查看。 至此 OH 編譯框架適配說明完畢,執(zhí)行編譯命令,確保能夠編譯成功?。?! 下一篇將進(jìn)行 Linux 內(nèi)核的定制適配和 boot.img 打包,敬請期待!

審核編輯:湯梓紅

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 移植
    +關(guān)注

    關(guān)注

    1

    文章

    376

    瀏覽量

    28096
  • 編譯
    +關(guān)注

    關(guān)注

    0

    文章

    648

    瀏覽量

    32774
  • 小米
    +關(guān)注

    關(guān)注

    69

    文章

    14308

    瀏覽量

    143706
  • 鴻蒙
    +關(guān)注

    關(guān)注

    57

    文章

    2302

    瀏覽量

    42687
  • OpenHarmony
    +關(guān)注

    關(guān)注

    25

    文章

    3635

    瀏覽量

    16059

原文標(biāo)題:鴻蒙富設(shè)備移植指南:編譯框架適配

文章出處:【微信號:gh_834c4b3d87fe,微信公眾號:OpenHarmony技術(shù)社區(qū)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    史無前例,移植V8虛擬機到純血鴻蒙系統(tǒng)

    層使用,為保證基于Roma框架開發(fā)的業(yè)務(wù)可以零成本、無縫運行到鴻蒙系統(tǒng),需要將Roma框架適配鴻蒙系統(tǒng)。 Roma
    的頭像 發(fā)表于 09-18 10:28 ?982次閱讀
    史無前例,<b class='flag-5'>移植</b>V8虛擬機到純血<b class='flag-5'>鴻蒙</b>系統(tǒng)

    鴻蒙設(shè)備學(xué)習(xí)菜鳥指南》之 【索引及PDF和工具分享】

    本帖最后由 HonestQiao 于 2020-11-3 14:29 編輯 《鴻蒙設(shè)備學(xué)習(xí)菜鳥指南》之 【目錄索引】本帖為索引貼,各節(jié)的內(nèi)容,將逐步發(fā)布。本菜鳥指南的寫作目的,是
    發(fā)表于 10-30 13:14

    鴻蒙設(shè)備學(xué)習(xí)菜鳥指南》之【八、編譯

    本帖最后由 HonestQiao 于 2020-11-1 19:22 編輯 《鴻蒙設(shè)備學(xué)習(xí)菜鳥指南》之【八、編譯】[目錄索引]根據(jù)我們拿到的板子的不同,不同的代碼,在
    發(fā)表于 11-01 11:44

    《HarmonyOS 2.0源碼框架分析》直播答疑

    鴻蒙編譯框架是怎樣的;如何利用整個編譯框架實現(xiàn)簡單的 MCU 平臺移植,如STM32 ?回答
    發(fā)表于 12-10 22:28

    基于openharmony適配移植的ohos原生UI框架

    項目介紹 項目名稱:XUI 所屬系列:openharmony的第三方組件適配移植 功能:一個簡潔而又優(yōu)雅的ohos原生UI框架,解放你的雙手! 項目移植狀態(tài):主功能完成 調(diào)用差異:無
    發(fā)表于 04-07 09:04 ?1次下載

    基于openharmony適配移植支持無縫換膚的MultipleTheme框架

    項目介紹 項目名稱:MultipleTheme 所屬系列:openharmony的第三方組件適配移植 功能:支持無縫換膚的框架,配合theme和換膚控件框架可以做到無縫切換換膚 項目
    發(fā)表于 04-07 09:14 ?2次下載

    基于openharmony適配移植的全功能Conductor框架

    項目介紹 項目名稱:Conductor 所屬系列:openharmony的第三方組件適配移植 功能:基于component (而非Fraction) 的HAP框架! 項目移植狀態(tài):主功
    發(fā)表于 04-07 10:48 ?1次下載

    基于openharmony適配移植的手勢檢測器框架

    項目介紹 項目名稱:手勢檢測器框架 所屬系列:openharmony的第三方組件適配移植 功能:實現(xiàn)各種手勢檢測功能 項目移植狀態(tài):主功能完成 調(diào)用差異:無 開發(fā)版本:sdk6,Dev
    發(fā)表于 04-08 09:17 ?2次下載

    基于鴻蒙適配移植的開源彈幕解析繪制引擎項目

    項目介紹 項目名稱:開源彈幕解析繪制引擎項目 所屬系列:鴻蒙的第三方組件適配移植 功能:支持顯示、隱藏、顯示、暫停、繼續(xù)、發(fā)送、定時發(fā)送彈幕 項目移植狀態(tài):完成 調(diào)用差異:無 開發(fā)版本
    發(fā)表于 04-11 10:38 ?2次下載

    基于鴻蒙適配移植的廣告圖片輪播控件教程

    項目介紹 項目名稱:廣告圖片輪播控件 所屬系列:鴻蒙的第三方組件適配移植 功能:廣告輪播,循環(huán)輪播 項目移植狀態(tài):主功能 調(diào)用差異:無 開發(fā)版本:sdk5,DevEco Studio2
    發(fā)表于 04-11 10:40 ?2次下載

    鴻蒙三方庫適配指南

    本文以 OpenHarmony-3.2-Beta4 上適配 modbus 編譯動態(tài)庫為例。 獲取三方庫 使用之前要做好代碼溯源,確認(rèn)可用的版本,開源許可和發(fā)布方式等。 通過正確的路徑獲取源碼,可以
    的頭像 發(fā)表于 02-14 09:33 ?3290次閱讀

    鴻蒙設(shè)備移植:SoC適配

    OpenHarmony 系統(tǒng)移植最核心的步驟是內(nèi)核的移植,內(nèi)核的穩(wěn)定是一切子系統(tǒng)穩(wěn)定的基礎(chǔ),上一篇我們講述了內(nèi)核啟動原理,以及 vendor、board 的開發(fā)配置,本文將介紹 SoC 層級的移植
    的頭像 發(fā)表于 05-22 10:49 ?1345次閱讀
    <b class='flag-5'>鴻蒙</b>瘦<b class='flag-5'>設(shè)備</b><b class='flag-5'>移植</b>:SoC<b class='flag-5'>適配</b>

    OpenHarmony設(shè)備移植指南(1)導(dǎo)言

    OpenHarmony設(shè)備移植指南導(dǎo)言。在研究學(xué)習(xí)OpenHamony移植的路上,文檔資料的缺失讓我倍感痛苦,如今
    的頭像 發(fā)表于 02-06 14:04 ?1229次閱讀
    OpenHarmony<b class='flag-5'>富</b><b class='flag-5'>設(shè)備</b><b class='flag-5'>移植</b><b class='flag-5'>指南</b>(1)導(dǎo)言

    OpenHarmony設(shè)備移植指南(2)從postmarketOS獲取移植資源

    OpenHarmony設(shè)備移植指南(2)從postmarketOS獲取移植資源
    的頭像 發(fā)表于 02-08 10:58 ?2184次閱讀
    OpenHarmony<b class='flag-5'>富</b><b class='flag-5'>設(shè)備</b><b class='flag-5'>移植</b><b class='flag-5'>指南</b>(2)從postmarketOS獲取<b class='flag-5'>移植</b>資源

    使用 Taro 開發(fā)鴻蒙原生應(yīng)用 —— 快速上手,鴻蒙應(yīng)用開發(fā)指南

    鴻蒙原生應(yīng)用。 在 《使用 Taro 開發(fā)鴻蒙原生應(yīng)用》 系列文章中,我們已經(jīng)介紹了 鴻蒙的基本概念 和 Taro 適配鴻蒙的原理。本文作
    的頭像 發(fā)表于 02-02 16:09 ?803次閱讀
    使用 Taro 開發(fā)<b class='flag-5'>鴻蒙</b>原生應(yīng)用 —— 快速上手,<b class='flag-5'>鴻蒙</b>應(yīng)用開發(fā)<b class='flag-5'>指南</b>