为什么刷机有风险?

6 天前
 ahdung

对安卓、路由等设备不熟,按我对 PC 的理解,它们的所有数据不都是存储在 emmc 中吗,难道没有一种方法能完整转储 emmc 吗,这样一来,无论怎么刷,只要把转储数据写回去,不就恢复原样了吗,怎么会变砖?除非 emmc 硬件损坏,类似 PC 的硬盘到镜像、镜像到硬盘,只要硬盘不坏,不可能变砖,求解惑为谢。

9046 次点击
所在节点    Android
111 条回复
ahdung
6 天前
@ho121 用 emmc 内的程序自然就是存在变砖几率的原因。我的意思就是 emmc 是一个通用硬件,不是哪家专有的,为什么不能像对待硬盘一样,随便挂接到别的机器上,在外部读写它。
ahdung
6 天前
@felixlong 这正是我不懂的地方,emmc 特殊在哪里,为什么没有通用工具可以在外部读写它,一定要用它内部的程序才能读写它?
ahdung
6 天前
@wusheng0 我的关注不是变砖的原因,而是为什么不能通过提前导出,变砖后导入还原的方法救砖。
mxT52CRuqR6o5
6 天前
安卓无法像 pc 那样轻易地通过外部存储启动,不管是卡刷线刷都需要保证 emmc 内某些分区的功能正确才能使用
feather12315
6 天前
支持 EFI 的设备就可以随便刷机。

系统启动有三个过程:EFI/BIOS/bootloader (负责硬件初始化)-> grub (可选,启动引导程序)-> OS 。
略过 grub ,毕竟这个是可选的。只考虑 EFI/BIOS/bootloader -> OS 。

各个 OS ,比如 Linux ,它的启动流程是标准的,只要在运行 kernel 前往特定的 RAM 地址塞启动信息(比如内核参数)就行了。

那么问题来了:

1. Q:OS 启动后怎么知道它有哪些硬件?
A:PCI/PCIe 是一个标准,可以枚举;但是 PCI/PCIe 需要 CPU 集成控制器,嵌入式 CPU 几乎都没有这东西,所以使用的是 device tree (预先定义好硬件信息当作内核参数传给 kernel )。

2. Q:启动是分阶段的,至少存在两个阶段:1. 系统关闭状态到 EFI/BIOS/bootloader 启动; 2. EFI/BIOS/bootloader 到 OS 。阶段 1 怎么把启动信息穿递给阶段 2 ?

A:我理解的是这样:OS kernel 有自己的启动协议,传统的 BIOS (至少 10 年前了,现在的 BIOS 视为 UEFI )与 bootloader 是去兼容 OS kernel 的启动协议; EFI 是 OS kernel 去兼容 EFI 协议,EFI 版本的 bootloader/UEFI 实现了这个 EFI 协议。

为什么 ARM 刷机这么复杂?是 device tree 的原因,除了 arm server 外罕有支持 EFI 的 arm ,而 device tree 需要根据硬件定制的;并且使用了 device tree 的芯片几乎不会与 EFI 搭配使用。

好消息是 ARM 推出了 system ready spec: https://www.arm.com/architecture/system-architectures/systemready-certification-program
也许未来 ARM 会与 x86 一样可以使用 efi 方便地刷机了。
happydebug
6 天前
借贴问一下各位大佬:三星的 note10+ 5(韩版 N9760), 买来的时候是有 magisk ,然后我手欠升级了一下 magisk,导致现在报错:不支持安装为系统应用,请还原为用户应用。我尝试重新刷机,但是打开开发者选项后里面没有 OME 锁。现在怎么处理啊 拜托拜托~
digimoon
6 天前
不保证正确,我认为是因为引导程序的问题,按 pc 来看就是先启动了 bios > bios 遍历硬盘 > 硬盘的启动扇区里面又有个引导程序( grub 这种)> 再继续运行指定分区里操作系统的引导程序 > 进入操作系统

