刷机过程及原理&开机流程

一定要对源码体系有足够的认知,才能对刷机有深刻的理解。现在只能概述了

Android系统架构
最底层各种硬件设备略过不提

Bootloader:PC主板上一小段程序叫BIOS,主板加电跑起来的第一个程序,负责初始化硬件,OS启动,嵌入式设备里也有类似的程序,不叫BIOS,叫Bootloader。使用最广泛的是一个叫uboot的程序,编译后生成uboot.bin镜像,烧到特定分区,就可以作为Bootloader使用。

Bootloader支持交互式启动,也就是初始化硬件完成后,不是马上启动OS,而是停留在当前状态。等待用户输入命令告诉他接下来干什么,这种启动模式叫Fastboot模式。 adb reboot bootloader进入Fastboot模式

进入Fastboot之前,先了解ROM结构。一个能够正常启动的ROM包含以下四个分区。

1. Bootloader,存放uboot.bin的分区
2. Bootloader用来保存环境变量的分区
3. Kernel,存放os内核的分区
4. Rootfs,存入系统第一个进程init对应的程序的分区

Fastboot模式下,可以通过另外一个工具fastboot来让设备执行指定的命令,对于刷机者来说,最常用的就是刷入各种镜像文件。例如,Kernel分区和Rootfs分区刷入指定的镜像。

android设备上,处于Fastboot模式时(就是烧写了Bootloader),我们可以把一个包含Kernel和Rootfs的Recovery.img镜像通过fastboot工具刷入到设备上一个叫Revovery的分区去,就是刷Recovery,属于刷ROM的一种,Recovery包含有Kerne和Rootfs,因此Recovery刷入设备后可以让设备正常的启动起来,这个启动方式叫Recovery模式 adb reboot recovery。

总结一下,Bootloader程序即uboot.bin启动完毕,进入Fastboot模式,用fastboot工具刷入Recovery.img镜像后,进入Recovery模式。

当设备处于Recovery模式时,我们可以做些什么呢?答案是取决于刷入的Recovery.img所包含的Rootfs所包含的程序。更确切地说,是取决于Rootfs镜像里面的init程序都做了些什么事情。不过顾名思义,Recovery就是用来恢复系统的意思,也包含有更新系统的意思。这里所说的系统,是用户正常使用的系统,里面包含有Android运行时框架,使得我们可以在上面安装和使用各种APP

用户正常使用Android设备时的系统,主要是包含有两个分区:System分区和Boot分区。System分区包含有Android运行时框架、系统APP以及预装的第三方APP等,而Boot分区包含有Kernel和Rootfs。刷入到System分区和Boot分区的两个镜像称为system.img和boot.img,我们通常将它们打包和压缩为一个zip文件,例如update.zip,并且将它上传到Android设备上的sdcard上去。这样当我们进入到Recovery模式时,就可以在Recovery界面上用我们之前上传到sdcard的zip包来更新用户正常使用Android设备时所用的系统了。这个过程就是通常所说的刷ROM了。

广义上的刷ROM,实际上包含更新Recovery(Kernel和Rootfs)和更新用户正常使用的系统两个意思;而狭义上的刷ROM,只是更新用户正常使用的那个系统。更新Recovery需要进入到Fastboot模式中,而更新用户正常使用的那个系统需要进入到Recovery模式中。Android设备在启动的过程中,在默认情况下,一旦Bootloader启动完成,就会直接启动用户正常使用的那个系统,而不会进入到Recovery模式,或者停留在Bootloader中,也就是停留在Fastboot模式中。只有通过特定的命令,例如adb reboot recovery和adb reboot bootloader,或者特定的按键,例如在设备启动过程中同时按住音量减小键和电源开关键,才能让设备进入到Recovery模式或者Fastboot模式中。

一个完整的刷Rom过程有两个步骤

  1. 进入FastBoot模式,输入recovery.img镜像
  2. 进入Recovery模式,刷入包含system.img和boot.img镜像的zip包

注意:system.img和boot.img在Fastboot模式下也可以刷入,只不过Recovery模式更友好一些,这里需要提到一个Bootloader锁的概念,在锁定Bootloader的情况下,无法刷入非官方的recovery.img,system.img,boot.img镜像。这是跟厂商的Bootloader有相关的。可以通过一定的算法(例如签名)来验证要刷入的镜像是否是官方发布的。在这种情况下必须对Booloader解锁,才可以刷入非官方的镜像。

所谓定制自己的系统,就是自己制作recovery.img和system.img,boot.img。
从aosp源码中编译出能在自己使用的手机上运行的系统,并非易事,好在有很多基于aosp第三方开源项目,最著名的就是CyanogenMod,简称CM,MIUI,锤子 ,一加 ,都是基于CM开发的。

以上就是刷机概念和过程,至于原理。

