刷机 fastboot

 

fastboot flash boot boot.img
 解决fastboot 刷 system.img 尺寸限制问题-CSDN博客 https://blog.csdn.net/lmw21848/article/details/79141151
烧录system.img镜像时报错 FAILED (remote: ‘size too large‘)_fastboot: error: command failed-CSDN博客 https://blog.csdn.net/weixin_44956894/article/details/126194206
fastboot -S 100M flash system systemsim.img

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>

 

 

 

 

导出文件
cd /data/local/tmp/
dmesg > dmesg.txt
 
adb pull /data/local/tmp/dmesg.txt D:\mycode\test
 

 

adb reboot bootloader 是进入 fastboot 下载模式

fastboot 下载完后, 就运行fastboot reboot 重启进入正常模式 开机

替换文件  
adb root
adb remount
查看开机启动项
getprop |grep svc 看是否有 init.svc.mytest
 

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脚本

实现方案
  1. 新建并编写文件upbridge.sh,将该shell脚本文件放在device/qcom/common/rootdir/etc/目录下
#!/system/bin/sh

netcfg eth0 up
  1. 在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
  1. 将该脚本从编译路径下拷贝到生成系统文件的指定路径下
    device/qcom/msm8953_64/msm8953_64.mk
 PRODUCT_COPY_FILES += \
 	device/qcom/common/rootdir/etc/upbridge.sh:system/bin/upbridge.sh
  1. 以上三步完成后,就会在系统启动后去自动执行该服务了,这样就达到了用root权限去执行我们要执行的命令的目的了。

Tips:可将脚本拷贝到system/bin/目录下 ,手动执行脚本,确认脚本无误之后加入到系统里面编译

扩展
  1. init.rc语法介绍
  2. 查看正在运行的脚本

 

 

 

 

posted @ 2023-12-01 15:56  papering  阅读(585)  评论(0编辑  收藏  举报