Android核心開發 系統分割槽與映象檔案的燒寫

2021-09-03 10:30:25 字數 1774 閱讀 4404

本文是《android核心開發》系列的第五篇文章,本文重點介紹如何把編譯輸出的映象檔案燒寫到android裝置中。

玩過刷機的朋友肯定對fastboot這個工具並不陌生,它是android sdk中提供的一種開發工具,支援通過usb線將手頭的映象檔案更新/燒錄到android裝置中,常用的fastboot燒錄過程如下:

fastboot flash boot boot.img

fastboot flash system system.img

fastboot flash userdata userdata.img

fastboot flash cache cache.img

fastboot flash recovery recovery.img

fastboot reboot

這樣,就把我們編譯輸出的映象檔案分別成功更新到android裝置指定的分割槽去了。

但是你知道它的原理是什麼嗎?

其實fastboot是google定義的一種傳輸協議,它工作在android裝置與pc機兩端,就像瀏覽器常用的http協議一樣,需要伺服器/客戶端同時支援該協議才能完成資料的傳遞。

google提供了fastboot協議的定義和原始碼,需要裝置廠商將**移植到自己裝置的bootloader中,並不是所有的android裝置都支援fastboot,因此,我們可能買到的有些開發板的並不支援fastboot,這就需要我們採用其他方式燒錄,或者修改bootloader/u-boot原始碼,讓其支援fastboot協議。

對於任何標準的android裝置而言,它都會對內部儲存空間進行分割槽,不同的裝置的分割槽大小都不一樣,但通常都會有如下幾個分割槽:

/boot

/system

/recovery

/data

/cache

/misc

各個分割槽分別對應著各個映象檔案在裝置中實際的儲存位置。下圖所示,是adp1/g1手機的系統分割槽劃分:

由此我們知道了,其實fastboot命令執行的流程,就是根據命令引數,將新的映象檔案拷貝到指定分割槽的過程,其實並不複雜。

那麼,不支援fastboot協議的裝置一般是如何燒錄android映象的呢?

其實上面也提到了,fastboot協議是工作在bootloader之中的,在沒有fastboot出現之前,嵌入式系統的映象燒寫通過bootloader也是完全可以完成的,這裡通過示例簡單演示一下linux核心燒寫過程 。

通常在u-boot啟動過程中,會有3秒的停留,在串列埠終端敲擊回車中斷u-boot啟動核心的過程,這時就可以輸入u-boot支援的各種命令與板子互動了,舉例如下:

$ nand erase 0x100000 0x200000             //擦除掉nandflash指定位置區域的資料

$ nand write 0x80000000 0x100000 0x200000  //把記憶體中的核心燒寫到nandflash指定的位置

同理,只要清楚儲存空間的分割槽和位址,就能夠通過u-boot完成映象的燒寫過程,當然,u-boot是怎麼燒錄到開發板的呢?這是通過jtag工具燒寫的,這裡就不詳細論述了。

當然,如果系統是從外接的sdcard啟動就更簡單了,只需要把sdcard連線到電腦上,覆蓋對應分割槽裡面的映象檔案就可以了。

Android新建系統分割槽

平台 rk3368 系統 android8.1 上為了保留一些檔案在系統公升級和燒錄後不被擦除,因此新建了個不被擦除的分割槽,在此記錄下方法。分割槽表檔案路徑 device rockchip rk3368 parameter.txt,其中mypartition是我建立的分割槽,格式為 大小 位址 分...

Android系統分割槽理解及分割槽目錄細解

android 通常有以下分割槽 system分割槽 就是我們刷rom的分割槽 data分割槽 分割槽就是我們裝apk的分割槽 catch分割槽 是快取分割槽 sdcard分割槽 就是掛載的sd卡。我們可以在adb中使用df 來檢視分割槽情況。1 跨分割槽不能用 mv命令來拷貝。但是可以用cp命令。...

Android系統分割槽理解及分割槽目錄細解

android 通常有以下分割槽 system分割槽 就是我們刷rom的分割槽 data分割槽 分割槽就是我們裝apk的分割槽 catch分割槽 是快取分割槽 sdcard分割槽 就是掛載的sd卡。我們可以在adb中使用df 來檢視分割槽情況。1 跨分割槽不能用 mv命令來拷貝。但是可以用cp命令。...