硬盘炸了后不影响主板上的 bios ,你只需要搞个另外的介质例如 usb 和光驱之类从 bios 引导重新将硬盘弄好就行了,但是手机这种设备应该没有单独一个放 bios 的地方所以炸了就炸了不能自救
ahdung
6 天前
@nothingistrue 谢谢讲解,很有收获,那这个 bootloader 是存储在 emmc 里吗,如果是,完整导出和导入 emmc 不还是可以恢复它吗,我的设想行不通的问题出在哪里?是不是至今尚未有办法完整导出和导入 emmc ?
shinsekai
6 天前
@jiangyang123 请教一下,如何把整个 emmc 上面的内容全部复制出来?
cheng6563
6 天前
PC 你把系统装坏了可以启动 U 盘系统,其他设备可没这功能,boot 区坏了可能就启动不了刷机程序,普通人可没有把 emmc 干下来直接写数据的条件。
whitefable
6 天前
其实 4 楼和 12 楼的意思差不多了,问题在于你如何能够轻松将备份恢复到 EMMC 呢?
启动过程大概是上电后 CPU 从固定区域读取数据(如 PC 的 BIOS 区域,Android 的 Recovery 也是存放在 EMMC 的固定区域) -> 然后运行 BIOS/Recovery 去引导系统 -> 系统启动。刷机的时候如果将 Recovery 刷挂了,那意味着你手机上电之后 CPU 没有程序可以加载,那么这时候就没有办法接收你备份的 EMMC 数据再写入恢复。所以这时候一般需要用到编程器(可以将 EMMC 拆下来,或者如果电路板上有编程器用的接口也可以),编程器其实也是通过另一种启动模式令到上电时 CPU 直接从编程器加载所需要的程序,这样子 CPU 有一段程序之后自然可以接收 EMMC 的数据进行刷写。
一般所说的变砖只是无法在不拆下 EMMC 的情况下进行恢复,编程器一般还是和芯片强相关的,一般也不容易获取到或者日常中作用不大。所以你要说先备份就永远不会变砖就也对也不对吧。存储芯片你想要恢复回去数据肯定是有办法的,但在于接收你的备份数据并写入到存储芯片这一中间的部分是否可以轻松完成罢了。所以说充当这个角色的 Recovery 被你刷掉了那这个中间商就没了,那自然在手上就和变砖了一样
qaddsc
6 天前
这样备份需要拆机,有的存储芯片估计还要拆下来,难度比较大。
paopjian
6 天前
核心问题还是烧录麻烦吧, 而且厂商为了安全性不会向外界提供这些代码的, 不然就可以随意修改了. magisk 不就是劫持系统指令再修改么,如果底层 bios 都能被劫持了, 那安全问题可能就更多了, 指纹面部安全也就不存在了.三星为了整 knox 安全,都上那个保险丝了,敢解锁就烧给你看
skies457
6 天前
只要有合适的烧录器就可以导出/导入 emmc ,跟 bios 一样,刷坏 bios 同样也只能拆出来重新烧录

ref: https://www.amazon.com/ODROID-USB3-0-eMMC-Module-Writer/dp/B07BHQ615Q
ahdung
6 天前
@mxT52CRuqR6o5 不需要启动它,只要能能像硬盘一样,把 emmc 挂接到一个读写器上,在外部读写它就好,至今没有这种产品的问题出在哪里?
Myprajna
6 天前
NANDflash 和 NORflash 了解一下
mxT52CRuqR6o5
6 天前
@ahdung #33 emmc 焊在主板上的,没那么容易拿下来,至少普通人是没法做(为了刷个机就把存储颗粒就在自己家拆拆焊焊的,基本没有什么可实践性);专业修手机的会有这种设备去做这种事,是可以做到你说的事情的
pc 上通过引导外部存储的 pe 来备份数据也是更普遍的做法,而不是把硬盘拆出来备份
Opportunity
6 天前
不是还有 9008 嘛,问题这些工具你都拿不到啊
ahdung
6 天前
@feather12315 谢谢回复,很有收获。PC 的 BIOS 是在硬盘以外,bootloader 也是独立于 emmc 之外吗,如果还是在 emmc 上,不还是在可以备份还原的范畴吗,现在的问题是,为什么没有一种简单易行的办法导出导入 emmc ,因为如果有,早就烂大街了,至少靠刷机吃饭的圈子早就流行开了,毕竟变砖是所有人都想避免的事情。
impdx
6 天前
你充分理解不会,拿安卓举例子,你系统 gg 了,有 recovery ,大概率现在只剩 twrp 了,你 trwp 挂了,你还有 fastboot ,你 fastboot 挂了,高通有 9008 ,mtk 有 mtkflsahtool ,这俩挂不了,这俩挂了你 gg 了,换字库吧

路由就更简单的,有不死 breed 。

pc 就扯淡了,bios 坏了一堆教程,

核心区别就是,你可以做到哪个层次,哪个层次你做不了了,比如拿出 bios 芯片烧录,9008 短接,换字库很多人都做不了。所以才会出现砖头。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1053249

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX