刷机 fastboot
PS E:\app\img1207> fastboot -S 100M flash system systemsim.img
erasing 'system'...
OKAY [ 0.150s]
sending sparse 'system' (101769 KB)...
OKAY [ 3.281s]
writing 'system'...
OKAY [ 2.616s]
sending sparse 'system' (97778 KB)...
OKAY [ 3.215s]
writing 'system'...
OKAY [ 2.647s]
sending sparse 'system' (100141 KB)...
OKAY [ 3.230s]
writing 'system'...
OKAY [ 2.379s]
sending sparse 'system' (100386 KB)...
OKAY [ 3.299s]
writing 'system'...
OKAY [ 2.590s]
sending sparse 'system' (102406 KB)...
OKAY [ 3.290s]
writing 'system'...
OKAY [ 2.938s]
sending sparse 'system' (102113 KB)...
OKAY [ 3.302s]
writing 'system'...
OKAY [ 2.342s]
sending sparse 'system' (101473 KB)...
OKAY [ 3.356s]
writing 'system'...
OKAY [ 2.923s]
sending sparse 'system' (101922 KB)...
OKAY [ 3.298s]
writing 'system'...
OKAY [ 2.465s]
finished. total time: 47.327s
PS E:\app\img1207>
adb reboot bootloader 是进入 fastboot 下载模式
fastboot 下载完后, 就运行fastboot reboot 重启进入正常模式 开机
PS E:\app\img1207> adb reboot bootloader
PS E:\app\img1207> fastboot devices
Device123 fastboot
PS E:\app\img1207> fastboot flash boot boot.img
target reported max download size of 262144000 bytes
sending 'boot' (16507 KB)...
OKAY [ 0.519s]
writing 'boot'...
OKAY [ 0.359s]
finished. total time: 0.880s
PS E:\app\img1207> fastboot flash system system.img
target reported max download size of 262144000 bytes
erasing 'system'...
OKAY [ 0.155s]
sending sparse 'system' (255227 KB)...
OKAY [ 8.219s]
writing 'system'...
OKAY [ 6.174s]
sending sparse 'system' (254210 KB)...
OKAY [ 8.231s]
writing 'system'...
OKAY [ 6.931s]
sending sparse 'system' (240241 KB)...
OKAY [ 7.765s]
writing 'system'...
OKAY [ 6.214s]
sending sparse 'system' (137365 KB)...
OKAY [ 4.443s]
writing 'system'...
OKAY [ 3.101s]
finished. total time: 51.236s
PS E:\app\img1207>
先开机, 然后输入 adb reboot bootloader
在升级前用 fastboot devices 确认是否存在设备。 如果存在就用fastboot flash 命令下载
一、BootLoader 和 FastBoot
从字面意思来讲,Fastboot是一个英文单词,翻译成中文的意思是『快速启动』。Fastboot 是安卓手机的一种刷机模式,通过该模式,电脑就可以与手机Bootloader建立通讯,也可以说Fastboot是一种通讯协议,通过该协议电脑就可以直接向手机系统不同分区中写入镜像文件(.img 文件),而这里的Bootloader是与电脑建立连接的通道。
二、如何进入Fastboot模式
1.在关机状态下,同时按住【音量+】与【电源键】或【音量-】与【电源键】大约2-5秒后,就可进入Fastboot模式。
2.用ADB命令进入Fastboot模式。在命令行中输入"adb reboot bootloader",即可进入该模式。
3.用手机终端模拟器进入Fastboot。在终端中输入"reboot bootloader",即可进入该模式。
三、连接Bootloader的驱动问题
安装的方式有两种:
1、自动安装:在进入fastboot模式后,系统提示有驱动没有安装,安装电脑管家,里面有个“我的手机”,选择连接,腾讯电脑管家就会自动安装。类似的软件还有驱动精灵等。
2、手动安装:在进入fastboot模式后,系统提示有驱动没有安装,此时用实现准备好的驱动安装就好了。
驱动是电脑与手机Bootloader连接的关键,如果驱动不正常电脑就会不识别设备,会在设备管理器中打上感叹号。
四、Fastboot命令
① 基础命令(fastboot [$])
列出Fastboot连接的设备
——fastboot devices
获取手机变量信息
——fastboot getvar version:version-bootloader:version-baseband:product:serialno:secure
解除BL锁
——fastboot oem unlock(lock重装上锁)
查看Fastboot帮助信息
——fastboot help
② 启动模式(fastboot oem reboot +[模式名称])
重启手机
——fastboot oem reboot
重启进入Recovery模式
——fastboot oem reboot-recovery
重启进入Fastboot模式
——fastboot oem reboot-bootloader
重启进入高通下载模式
——fastboot oem reboot-edl
③ 擦除命令(fastboot erase +[分区名称])
擦除system分区
——fastboot erase system
擦除boot分区
——fastboot erase boot
擦除data分区
——fastboot erase userdata
擦除recovery分区
——fastboot erase recovery
擦除所有分区
——fastboot erase -w
④ 格式化分区(fastboot format +[分区名称])
格式化system分区
——fastboot format system
格式化boot分区
——fastboot format boot
格式化data分区
——fastboot format userdata
格式化recovery分区
——fastboot format recovery
⑤ 刷写命令(fastboot flash +[分区名称])
刷写boot分区
——fastboot flash boot boot.img
刷写system分区
——fastboot flash system system.img
刷写data分区
——fastboot flash userdata userdata.img
刷写当前目录下的所有img文件
——fastboot flashall
刷写zip包
——fastboot update update.zip
https://www.jianshu.com/p/c40ea4131b71
fastboot
usage: fastboot [ <option> ] <command>
commands:
update <filename> reflash device from update.zip
flashall flash boot + recovery + system
flash <partition> [ <filename> ] write a file to a flash partition
erase <partition> erase a flash partition
format <partition> format a flash partition
getvar <variable> display a bootloader variable
boot <kernel> [ <ramdisk> ] download and boot kernel
flash:raw boot <kernel> [ <ramdisk> ] create bootimage and flash it
devices list all connected devices
continue continue with autoboot
reboot reboot device normally
reboot-bootloader reboot device into bootloader
help show this help message
options:
-w erase userdata and cache (and format
if supported by partition type)
-u do not first erase partition before
formatting
-s <specific device> specify device serial number
or path to device port
-l with "devices", lists device paths
-p <product> specify product name
-c <cmdline> override kernel commandline
-i <vendor id> specify a custom USB vendor id
-b <base_addr> specify a custom kernel base address. default: 0x10000000
-n <page size> specify the nand page size. default: 2048
-S <size>[K|M|G] automatically sparse files greater than
size. 0 to disable
一文了解fastboot - 知乎 https://zhuanlan.zhihu.com/p/518965515
fastboot是android使用的一种刷机方法。android系统设计了2种刷机方式:fastboot和recovery。
fastboot使用usb作为物理传输。刷机其实是镜像传输+烧录,fastboot刷机时就是通过usb线来传输镜像的
fastboot是uboot种的一个命令。uboot进行命令行中后,如果需要刷机,则可以在命令行中执行fastboot命令就可以让uboot进入fastboot模式,刷机就是在fastboot模式下进行的。
fastboot需要主机端的fastboot软件配合。要实现fastboot刷机,只有开发板端uboot是不行的,还需要在主机有fastboot.exe配合。
fastboot在开发板和主机间定义了一套协议。其实就是fastboot是我们在开发板和主机之间定义的一套协议,这套协议以usb为底层传输物理层,协议规定了主机fastbooot软件和开发板fastboot软件之间的信息传输规则。消息传递可以实现功能有:主机可以向开发板发送命令、开发板可以向主机发送回复、主机可以向开发板发送文件(download)
fastboot的工作原理
uboot的fastboot的命令将开发板伪装成一个usb设备。开发板本身并不是一个usb设备,所以开发板直接插到电脑是没有反应的,没有提示发现设备需要装驱动的。伪装之后开发板就被主机windows识别成一个安卓手机了。
主机的fastboot软件和开发板的fastboot程序通信来工作。平时工作时,开发板端只要执行了fastboot命令进入fastboot模式即可,剩下的就不用管了。主机端通过运行fastboot命令,传递不同的参数来实现主机端和开发板端的通信。 譬如主机端执行fastboot devices,则这个命令通过usb线被传递到开发板中被开发板的fastboot程序接收,接收后去处理向主机端发送发聩信息,主机端接收到反馈信息后显示出来。
学习fastboot时分析代码的思路是:主机端:fastboot.exe的源代码没有,fastboot协议虽然能找到但是很枯燥,所以主机端没有去分析。开发板端:主要分析点就是uboot如何进入fastboot模式,fastboot模式下如何响应主机发送的各种命令。
大文件download机制
rx_handler函数中通过if和else分成了两部分,if部分负责处理download,else部分负责处理命令。usb传输单次传输最大只能有限个字节(64、256),因此当发送比较小的东西(譬如命令)时可以单词传输完毕;当发送比较大的东西时(譬如文件)就必须要分包发送。
download后的响应机制
开发板端通过fastboot_tx_status函数向主机发送响应,主机显示这个响应。
fastboot常用命令
fastboot getvar:作用是得到一些fastboot中定义的变量名的值,譬如version、product、serialno、downloadsize
fastboot erase:擦除
fastboot download:下载
fastboot boot:启动内核
fastboot flash:烧录
fastboot oem:oem是用户自定义的,其他命令都是fastboot协议定义的,但是有时候自带的命令不足以使用,oem厂商可能希望定义一些自己专有的命令,则可以使用oem命令。
编译安卓源码、内核,刷入NEXUS 6P记录_image.gz-dtb-CSDN博客 https://blog.csdn.net/yemin6666/article/details/120071484
重磅干货!高通9008模式与数据提取 - 知乎 https://zhuanlan.zhihu.com/p/35422254
刷写、启动和更新 | Android 开源项目 | Android Open Source Project https://source.android.google.cn/docs/core/architecture/bootloader/flashing-updating?hl=zh-cn
Android系统添加开机自动启动执行的shell脚本_android系统的自启脚本在哪-CSDN博客 https://blog.csdn.net/weixin_44008788/article/details/112057008
高通Andriod开机流程与镜像说明 - schips - 博客园 https://www.cnblogs.com/schips/p/images_about_qualcomm_android.html
android系统开机自动启动并执行的shell脚本
实现方案
- 新建并编写文件upbridge.sh,将该shell脚本文件放在
device/qcom/common/rootdir/etc/
目录下
#!/system/bin/sh
netcfg eth0 up
- 在init.rc中创建该服务
system/core/rootdir/init.rc
#编写自己要执行的服务
service upbridge /system/bin/upbridge.sh
user root
group root
disabled
#在init.rc中启动该服务
on property:sys.boot_completed=1
start upbridge
#当权限不足时,添加权限
chown root shell /system/bin/upbridge.sh
chmod 0550 /system/bin/upbridge.sh
- 将该脚本从编译路径下拷贝到生成系统文件的指定路径下
device/qcom/msm8953_64/msm8953_64.mk
PRODUCT_COPY_FILES += \
device/qcom/common/rootdir/etc/upbridge.sh:system/bin/upbridge.sh
- 以上三步完成后,就会在系统启动后去自动执行该服务了,这样就达到了用root权限去执行我们要执行的命令的目的了。
Tips:可将脚本拷贝到
system/bin/
目录下 ,手动执行脚本,确认脚本无误之后加入到系统里面编译
扩展
- init.rc语法介绍
- 查看正在运行的脚本