開(kāi)篇引言
安卓設(shè)備的引導(dǎo)需要boot.img鏡像,其中含有內(nèi)核鏡像,設(shè)備樹(shù),boot配置文件,initrd.img根文件系統(tǒng)鏡像,開(kāi)發(fā)板因?yàn)槭情_(kāi)發(fā)用途,系統(tǒng)引導(dǎo)基本沒(méi)有限制,而成品安卓手機(jī)往往有各種限制,我們需要通過(guò)刷入postmarketOS進(jìn)行確認(rèn)手機(jī)是否可以啟動(dòng)第三方系統(tǒng),從中獲取引導(dǎo)啟動(dòng)的相關(guān)信息以及文件,并仿照postmarketOS的引導(dǎo)鏡像創(chuàng)建我們自己的引導(dǎo)鏡像。
1,準(zhǔn)備postmarketOS編譯環(huán)境
參照??pmbootstrap - postmarketOS?? 中的 Installation -- From git 準(zhǔn)備編譯環(huán)境
- $ 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,執(zhí)行初始化
- 1. pmbootstrap init

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

4,導(dǎo)出刷機(jī)包
- 1. pmbootstrap export

執(zhí)行以下命令找到刷機(jī)包位置
cd $(dirname $(readlink /tmp/postmarketOS-export/pmos-*.zip))

至此拿到刷機(jī)包

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

點(diǎn)擊刷機(jī)包

確認(rèn)刷入

刷機(jī)會(huì)出現(xiàn)錯(cuò)誤,不用管

刷完重啟,等待一段時(shí)間直到顯示welcome信息

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

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

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

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

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

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

使用cpio解壓initrd.img鏡像
- 1. cpio -idmv < initrd.img
得到我們需要的boot階段所必須的固件firmware,后面要編譯進(jìn)OH的ramdisk鏡像中

7,獲取正常啟動(dòng)的log
參考上面手機(jī)運(yùn)行docker那篇文章,用usb連接電腦,設(shè)置好驅(qū)動(dòng)
打開(kāi)命令提示符,使用ssh連接Linux,ip是固定的172.16.42.1
- 1. ssh [email protected]

輸入dmesg打印輸出內(nèi)核log,這個(gè)是正常的內(nèi)核啟動(dòng)log,復(fù)制下來(lái)保存好以便移植時(shí)啟動(dòng)出錯(cuò)或者驅(qū)動(dòng)有問(wèn)題時(shí)方便進(jìn)行對(duì)照
- 1. dmesg

8,獲取設(shè)備名,分區(qū)信息
連接Linux,輸入以下命令獲取信息
獲取USB控制器名稱(chēng),后面移植hdc連接程序會(huì)用到
- ls /sys/class/udc/
- a800000.usb
獲取存儲(chǔ)控制器名稱(chēng),后面配置分區(qū)會(huì)用到
- ls /sys/devices/platform/soc
暫時(shí)判斷1da4000.ufshc為存儲(chǔ)控制器名稱(chēng)

重啟,進(jìn)入twrp,輸入以下命令進(jìn)入recovery的shell
- 1. adb shell

輸入以下命令可以交叉確認(rèn)1da4000.ufshc為存儲(chǔ)控制器名稱(chēng)
- 1. ls dev/block/platform/soc/

獲取分區(qū)信息
- 1. ls -al /dev/block/platform/soc/1da4000.ufshc/by-name/



、
手機(jī)上勾選掛載vendor分區(qū)

- 1. df -h

、
確認(rèn)vendor分區(qū)對(duì)應(yīng)到sde42 -> cust
system分區(qū)因?yàn)榘惭bpmOS的緣故無(wú)法掛載,但是可以確定分區(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)備的信息基本講完,下篇開(kāi)始講解OpenHarmony編譯的部分,敬請(qǐng)期待
-
開(kāi)發(fā)板
+關(guān)注
關(guān)注
25文章
5507瀏覽量
102253 -
OpenHarmony
+關(guān)注
關(guān)注
26文章
3824瀏覽量
18142
發(fā)布評(píng)論請(qǐng)先 登錄
從DeepSeek到Qwen,AI大模型的移植與交互實(shí)戰(zhàn)指南-飛凌嵌入式

求分享從FRDM-MKL82到MKL81Z128CBH7R的代碼移植指南?
詳解Object Detection Demo的移植

AN169 從GD32E230系列移植到GD32E235系列

AN184 從GD32L233系列移植到GD32L235系列

AN136 基于GD32F30x系列的IEC60730 ClassB庫(kù)移植指南

基于GD32F3x0系列的IEC60730 ClassB庫(kù)移植指南

從GD32E230系列移植到GD32E235系列

EE-241:SHARC DSP到TigerSHARC處理器代碼移植指南

多平臺(tái)FPGA工程快速移植與構(gòu)建

【北京迅為】i.mx8mm嵌入式linux開(kāi)發(fā)指南第四篇 嵌入式Linux系統(tǒng)移植篇第六十九章uboot移植

【GD32 MCU 移植教程】9、從 STM32F10x 系列移植到 GD32F30x 系列

Openharmony軟件評(píng)估指南-米爾瑞芯微RK3568開(kāi)發(fā)板
【GD32 MCU 移植教程】8、從 STM32F4xx 系列移植到 GD32F4xx 系

【GD32 MCU 移植教程】2、從 GD32F303 移植到 GD32F503

評(píng)論