上一篇我們成功將 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 舉例:
.build 文件舉例:
.gn 文件文件舉例:
定制部分可以先不做,先把編譯需要的文件補充完整,并修改替換掉必要的部分:
hihope--->xiaomi rk3568--->sagit(soc目錄下是rk3568--->msm8998) rockchip--->qualcomm修改完成之后執(zhí)行編譯:
./build.sh--product-namesagit--ccache
修改時會不斷有修改漏的或者錯的地方,沒有經(jīng)驗的話可能會花比較長的時間,新手需要注意,成功的標(biāo)志是編譯完成并顯示 build successful。
OH編譯框架定制
①vendor 部分的定制修改
OH 編譯的起點是從 vendor 下的 config.json 開始的,我們首先進(jìn)行這個配置文件的修改,首先加密相關(guān)的這兩個選項關(guān)掉,降低移植難度。
ril 蜂窩網(wǎng)絡(luò)相關(guān),xiaomi6 沒有驅(qū)動進(jìn)行使能,去掉,新增 graphic 配置,覆蓋掉 rich.json 繼承過來的配置,配置關(guān)閉 gpu 渲染。
ab 分區(qū)啟動不適配,設(shè)置成 false:
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)?,用來輔助移植。
定制 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 版本。
克隆代碼到 kernel 目錄下:
gitclonehttps://gitlab.com/msm8998-mainline/linux.git-bmainline/6.0linux-sagit修改定制自己內(nèi)核編譯的一些信息,完整代碼參考樹莓派移植 board 倉。
定制 ramdisk:把上一篇解包得到的固件放到源碼目錄中。
新建 BUILD.gn,每個文件都寫一個配置:
四個文件寫完配置之后放到一個分組里:
對應(yīng)到上層目錄的 BUILD.gn:
定制分區(qū)配置:根據(jù)上一篇我們獲取到的分區(qū)信息,修改分區(qū)配置,另外 rk3568 的 data 分區(qū)采用 f2fs 格式,我們采用 ext4 格式。
所以
定制 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 就可以顯示開機了。
display 源碼是采用 OH 官方的示例,源代碼在: 直接復(fù)制到 qualcomm/msm8998/hardware 下并改名成 display。
修改 drm_display.cpp 文件:修改 drm 驅(qū)動名稱為【msm】。
驅(qū)動名新手可能怎么找可能會比較懵,可以進(jìn)入內(nèi)核源碼目錄下的 driver/gpu/drm/ 對應(yīng)的 gpu,找到有 xxxdrv.c 的文件,找到 drm_driver 結(jié)構(gòu)體,找到 name 屬性。
樹莓派的 gpu 是 vc4:
高通的是 msm:
修改 drm_allocator.cpp 文件:注釋掉海思的私有函數(shù),我們不需要,順便刪掉 hisilicon_drm.h 的引用和 hisilicon_drm.h 文件。
添加 display_gfx.c 文件:內(nèi)部不用實現(xiàn),這部分是 2d 圖形加速適配的,先不適配。
修改 BUILD.gn 文件:修改基本原則是把 def 去掉,include 改為自己的目錄。
display_device 需要部分修改適配,根據(jù)樹莓派移植經(jīng)驗。
添加 display_gfx 的動態(tài)庫編譯配置:
display 這部分的移植都可以參照我之前移植樹莓派的教程,源碼也開源的,這里只是部分講解,完整代碼請去代碼倉查看。 至此 OH 編譯框架適配說明完畢,執(zhí)行編譯命令,確保能夠編譯成功?。?! 下一篇將進(jìn)行 Linux 內(nèi)核的定制適配和 boot.img 打包,敬請期待!
審核編輯:湯梓紅
-
移植
+關(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)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論