開篇引言
安卓設備的引導需要boot.img鏡像,其中含有內核鏡像,設備樹,boot配置文件,initrd.img根文件系統鏡像,開發板因為是開發用途,系統引導基本沒有限制,而成品安卓手機往往有各種限制,我們需要通過刷入postmarketOS進行確認手機是否可以啟動第三方系統,從中獲取引導啟動的相關信息以及文件,并仿照postmarketOS的引導鏡像創建我們自己的引導鏡像。
1,準備postmarketOS編譯環境
參照??pmbootstrap - postmarketOS?? 中的 Installation -- From git 準備編譯環境
- $ git clone https://git.sr.ht/~postmarketos/pmbootstrap
- $ mkdir -p ~/.local/bin
- $ ln -s "$PWD/pmbootstrap/pmbootstrap.py" ~/.local/bin/pmbootstrap
- $ pmbootstrap --version
- 1.50.1
2,執行初始化
- 1. pmbootstrap init
或者替換使用鏡像源,不然會有網絡問題,需要替換兩個鏡像源地址,postmarketOS鏡像,和Alpine Linux鏡像
使用以下命令設置設置成清華源進行初始化,也可以根據鏡像源列表找自己喜歡的設置
- 1. pmbootstrap --mirror-pmOS https://mirrors.tuna.tsinghua.edu.cn/postmarketOS/ --mirror-alpine https://mirrors.tuna.tsinghua.edu.cn/alpine/
postmarketOS鏡像源列表:??postmarketOS // Official postmarketOS Mirrors??
Alpine Linux鏡像源列表:??Mirror health (alpinelinux.org)?
3,編譯安卓格式的刷機包
- 1. pmbootstrap install --android-recovery-zip
編譯時間會比較長,中間會提示創建進入手機系統的新密碼
如果中途出現錯誤,可以重試幾次,仍然不行的話刪除整個work目錄,重新執行初始化再編譯刷機包,最終結果如下
4,導出刷機包
- 1. pmbootstrap export
執行以下命令找到刷機包位置
cd $(dirname $(readlink /tmp/postmarketOS-export/pmos-*.zip))
至此拿到刷機包
查找資料的時候有參考這篇文章的方案二部分,在此貼出
??手機運行Docker: 從修改內核到刷入原生Linux | yzddMr6's Blog??
5,刷入手機驗證并獲取芯片控制器名稱
音量上+電源開機進入twrp(twrp的安裝是搞機必備,網上教程很多,在此不再重復)
??小米(Mi) 6小米(Mi) 6 手機刷 TWRP 方法,刷三方Recovery方法(解決卡米問題)刷機解鎖 (onfix.cn)???
點擊安裝
點擊刷機包
確認刷入
刷機會出現錯誤,不用管
刷完重啟,等待一段時間直到顯示welcome信息
輸入用戶名:user,密碼:自己之前設置的,進入系統
至此確認手機正常運行Linux系統,顯示,觸摸等正常工作。
6,解包獲取移植需要的資料
解包獲取的資料:
bootimg.cfg:boot分區配置信息,內核啟動參數
config:默認內核編譯配置,后續適配內核在此基礎進行變更
firmware:啟動加載必須的驅動固件文件
右鍵解壓縮pmos-xiaomi-sagit.zip得到pmos-xiaomi-sagit
同樣使用右鍵解壓縮rootfs.tar.gz得到rootfs,在rootfs/boot文件夾拿到boot.img和內核編譯的config配置
安裝安卓boot打包解包工具:
- sudo apt update
- sudo apt install abootimg
把boot.img復制到任意的文件夾,然后使用以下命令解包:
- 1. abootimg -x boot.img
得到boot分區配置bootimg.cfg
查看initrd.img文件格式為gzip壓縮文件
使用gzip解壓,發現解壓失敗,原因為后綴名不支持,我們使用mv命令復制initrd.img為initrd.img.gz,然后使用解壓命令就可以成功解壓了,解壓后原來的initrd.img會被解壓出的文件替換掉,這時initrd.img的格式為cpio鏡像文件
使用cpio解壓initrd.img鏡像
- 1. cpio -idmv < initrd.img
得到我們需要的boot階段所必須的固件firmware,后面要編譯進OH的ramdisk鏡像中
7,獲取正常啟動的log
參考上面手機運行docker那篇文章,用usb連接電腦,設置好驅動
打開命令提示符,使用ssh連接Linux,ip是固定的172.16.42.1
- 1. ssh user@172.16.42.1
輸入dmesg打印輸出內核log,這個是正常的內核啟動log,復制下來保存好以便移植時啟動出錯或者驅動有問題時方便進行對照
- 1. dmesg
8,獲取設備名,分區信息
連接Linux,輸入以下命令獲取信息
獲取USB控制器名稱,后面移植hdc連接程序會用到
- ls /sys/class/udc/
- a800000.usb
獲取存儲控制器名稱,后面配置分區會用到
- ls /sys/devices/platform/soc
暫時判斷1da4000.ufshc為存儲控制器名稱
重啟,進入twrp,輸入以下命令進入recovery的shell
- 1. adb shell
輸入以下命令可以交叉確認1da4000.ufshc為存儲控制器名稱
- 1. ls dev/block/platform/soc/
獲取分區信息
- 1. ls -al /dev/block/platform/soc/1da4000.ufshc/by-name/
、
手機上勾選掛載vendor分區
- 1. df -h
、
確認vendor分區對應到sde42 -> cust
system分區因為安裝pmOS的緣故無法掛載,但是可以確定分區映射關系是,
/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
至此移植需要提前準備的信息基本講完,下篇開始講解OpenHarmony編譯的部分,敬請期待
-
開發板
+關注
關注
25文章
5067瀏覽量
97589 -
OpenHarmony
+關注
關注
25文章
3725瀏覽量
16368
發布評論請先 登錄
相關推薦
評論