您当前的位置:首页 > 生活热点 > 正文

fastboot超快启动教程,Fastbootd实现原理分析

关于【fastboot超快启动教程】,Fastbootd实现原理分析,今天向乾小编给您分享一下,如果对您有所帮助别忘了关注本站哦。

前言

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实现原理分析

相关代码

执行adbreboot-fastboot

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

system/core/adb/daemon/services.cpp

fastboot超快启动教程,Fastbootd实现原理分析

设置属性sys.powerctl=fastboot

调用reboot命令设置属性sys.powerctl=fastboot,触发init进程执行action::powerctl。

system/core/reboot/reboot.c

fastboot超快启动教程,Fastbootd实现原理分析

init.rc1

fastboot超快启动教程,Fastbootd实现原理分析

写入bootloader_message后重启

init进程将reboot-reason写入bootloader_message后重启系统。

system/core/init/reboot.cpp

fastboot超快启动教程,Fastbootd实现原理分析

重启后进入recovery系统

重启进入recovery系统后,recovery程序读取bootloader_message,属性sys.usb.config先后设置为none和fastboot。

recovery_main.cpp

fastboot超快启动教程,Fastbootd实现原理分析

启动fastbootd进程

init进程在属性sys.usb.config=none时清除usb的ffs配置,sys.usb.config=fastboot时配置usb的ffs为fastboot模式,生成fastboot对应的读写endpoint设备,用于和PC端的fastboot协议数据读写。

init.rc

fastboot超快启动教程,Fastbootd实现原理分析

fastboot超快启动教程,Fastbootd实现原理分析

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实现原理分析

如上图所示,fastboot协议不仅可以通过usb实现,也可以通过网络的方式实现。

flash命令执行过程

fastboot超快启动教程,Fastbootd实现原理分析

动态分区

在super分区头部存在metadata数据结构记录system、vendor、product等分区的位置和大小,结构如下图所示。

fastboot超快启动教程,Fastbootd实现原理分析

通常将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 1073741824fastboot resize-logical-partition system 4294967296fastboot flash system system.img

按照上述方式刷机成功后,重启进入Android系统,在init的first_stage阶段生成对应的dm设备并挂载:

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

init在first_stage阶段读取fstab配置

fastboot超快启动教程,Fastbootd实现原理分析

依据fstab配置创建super的逻辑分区

本文关键词:fastboot怎么开机,fastboot命令详解,fastboot怎么操作,fastboottool,fastboot开启。这就是关于《fastboot超快启动教程,Fastbootd实现原理分析》的所有内容,希望对您能有所帮助!更多的知识请继续关注《犇涌向乾》百科知识网站:!


声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,谢谢。

上一篇: 石秀(说一说石秀的简介)

下一篇: 飞天茅台53度价格2022市场价一箱



推荐阅读