打好源码底子再来补充

fastboot 解锁

开发者选项中的oem unlocking打开
adb reboot bootloader
fastboot flashing unlock
按音量上键adb
fastboot reboot
adb disable-verity
adb reboot
adb root
adb remount

替换boot.img

A: 先将整个版本烧写到手机,烧写完后启动手机进入开发者模式查看OEM是否已解锁(必须解锁,不然替换boot.img会失败)
B:烧写boot.img
(1): 将boot.img放到电脑上(比如D盘),启动DOS终端,进入D盘(要和boot.img同目录)
(2): 手机连接电脑,在DOS端输入:adb reboot bootloader 进入fastboot模式
(3): 等待手机进入fastboot模式后输入:fastboot flash boot boot.img
(4): 等待烧写完成后输入fastboot reboot重启手机

fastboot刷机

  1. 先执行: adb reboot-bootloader 进入 fastboot模式
  2. fastboot flash system system. img
  3. fastboot flash dtbo dtbo.img
  4. fastboot flash vendor vendor.i
  5. fastboot flash userdata userdata.img
  6. fastboot flash boot boot.img
  7. fastboot reboot
  8. fastboot flash system system.img && fastboot flash vendor 8. vendor.img && fastboot flash userdata userdata.img && fastboot flash boot boot.img && fastboot reboot
  9. data_collect: update data collect app source
  10. this updatedata collect app and add faceDataCollect upload app source code
  11. fastboot flash system system.img && fastboot reboot

编译模块

./mk_android.sh -t userdebug -i bootimage -j 32
./mk_android.sh -t userdebug -i dtboimage -j 32

开机流程

android开机启动流程

  1. 手机开机后,引导芯片启动,引导芯片开始从固化再rom里的预设代码执行,加载引导程序到ram,bootloader检查ram,初始化硬件参数等功能。
  2. 硬件参数初始化完成后,进入到kernel层,kernel层主要加载一些硬件设备驱动,初始化进程管理等操作,再kernerl中首先启动swapper进程(pid=0),用于初始化进程管理,内存管理,加载Driver等操作,再启动kthread进程(pid=2),这些linux系统的内核进程,kthread是所有内核进程的鼻祖。
  3. Kernel加载完毕后,硬件设备驱动与hal层交互,初始化进程管理等操作会启动init进程,这些在native中
  4. init进程pid=1,init是所有进程的吧izhu,第一个启动,启动后,会启动adbd,logd等用户守护进程,并且会启动servicemanager(binder服务管家)等重要服务,同时孵化出zygote进程,c++ framework,
  5. zygote进程是有init进程解析init.rc文件后for生成,他会加载虚拟机,启动system server,(zygote 孵化的第一个进程)System server负责启动和管理整个java framework,包含activitymanager,windowmanager,packagemanager,powermanager等服务
  6. zygote同时会启动app进程,启动的第一个进程是launcher,然后启动email,sms等进程,所有的app都是zygote fork生成。
    概述:Loader > Kernel > Native > Framework > Application

细分:BootRom > Bootloader > Kernel > Init > Zygote > SystemServer > Launcher

在这里插入图片描述

未完待续。。。。。

  • 7
    点赞
  • 49
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
在使用 UDS(Unified Diagnostic Services)协议进行刷机时,通常需要使用以下 UDS 服务: 1. DiagnosticSessionControl:用于建立 UDS 通信会话,并设置会话类型和安全级别等参数。 2. ReadDataByIdentifier:用于读取 ECU 中的数据,例如版本号、配置信息等。 3. RequestDownload:用于开始 OTA(Over-The-Air)软件升级过程,并发送升级数据。 4. RequestUpload:用于确认升级数据是否正确,并准备写入 ECU。 5. TransferData:用于将升级数据写入 ECU。 6. RequestTransferExit:用于校验升级数据是否正确。 7. RoutineControl:用于完成软件升级过程。 在进行刷机流程时,通常需要先通过 DiagnosticSessionControl 命令建立 UDS 通信会话,并设置会话类型和安全级别等参数。然后,使用 ReadDataByIdentifier 命令读取 ECU 中的数据,例如版本号和配置信息等。接下来,使用 RequestDownload 命令开始 OTA 软件升级过程,并发送升级数据。使用 RequestUpload 命令确认升级数据是否正确,并准备写入 ECU。然后,使用 TransferData 命令将升级数据写入 ECU,使用 RequestTransferExit 命令校验升级数据是否正确。最后,使用 RoutineControl 命令完成软件升级过程。 需要注意的是,在进行刷机流程时,需要保证数据的安全性和完整性,因此需要使用加密和校验等技术来保护数据。此外,刷机过程中还需要注意安全漏洞和网络攻击的风险,需要采取相应的安全措施来保护车辆和用户的安全。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值