日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

与fastboot相关的知识

發布時間:2023/12/20 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 与fastboot相关的知识 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

以下內容源于朱有鵬嵌入式課程的學習,如有侵權,請告知刪除。


一、fastboot的基本知識

1、什么是fastboot

(1)fastboot是android使用的一種刷機方法。

  • android系統設計了2種刷機方式:fastboot和recovery。

(2)fastboot使用usb作為物理傳輸。

  • 刷機其實就是鏡像傳輸+燒錄,fastboot刷機時就是通過usb線來傳輸鏡像的。

(3)fastboot是uboot中的一個命令。

  • uboot進入命令行中后,可以在命令行執行fastboot命令,讓uboot進入fastboot模式;
  • 刷機是在fastboot模式下進行的。
(4)fastboot需要主機端的fastboot軟件配合。
  • 要實現fastboot刷機,只有開發板端uboot是不行的,還需要在主機上有fastboot.exe的軟件配合。

(5)fastboot在開發板和主機間定義了一套協議。

  • fastboot是我們在開發板和主機之間定義的一套協議;
  • 這套協議以usb為底層傳輸物理層,協議規定了主機fastboot軟件和開發板fastboot軟件之間的信息傳輸規則。
  • 消息傳遞可以實現功能有:主機可以向開發板發送命令、開發板可以向主機發送回復、主機可以向開發板發送文件(download)

2、fastboot的工作原理

(1)uboot的fastboot命令將開發板偽裝成一個usb設備。

  • 開發板并不是一個usb設備,因此開發板直接插到電腦上電腦是沒有反應,沒有提示發現設備需要裝驅動的。
  • 偽裝之后開發板就被主機windows識別成一個安卓手機了。

(2)主機的fastboot軟件和開發板的fastboot程序通信。

  • 開發板端只要執行了fastboot命令進入fastboot模式即可,之后不用再進行開發板的端的操作。
  • 主機端通過運行fastboot相關命令,傳遞不同的參數來實現主機端和開發板端的通信。
  • 譬如主機端執行fastboot devices,則這個命令通過USB線被傳遞到開發板中被開發板的fastboot程序接收和處理,然后開發板向主機端發送反饋信息,主機端接收到反饋信息后顯示出來。

(3)學習fastboot時,分析代碼的思路

  • 主機端:fastboot.exe的源代碼沒有,fastboot協議雖然能找到但是很枯燥,所以主機端沒有去分析的。
  • 開發板端:主要分析點就是uboot如何進入fastboot模式,fastboot模式下如何響應主機發送的各種命令。


二、uboot的fastboot代碼分析

1、do_fastboot函數

  • do_fastboot函數本身涉及到很多操作SD/Nand等磁盤的,主要目的是為了刷機。要完整的分析fastboot的函數細節很復雜很麻煩,我們并不是要做這個。

2、rx_handler函數






函數調用關系

do_fastboot
fastboot_poll
fboot_usb_int_hndlr
fboot_usb_pkt_receive
fboot_usb_int_bulkout

fastboot_interface->rx_handler(函數指針)

指向cmd_fastboot.c/rx_handler

  • 找的過程涉及到USB物理層通信的一些概念和理解,相對比較復雜。
  • uboot的fastboot最終是通過rx_handler函數,來處理主機端fastboot軟件發送過來的信息的。
  • fastboot協議的命令實現都在這個函數中提現。所以這個函數的分析就是重點。

3、代碼分析

(1)大文件download機制

  • rx_handler函數中通過if和else分成了兩部分,if部分負責處理download,else部分負責處理命令。
  • usb傳輸單次傳輸最大只能有限個字節(64、256),因此當我們發送比較小的東西(譬如命令)時可以單次傳輸完畢;當我們發送比較大的東西(譬如文件)時就必須要分包發送。

(2)down后的響應機制。開發板端通過fastboot_tx_status函數向主機發送響應,主機顯示這個響應。

(3)uboot中fastboot有關的一些宏定義設置值

  • CFG_FASTBOOT_TRANSFER_BUFFER:配置fastboot工作時的緩沖區地址,fastboot在執行某些功能時需要大塊內存做緩沖區(譬如download時)。
  • CFG_FASTBOOT_TRANSFER_BUFFER_SIZE ?fastboot:緩沖區的大小。
(4)如果刷機時燒錄uboot和zImage都正常,但是燒錄android鏡像x210.img時錯誤,提示image too large……
  • 錯誤的原因就是x210.img太大了,超出了CFG_FASTBOOT_TRANSFER_BUFFER_SIZE,因此uboot的fastboot報錯。

三、fastboot的一些命令

(1)fastboot命令響應之:fastboot reboot

  • 在PC機這邊可以遠程重啟開發板

(2)fastboot命令響應之:fastboot getvar

  • 作用是得到一些fastboot中定義的變量名的值,譬如version、product
(3)fastboot命令響應之:fastboot erase

(4)fastboot命令響應之:fastboot download

(5)fastboot命令響應之:fastboot boot

(6)fastboot命令響應之:fastboot flash

(7)fastboot命令響應之:fastboot oem

  • oem命令是用戶自定義的,其他命令全都是fastboot協議定義的。
  • 有時候自帶的命令不足以使用,oem廠商可能希望定義一些自己專有的命令,則可以使用oem命令。


總結

以上是生活随笔為你收集整理的与fastboot相关的知识的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。