Android手机和平板电脑通常比运行诸如iOS , Tizen或Windows 10 Mobile等操作系统的平板电脑开放得多。 如果您不喜欢设备制造商在您的Android设备上安装的固件,则可以用自己的自定义固件替换它。 CyanogenMod , Paranoid Android和Pure Nexus Project是自定义固件的示例,这些自定义固件在Android用户中广受欢迎。
自定义固件也是您可以在制造商不再支持的设备上安装较新版本的Android的唯一方法。 除非您拥有属于Nexus或Android One系列的设备,否则我确定您已经知道这一点。
在本文中,我将帮助您了解什么是Android固件以及Android设备如何使用它。 我还将向您介绍可用于替换设备固件的工具。
告诫
更换固件是一项冒险的操作,有可能使您的设备无法使用。 在大多数情况下,这也会使设备的保修失效。 在继续尝试刷新自定义固件之前,请确保已备有数据备份和设备出厂映像的副本。
1.什么是Android固件?
最初,固件是一个术语,用于指代安装在电子设备的只读存储器或ROM中的微型,关键任务程序。 修改固件是不可能的,或者需要通常终端用户无法获得的特殊设备。
但是,Android固件有很大不同。 它包含整个Android操作系统,并以可写形式的存储(称为NAND闪存)存储,该存储类型与存储设备(如USB记忆棒和SD卡)中使用的存储类型相同。 使用固件一词仅是因为设备制造商不必为它想出一个新词。
Android固件通常也称为Android ROM,因为默认情况下,用户无法直接对其进行写入。
2. Android固件包含什么?
制造商在Android设备上安装的固件包含一个Android操作系统的内部版本和两个通常不可替代的其他封闭源程序,它们是自举程序和无线电固件 。
了解引导加载程序
Android引导加载程序是一小段专有代码,负责在Android设备开机时启动Android操作系统。 但是,引导加载程序几乎总是执行另外一项任务。 它检查正在启动的操作系统是否真实。
如何确定什么是真实的? 它检查引导分区是否已使用唯一的OEM密钥 ( 原始设备制造商密钥的缩写)签名。 当然,OEM密钥属于设备制造商,是私有的,您无法知道它是什么。
由于进行了真实性检查,因此您无法在Android设备上直接安装自定义ROM。 值得庆幸的是,这些天来,大多数设备制造商都允许用户禁用该检查。 在Android行话中,它们允许用户解锁引导加载程序。
解锁引导加载程序所需遵循的确切过程取决于您的设备。 一些制造商,例如Sony和HTC,希望您提供秘密的解锁令牌。 其他人只是希望您使用终端运行一组固定的命令。
通常,一个名为fastboot的工具(它是Android SDK的一部分)用于运行解锁命令。 例如,如果您拥有Nexus设备,则可以通过运行以下命令来解锁其引导加载程序:
fastboot flashing unlock
您将在本文稍后了解有关fastboot的更多信息。 请注意,如果您拥有无法解锁的引导加载程序的设备,则没有简便的方法来修改或替换其固件。
了解无线电固件
这可能会让您感到意外,但是您的Android智能手机实际上在称为基带处理器的独立处理器上运行另一个操作系统。 无线电固件是指在基带处理器上运行的操作系统。
通常,它是一个RTOS,其短于实时操作系统 ,并负责管理所述设备的蜂窝无线功能。 换句话说,它使您的设备能够使用2G,3G和4G LTE等无线技术拨打电话并连接到Internet。
RTOS是一段专有代码,高通,联发科技和展讯等流行的基带处理器制造商确保其内部运作秘密。 Android操作系统通常使用套接字和回调与RTOS进行通信。
通常,更换设备的无线电固件不是一个好主意。
了解Android版本
Android版本是从开源代码创建的固件的唯一部分。 因此,这是您可以修改和扩展的唯一部分。 当您听到Android爱好者说“我在设备上刷新了新的ROM”时,可以确定他们正在谈论新的Android版本。
Android构建通常以ZIP文件的形式共享,该文件可以由fastboot使用 。 它具有以下内容:
update.zip
|-- android-info.txt
|-- boot.img
|-- recovery.img
|-- system.img
`-- userdata.img
android-info.txt是一个文本文件,指定了构建的先决条件。 例如,它可以指定构建所需的引导程序和无线电固件的版本号。 这是一个示例android-info.txt文件:
require board=herring
require version-bootloader=I9020XXJK1
require version-baseband=I9020XXKD1
boot.img是一个二进制文件,其中包含Linux内核和GZIP存档形式的ramdisk。 内核是引导加载程序可以使用的引导可执行文件zImage。
另一方面,ramdisk是只读文件系统,在启动过程中由内核挂载。 它包含众所周知的init进程,第一个进程由任何基于Linux的操作系统启动。 它还包含各种守护进程,例如adbd和healthd ,它们是由init进程启动的。 ramdisk的目录树如下所示:
ramdisk/
|-- charger -> /sbin/healthd
|-- data
|-- default.prop
|-- dev
|-- file_contexts
|-- fstab.grouper
|-- init
|-- init.environ.rc
|-- init.grouper.rc
|-- init.grouper.usb.rc
|-- init.rc
|-- init.recovery.grouper.rc
|-- init.trace.rc
|-- init.usb.rc
|-- init.zygote32.rc
|-- proc
|-- property_contexts
|-- sbin
| |-- adbd
| |-- healthd
| |-- ueventd -> ../init
| `-- watchdogd -> ../init
|-- seapp_contexts
|-- selinux_version
|-- sepolicy
|-- service_contexts
|-- sys
|-- system
|-- ueventd.grouper.rc
`-- ueventd.rc
system.img是将被挂载在上面的树中空系统目录上的分区映像。 它包含运行Android操作系统所需的二进制文件。 它包括系统应用程序,字体,框架JAR文件,库,媒体编解码器等。 显然,这是Android用户在刷新新ROM时最感兴趣的文件。
系统映像也是使大多数Android用户对刷新自定义固件产生兴趣的文件。 设备制造商提供的系统映像文件通常充满了不必要的应用程序和自定义项,非正式地称为bloatware。 删除过时软件的唯一方法是用更理想的系统映像替换制造商的系统映像。
userdata.img是一个分区映像,它将被挂载在ramdisk目录树中可以看到的空数据目录上。 当您下载自定义ROM时,该映像通常为空白,用于重置数据目录的内容。
recovery.img与boot.img非常相似。 它具有引导加载程序可以使用的引导可执行内核文件和ramdisk。 因此,恢复映像也可以用于启动Android设备。 当使用它而不是Android时,将启动一个非常有限的操作系统,该操作系统允许用户执行管理操作,例如重置设备的用户数据,安装新固件以及创建备份。
使用恢复映像启动所需遵循的过程是特定于设备的。 通常,它涉及在进入引导加载程序模式,也称为FASTBOOT模式 ,通过按压设备上的本硬件键的组合,然后选择恢复选项。 例如,在Nexus设备上,您需要按住电源按钮以及降低音量按钮。
或者,您可以使用Android SDK中包含的工具adb直接进入恢复模式。
adb reboot recovery
3.使用fastboot
闪烁您的设备上的新固件的最简单方法是使用FASTBOOT工具。 fastboot遵循fastboot协议与Android设备通信。 但是,只有在以快速启动模式启动设备后才能执行此操作。 进入快速启动模式的最快方法是使用adb :
adb reboot bootloader
要刷新自定义ROM(以ZIP文件的形式提供),其中包含我在上一节中提到的所有映像文件,可以使用fastboot update
命令。 例如,这是如何刷新存在于名为update.zip的文件中的ROM的方法:
fastboot update update.zip
如果只想闪烁特定的映像,则可以使用fastboot flash
命令来这样做。 例如,以下是仅刷新系统映像的方法:
fastboot flash system system.img
同样,如果您只想替换启动映像,则可以使用以下命令:
fastboot flash boot boot.img
在实际将引导映像或恢复映像刷新到设备之前,先测试一下引导映像或恢复映像是否正常工作是一个好主意。 为此,可以使用fastboot boot
命令。 例如,这是您检查自定义恢复映像twrp.img是否与您的设备兼容的方法:
fastboot boot twrp.img
请注意,如果未解锁设备的引导程序,则本节中提到的fastboot命令均不起作用。
结论
您现在知道什么是Android固件以及如何更换它。 我想让您了解更换固件是一项冒险的操作,有可能使您的设备无法使用。 在大多数情况下,这也会使设备的保修失效。 在继续尝试刷新自定义固件之前,请确保已备有数据备份和设备出厂映像的副本。