-
-
[旧帖] [原创]Android刷机相关分享 0.00雪花
-
发表于: 2015-4-30 11:36 1292
-
现在已经不是刷机技术党的辉煌时代了,电脑上已经有了各种一键刷机的软件了,甚至连ROM包都不用自己找了,刷机软件根据你的连接机型已经扎到了匹配ROM,太好太强大了。
但是还是那句话刷机有风险,刷机需谨慎。如果我们在一键刷机的工具上出了问题,去网上找教程时看到一大堆的fastboot recovery bootloader这些术语时,是不是觉得来到了另外一个世界。
我曾经也深受其惑,所以凭着兴趣自己了解下,希望跟大家分享下.
刷机术语
首先来张神图
这就是刷机过程中会遇到的几个重要的数据的结构关系图.
Bootloader是手机启动后第一个跑起来的,就像电脑上的BIOS,BIOS启动根据不同的情况启动Recovery或者Kernel.
FastBoot是Bootloader提供的一个功能,可以确保你怎么刷手机都可以满血复活,因为你改不了Bootloader,所以Fastboot的功能一直与你同在,但是不同Bootloader支持的功能也不尽相同.
Android分区概念和分区内容提取
Android基于Linux,所以是分区,挂载这种概念的。
刷机的ROM包里一般会有boot.img system.img userdata.img这些文件,这些文件在刷机时会刷到特定的分区上去,在Android启动时挂载到对应的/system /data挂载点上去。
Boot.img的结构如下:
1.
1. ** +-----------------+
2. ** | boot header | 1 page
3. ** +-----------------+
4. ** | kernel | n pages
5. ** +-----------------+
6. ** | ramdisk | m pages
7. ** +-----------------+
8. ** | second stage | o pages
9. ** +-----------------+
包含Android的真正的Linux内核(kernel),和ramdisk的根文件系统.
Android的启动过程大概是这样: 从Kernel启动,挂载ramdisk为根文件系统,在挂载system.img 到 /system userdata.img到/data位置。
这里需要注意的ramdisk是不可写的,它是被加载到内存里的,即使你写入的话,也只是写入到内存里,在当前有效,当你重启机器时,系统又会重新读取ramdisk加载到内存中去。
这些分区的挂载位置与对应的挂载设备可以通过cat /proc/mtd或 /proc/emmc查看各个分区对应的设备情况
http://www.digitalinternals.com/mobile/android-mmc-mmcblk-partition-layout/259/
比如:
#cat /proc/mtd
dev: size erasesize name
mtd0: 00040000 00020000 "misc"
dev: size erasesize name
mtd0:
00040000 00020000 "misc"
mtd1:
00500000 00020000 "recovery"
mtd2:
00280000 00020000 "boot"
mtd3:
04380000 00020000 "system"
mtd4:
04380000 00020000 "cache"
mtd5:
04ac0000 00020000 "userdata"
如果你有兴趣从当前手机中获取获取这些img文件,就可以根据这些对应关系通过dd命令写出到sd卡上.比如根据上面的cat命令结果获取boot.img文件可以用如下命令:
dd if=/dev/block/mtd2 of=/sdcard/boot.img
写出boot分区设备上的boot.img到SD卡上.
从上面的分析我们可以看到Boot.img是系统中比较关键的部分,同时也是比较独立的部分,上面说到的ramdisk的不可写,我们可以通过先导出boot.img,修改后再用fastboot flash boot功能重新写入boot分区.
Fastboot及Sideload
Fastboot功能还可以fastboot flash recovery写入Recovery功能,网上的刷Recovery功能就是这样的原理.
两者都是通过PC端的命令传递刷机包,但是原理是不同的。Fastboot是Booloader提供的功能,Sideload是Recovery提供的功能。Sideload方式同Recovery的卡刷方式原理一样,不过Sideload的刷机包是通过adb sideload命令传输给手机的.
但是还是那句话刷机有风险,刷机需谨慎。如果我们在一键刷机的工具上出了问题,去网上找教程时看到一大堆的fastboot recovery bootloader这些术语时,是不是觉得来到了另外一个世界。
我曾经也深受其惑,所以凭着兴趣自己了解下,希望跟大家分享下.
刷机术语
首先来张神图
这就是刷机过程中会遇到的几个重要的数据的结构关系图.
Bootloader是手机启动后第一个跑起来的,就像电脑上的BIOS,BIOS启动根据不同的情况启动Recovery或者Kernel.
FastBoot是Bootloader提供的一个功能,可以确保你怎么刷手机都可以满血复活,因为你改不了Bootloader,所以Fastboot的功能一直与你同在,但是不同Bootloader支持的功能也不尽相同.
Android分区概念和分区内容提取
Android基于Linux,所以是分区,挂载这种概念的。
刷机的ROM包里一般会有boot.img system.img userdata.img这些文件,这些文件在刷机时会刷到特定的分区上去,在Android启动时挂载到对应的/system /data挂载点上去。
Boot.img的结构如下:
1.
1. ** +-----------------+
2. ** | boot header | 1 page
3. ** +-----------------+
4. ** | kernel | n pages
5. ** +-----------------+
6. ** | ramdisk | m pages
7. ** +-----------------+
8. ** | second stage | o pages
9. ** +-----------------+
包含Android的真正的Linux内核(kernel),和ramdisk的根文件系统.
Android的启动过程大概是这样: 从Kernel启动,挂载ramdisk为根文件系统,在挂载system.img 到 /system userdata.img到/data位置。
这里需要注意的ramdisk是不可写的,它是被加载到内存里的,即使你写入的话,也只是写入到内存里,在当前有效,当你重启机器时,系统又会重新读取ramdisk加载到内存中去。
这些分区的挂载位置与对应的挂载设备可以通过cat /proc/mtd或 /proc/emmc查看各个分区对应的设备情况
http://www.digitalinternals.com/mobile/android-mmc-mmcblk-partition-layout/259/
比如:
#cat /proc/mtd
dev: size erasesize name
mtd0: 00040000 00020000 "misc"
dev: size erasesize name
mtd0:
00040000 00020000 "misc"
mtd1:
00500000 00020000 "recovery"
mtd2:
00280000 00020000 "boot"
mtd3:
04380000 00020000 "system"
mtd4:
04380000 00020000 "cache"
mtd5:
04ac0000 00020000 "userdata"
如果你有兴趣从当前手机中获取获取这些img文件,就可以根据这些对应关系通过dd命令写出到sd卡上.比如根据上面的cat命令结果获取boot.img文件可以用如下命令:
dd if=/dev/block/mtd2 of=/sdcard/boot.img
写出boot分区设备上的boot.img到SD卡上.
从上面的分析我们可以看到Boot.img是系统中比较关键的部分,同时也是比较独立的部分,上面说到的ramdisk的不可写,我们可以通过先导出boot.img,修改后再用fastboot flash boot功能重新写入boot分区.
Fastboot及Sideload
Fastboot功能还可以fastboot flash recovery写入Recovery功能,网上的刷Recovery功能就是这样的原理.
两者都是通过PC端的命令传递刷机包,但是原理是不同的。Fastboot是Booloader提供的功能,Sideload是Recovery提供的功能。Sideload方式同Recovery的卡刷方式原理一样,不过Sideload的刷机包是通过adb sideload命令传输给手机的.
[培训]《安卓高级研修班(网课)》月薪三万计划,掌握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法
赞赏
谁下载
看原图
赞赏
雪币:
留言: