2017-02-10 78 views
2

我看到我的Android圖像的問題,其中命令adb reboot bootloader只是簡單地重新啓動回到android,而不是引導加載程序模式。「adb reboot bootloader」如何在內部工作?

爲了解決這個問題,我做了一些研究,發現有兩件事,adbadbd,主機和目標設備使用TCP協議通過套接字進行通信。

所以,有趣的是像adb shelladb devices命令正在工作,但不是reboot bootloader。我想了解什麼adbd收到reboot bootloader。它會改變布爾順序,設置一些標誌,改變EFI增量......。

你能指點一些好的鏈接或理解你可以分享嗎?

PS:我的工作在嵌入式設備ENVIRON,類似樹莓派...

回答

4

這是如何通過USB(唯一的運輸連接標準的Android設備上adb reboot bootloader作品在標準Android程序支持bootloader fastboot模式):

  1. adb客戶端發送reboot bootloader命令到adb服務器(通過TCP)
  2. adb服務器轉發reboot bootloader命令將adbd設備(通過USB)
  3. adbd上設置sys.powerctl屬性reboot,bootloader
  4. sys.powerctl變化觸發它運行powerctlinit的內置
  5. 這確實_NR_reboot系統調用
  6. init.rc規則其中設置了reboot to bootloader標誌並重啓設備

On下一次啓動引導程序會看到該標誌並進入fastboot模式。但只有在USB已連接。

+0

@InsaneCoder [ADB](https://android.googlesource.com/platform/system/core/+/master/adb/)和[init](https://android.googlesource.com/platform/system/core/+/master/init /等)是開源的,所以你可以看到它是如何工作的。內核源代碼有點難以挖掘,部分原因在於廠商之間存在多少差異...... :-(但大多數情況下,它們是從reboot_notifier處理程序重新啓動的。「bootloader」標誌的含義也大不相同,有可能它沒有在某些端口上實現 – ephemient

+0

@亞歷克斯:感謝這個有價值的信息,你能告訴我在哪裏可以找到這個'reboot to bootloader'標誌嗎?第四點是不完整的嗎? 「什麼? –

+0

@亞瑟:哦,等等...我發現這個http://stackoverflow.com/questions/5472761/how-does-the-bootloader-pick-up-the-command-after-a-restarting-system -with-comm –