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

??想了解更多關(guān)于開源的內(nèi)容,請訪問:??
開篇引言
安卓設(shè)備的引導(dǎo)需要boot.img鏡像,其中含有內(nèi)核鏡像,設(shè)備樹,boot配置文件,initrd.img根文件系統(tǒng)鏡像,開發(fā)板因為是開發(fā)用途,系統(tǒng)引導(dǎo)基本沒有限制,而成品安卓手機往往有各種限制,我們需要通過刷入postmarketOS進行確認手機是否可以啟動第三方系統(tǒng),從中獲取引導(dǎo)啟動的相關(guān)信息以及文件,并仿照postmarketOS的引導(dǎo)鏡像創(chuàng)建我們自己的引導(dǎo)鏡像。
1、準(zhǔn)備postmarketOS編譯環(huán)境
參照pmbootstrap - postmarketOS 中的 Installation -- From git 準(zhǔn)備編譯環(huán)境
2、執(zhí)行初始化

或者替換使用鏡像源,不然會有網(wǎng)絡(luò)問題,需要替換兩個鏡像源地址,postmarketOS鏡像,和Alpine Linux鏡像。
使用以下命令設(shè)置設(shè)置成清華源進行初始化,也可以根據(jù)鏡像源列表找自己喜歡的設(shè)置。
postmarketOS鏡像源列表:postmarketOS // Official postmarketOS Mirrors。
Alpine Linux鏡像源列表:Mirror health (alpinelinux.org)。
3、編譯安卓格式的刷機包
編譯時間會比較長,中間會提示創(chuàng)建進入手機系統(tǒng)的新密碼。
如果中途出現(xiàn)錯誤,可以重試幾次,仍然不行的話刪除整個work目錄,重新執(zhí)行初始化再編譯刷機包,最終結(jié)果如下:

4、導(dǎo)出刷機包

執(zhí)行以下命令找到刷機包位置。

至此拿到刷機包。

查找資料的時候有參考這篇文章的方案二部分,在此貼出。
手機運行Docker: 從修改內(nèi)核到刷入原生Linux | yzddMr6's Blog。
5、刷入手機驗證并獲取芯片控制器名稱
音量上+電源開機進入twrp(twrp的安裝是搞機必備,網(wǎng)上教程很多,在此不再重復(fù))。
小米(Mi) 6小米(Mi) 6 手機刷 TWRP 方法,刷三方Recovery方法(解決卡米問題)刷機解鎖 (onfix.cn)。
點擊安裝:

點擊刷機包:

確認刷入:

刷機會出現(xiàn)錯誤,不用管。

刷完重啟,等待一段時間直到顯示welcome信息。

輸入用戶名:user,密碼:自己之前設(shè)置的,進入系統(tǒng)。

至此確認手機正常運行Linux系統(tǒng),顯示,觸摸等正常工作。
6、解包獲取移植需要的資料
解包獲取的資料:
bootimg.cfg:boot分區(qū)配置信息,內(nèi)核啟動參數(shù)。
config:默認內(nèi)核編譯配置,后續(xù)適配內(nèi)核在此基礎(chǔ)進行變更。
firmware:啟動加載必須的驅(qū)動固件文件。
右鍵解壓縮pmos-xiaomi-sagit.zip得到pmos-xiaomi-sagit。

同樣使用右鍵解壓縮rootfs.tar.gz得到rootfs,在rootfs/boot文件夾拿到boot.img和內(nèi)核編譯的config配置。

安裝安卓boot打包解包工具:
把boot.img復(fù)制到任意的文件夾,然后使用以下命令解包:
得到boot分區(qū)配置bootimg.cfg。

查看initrd.img文件格式為gzip壓縮文件。

使用gzip解壓,發(fā)現(xiàn)解壓失敗,原因為后綴名不支持,我們使用mv命令復(fù)制initrd.img為initrd.img.gz,然后使用解壓命令就可以成功解壓了,解壓后原來的initrd.img會被解壓出的文件替換掉,這時initrd.img的格式為cpio鏡像文件。

使用cpio解壓initrd.img鏡像。
得到我們需要的boot階段所必須的固件firmware,后面要編譯進OH的ramdisk鏡像中。

7、獲取正常啟動的log
參考上面手機運行docker那篇文章,用usb連接電腦,設(shè)置好驅(qū)動。
打開命令提示符,使用ssh連接Linux,ip是固定的172.16.42.1。

輸入dmesg打印輸出內(nèi)核log,這個是正常的內(nèi)核啟動log,復(fù)制下來保存好以便移植時啟動出錯或者驅(qū)動有問題時方便進行對照。

8、獲取設(shè)備名,分區(qū)信息
連接Linux,輸入以下命令獲取信息。
獲取USB控制器名稱,后面移植hdc連接程序會用到。
獲取存儲控制器名稱,后面配置分區(qū)會用到。
暫時判斷1da4000.ufshc為存儲控制器名稱。

重啟,進入twrp,輸入以下命令進入recovery的shell。

輸入以下命令可以交叉確認1da4000.ufshc為存儲控制器名稱。

獲取分區(qū)信息。



手機上勾選掛載vendor分區(qū)。


確認vendor分區(qū)對應(yīng)到sde42 -> cust。
system分區(qū)因為安裝pmOS的緣故無法掛載,但是可以確定分區(qū)映射關(guān)系是,
/dev/block/platform/soc/1da4000.ufshc/by-name/cust ---> sde42 ---> vendor
/dev/block/platform/soc/1da4000.ufshc/by-name/system ---> sde43 ---> system
/dev/block/platform/soc/1da4000.ufshc/by-name/userdata ---> sda17 ---> data
至此移植需要提前準(zhǔn)備的信息基本講完,下篇開始講解OpenHarmony編譯的部分,敬請期待。
































