tft每日頭條

 > 生活

 > fastboot超快啟動教程

fastboot超快啟動教程

生活 更新时间:2025-01-11 14:19:05
前言

fastboot是一種用于Android設備上的刷機協議,便于系統開發者快速燒錄系統。随着AOSP的發展,谷歌在Android Q版本引入了super動态分區功能,實現system、vendor和product等分區大小的靈活配置,避免了系統升級帶來頻繁修改分區表的問題。同時引入了手機端側fastboot模式實現super分區的擦寫,之前版本的fastboot刷寫功能通常實現在bootloader模式(一般由SOC廠家提供原始實現),新引入的fastboot模式實現在recovery系統中集成了fastbootd二進制程序,在recovery系統中可複用系統的usb、網絡等驅動,降低了開發難度,具有更好的可移植性(目前各個廠家的bootloader方案各有不同),一定程度降低了廠家的工作量。

一、源碼&編譯

源碼路徑

手機端fastbootd源碼路徑:system/core/fastboot/device

Host端fastboot源碼路徑:system/core/fastboot

在system/core/fastboot目錄下mm即可編譯生成fastbootd和Host端使用的fastboot工具。

二、fastboot模式啟動過程

啟動流程圖

adb/bootloader模式下reboot-fastboot。

fastboot超快啟動教程(Fastbootd實現原理分析)1

相關代碼

  1. 執行adbreboot-fastboot

adb新增對命令reboot-fastboot的支持。

system/core/adb/daemon/services.cpp

fastboot超快啟動教程(Fastbootd實現原理分析)2

  1. 設置屬性sys.powerctl=fastboot

調用reboot命令設置屬性sys.powerctl=fastboot,觸發init進程執行action::powerctl。

system/core/reboot/reboot.c

fastboot超快啟動教程(Fastbootd實現原理分析)3

init.rc1

fastboot超快啟動教程(Fastbootd實現原理分析)4

  1. 寫入bootloader_message後重啟

init進程将reboot-reason寫入bootloader_message後重啟系統。

system/core/init/reboot.cpp

fastboot超快啟動教程(Fastbootd實現原理分析)5

  1. 重啟後進入recovery系統

重啟進入recovery系統後,recovery程序讀取bootloader_message,屬性sys.usb.config先後設置為none和fastboot。

recovery_main.cpp

fastboot超快啟動教程(Fastbootd實現原理分析)6

  1. 啟動fastbootd進程

init進程在屬性sys.usb.config=none時清除usb的ffs配置,sys.usb.config=fastboot時配置usb的ffs為fastboot模式,生成fastboot對應的讀寫endpoint設備,用于和PC端的fastboot協議數據讀寫。

init.rc

fastboot超快啟動教程(Fastbootd實現原理分析)7

fastboot超快啟動教程(Fastbootd實現原理分析)8

  • fastboot模式下fastbootreboot recovery可切換到recovery模式(啟動adb,關閉fastbootd)而不需要重啟。
  • PC端fastboot從r28.0.1之後開始支持reboot-fastboot命令,adb從r28.0.2之後開始支持reboot-fastboot命令。
  • fastbootd與recovery進程的關系和update_binary與recovery進程的關系類似,前者負責flash擦寫邏輯的實現,後者負責UI的實現。
三、fastboot通信過程

fastboot協議 cmd:arg1......

例如reboot、flash:boot、erase:boot、oem:unlock、getvar:product、download:size等。

fastboot超快啟動教程(Fastbootd實現原理分析)9

如上圖所示,fastboot協議不僅可以通過usb實現,也可以通過網絡的方式實現。

flash命令執行過程

fastboot超快啟動教程(Fastbootd實現原理分析)10

動态分區

在super分區頭部存在metadata數據結構記錄system、vendor、product等分區的位置和大小,結構如下圖所示。

fastboot超快啟動教程(Fastbootd實現原理分析)11

通常将boot、userdata、cache等稱為物理分區,super分區中的system、vendor、product等稱為邏輯分區。

fastbootd中支持create-logical-partition/delete-logical-partition/resize-logical-partition三個命令主動創建super分區上的邏輯分區。

fastboot delete-logical-partitionsystemfastboot create-logical-partitionsystem 1073741824 fastboot resize-logical-partition system 4294967296 fastboot flash system system.img

按照上述方式刷機成功後,重啟進入Android系統,在init的first_stage階段生成對應的dm設備并挂載:

main()->FirstStageMain() -->DoFirstStageMount()-->InitDevices()-->MountPartitions()-->CreateLogicalPartitions()-->CreateDevice()

init在first_stage階段讀取fstab配置

fastboot超快啟動教程(Fastbootd實現原理分析)12

依據fstab配置創建super的邏輯分區

fastboot超快啟動教程(Fastbootd實現原理分析)13

主要通過控制/dev/device-mapper,創建dm設備,加載super分區的metadata的table數據(分區的名字、偏移和大小等)傳遞給DeviceMapper驅動生産對應的/dev/dmX設備。具體的LinuxDeviceMapper實現機制,這裡不詳細介紹,請參見《DeviceMapper架構及在android上的應用》。

四、小結

目前用戶空間的fastbootd作為fastboot協議中的服務端覆蓋了所有fastboot原生命令,fastboot和recovery共享内核和庫,基于usbgadget、block等linux驅動實現了協議通信和flash設備的讀寫等功能。對于OEM命令,Google也設計了對應OEMHAL([email protected])兼容各自的私有命令,同時方便開發者在各個版本之間快速移植。基于用戶空間下fastbootd的高可移植性、linux運行環境等特點,用戶空間下的fastbootd可能會逐漸替代引導程序實現fastboot的方式,而引導程序隻保留各自SOC的線刷功能。

,

更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!

查看全部

相关生活资讯推荐

热门生活资讯推荐

网友关注

Copyright 2023-2025 - www.tftnews.com All Rights Reserved