Android固件简介
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固件以及如何更换它。 我想让您了解更换固件是一项冒险的操作,有可能使您的设备无法使用。 在大多数情况下,这也会使设备的保修失效。 在继续尝试刷新自定义固件之前,请确保已备有数据备份和设备出厂映像的副本。
翻译自: https://code.tutsplus.com/articles/an-introduction-to-android-firmware--cms-26791
Android固件简介相关推荐
- 【译】Android系统简介—— Activity
续上一篇,继续介绍Android系统.上一篇: [译]Android系统简介 本文主要介绍构建Android应用的一些主要概念: Activity Activity是应用程序中一个单独的有UI的页面( ...
- Android ViewTreeObserver简介-------------转
Android ViewTreeObserver简介 一.结构 public final class ViewTreeObserver extends Object java.lang.Object ...
- android radiooptions简介
android radiooptions简介 RILD负责modem和RILJ端的通信,信息分两种:unsolicited和solicited,前者是由modem主动上报的,诸如时区更新.通话状态.网 ...
- Android 的简介和体系结构中每个层的功能。
Android 的简介和体系结构中每个层的功能. 1.简介 Android是由Google公司和开放手机联盟领导并开发的一种基于Linux的自由且开放源代码的操作系统,主要使用于移动设备. Andro ...
- Android字体简介
Android字体简介 Android系统默认支持三种字体,分别为:"sans","serif","monospace". android. ...
- Android OkHttp3简介和使用详解
一 OKHttp简介 OKHttp是一个处理网络请求的开源项目,Android 当前最火热网络框架,由移动支付Square公司贡献,用于替代HttpUrlConnection和Apache HttpC ...
- android 教程概要,Android精通教程-第一节Android入门简介
前言 大家好,我是 Vic,今天给大家带来Android精通教程-第一节Android入门简介的概述,希望你们喜欢 每日一句 If life were predictable it would cea ...
- Android HIDL 简介
Android HIDL 简介 Qidi 2017.08.01 (Markdown & Haroopad) 注意:本文基于 Android 8.0 进行分析. 0.特别声明 本文是在 HIDL ...
- Android开发-简介(一)
Android的简介: Android是一种基于Linux 内核和其他开源软件的修改版本的移动操作系统,主要为智能手机和平板电脑等触摸屏移动设备设计.Android是由一个被称为开放手机联盟的开发者联 ...
最新文章
- mysql统计不及格科目_SQL语句 统计各个学生的不及格科目数量及不及格率 ,2条语句...
- CSP认证201712-4	行车路线[C++题解]:单源最短路变型、拆点、好题!
- python中abc属于字符串吗_Python基础学习:字符串
- 转基因大豆提高大豆油脂产量80%
- 简陋版C语言仿真通讯录
- 《天天数学》连载30:一月三十日
- 微软职位内部推荐-Senior Network Engineer
- 数据结构笔记(十七)--矩阵的压缩存储
- 网页抓取软件-免费网页自动采集抓取任意内容软件
- 课设(房屋出租系统)
- Jquery(十)jqueryUI常用功能实战
- 阿里 java 电话面试_阿里Java开发电话面试经历--惨败
- html图片的边框属性,css3:border-image边框图像详解
- 阳春三月,正是樱花绽放时,借此机会给午饭献上鲜艳艳的视觉盛宴!
- git错误:error: failed to push some refs to
- python3封装微信分账功能
- 个人公众号注销方法_微信公众号怎么注销,注销方法
- 编程语言王国的唯一王者
- 这份最全微服务总结送给你,看完就会微服务
- 常见的文件后缀名和对应的编辑工具(上)
热门文章
- 简易新闻系统,功能包含用户登录、新闻发布删除、评论管理等
- SpingBoot+Quartrz生产环境的应用支持分布式、自定义corn、反射执行多任务
- 记一次低级错误:feign.FeignException: status 404 reading XXXClient#XXMethod(Long)
- 学生上课睡觉班主任怎么处理_学生上课睡觉老师应该怎么办?
- 解决 苹果ios input输入框弹出输入法 但是 无法输入内容问题
- Android Google Maps API教程-入门
- html如何画出抽奖的转盘,HTML5之CANVAS学习,实现抽奖转盘
- LeetCode 648. 单词替换
- 跳出多层for循环的几种方式
- 2020年java缺人_Java回顾#5 –到2020年,什么将改变Java世界?