三防平板电脑的刷机就是将操作系统和应用程序重新装入计算机的一个过程,操作系统和应用程序是由工具软件封装而成的压缩包或者镜像包,作为平板电脑的刷机文件来使用。平板电脑中的刷机文件有时也称为刷机固件,还有的叫做刷机包、ROM 包(因为平板电脑中存放固件的闪存芯片是 ROM 中的一种,所以又叫 ROM 包)。我们自己通常使用的刷机固件内一般不包括引导加载程序,如 U-Boot 代码等。当把刷机文件刷入电脑后,刷机压缩包或者镜像包就会进行自解压、复制、安装等操作,将操作系统和应用程序安装到平板电脑中,此时平板电脑就可以正常运行了。
我们所使用的刷机文件其格式多种多样,平常用到的有以.zip 结尾的压缩文件、以.img结尾的镜像文件(又叫映像文件,简称映像)、以.bin结尾的二进制文件,还有以.fw为结尾的固件文件等,这些不同结尾的文件是使用不同的工具软件和程序经过打包封装后形成的。例如,使用 RAR 压缩软件可以将多个文件及多个文件夹等压缩成一个.zip 结尾的压缩包,使用mkimg工具软件或者UltraISO可以将多个文件及多个文件夹等封装成为一个以.img结尾的镜像包,其他的.bin和.hex以及.fw等工具软件都是通过不同的工具程序制作而成。
那么这么多不同格式的刷机文件在压缩打包之前是如何得来的呢?是经过编译器编译形成的。因为程序设计人员所编写的代码一般 CPU 并不能读懂,只有经过编译器编译变成二进制的机器码以后,CPU 才能读懂这些代码并按要求执行具体的操作。代码经过编译后会形成一个或多个文件及文件夹,经过打包封装后就形成刷机文件了。
那么编译之前的文件是如何得来的呢?是由程序设计人员编写的,包括很多文件及文件夹和工具软件等,这些人工编写的代码还需经过编译才能被CPU识别和使用。
那么这些文件是怎么被编译的呢?由于操作系统不同,甚至 CPU 或者硬件不同,编译器都会有所不同,而且编译器的称呼和名称各不相同。下面就以平板电脑中常见的安卓(Android)系统为例说明编译过程,希望能够对平板电脑的刷机和维修起到进一步的分析和理解作用。
编译对计算机的硬件有些要求,否则不能完成编译,大致要求如下:Linux 操作系统的ubuntu或Widnows操作系统的XP或以上版本,CPU双核或四核,内存保证在2GB以上,硬盘空间50G以上。
下面是Android 系统的编译过程和步骤(因为Android版本不同,所以编译步骤不会完全一样,仅供参考):
(1)安装必要的软件环境
安装Java sdk,执行JDK安装文件,配置JDK环境变量,安装依赖包(一些其他的工具程序)。
(2)设置环境变量
设置环境变量的作用是告诉编译器相关工具程序所在磁盘的具体位置,通常使用 export来设置环境变量,例如如下语句:
#export JAVA_HOME=
#export CLASSPATH=
#export PATH=
(3)安装repo(用来更新Android源码)。
(4)初始化repo。
(5)设置Git。
Git 是 Linux Torvalds 为了帮助管理 Linux 内核而开发的一个开放源码的分布式版本控制系统,因为Android是由Kernel、Dalvik、Bionic、Prebuild、Build等多个Git项目组成,所以Android项目编写了一个名为repo的python的脚本来统一管理这些项目的仓库,使得Git的使用更加简单。
(6)同步源代码
① 创建工程目录,例如如下命令:
$ mkdir myandroid
$ cd myandroid
② repo初始化以及同步代码,命令如下:
$repo init -u https://android.googlesource.com/platform/manifest
在此过程中需要输入名字和email地址。初始化成功后,会显示:
repo initialized in /android
在~/android下会有一个.repo的隐藏目录:
$repo sync同步(“repo sync”开始下载源代码,其大小约为4GB左右,这一步会花费很长的时间,根据平板电脑配置和网速不同,可能需要几个小时、十几个小时,甚至几十个小时不等)。
下载完源代码后,在源码目录里大致有以下一些目录和文件:
|--Makefile|--bionic (bionic C库)
|--bootable (启动引导相关代码)
|--build (存放系统编译规则及generic等基础开发包配置)
|--cts (Android兼容性测试套件标准)
|--dalvik (经过Google优化了的Java虚拟机)
|--development (应用程序开发用的一些文件夹,包括模拟器和工具等)
|--external (Android使用的一些外部功能库)
|--frameworks (核心框架—Java及C++语言)
|--hardware (和硬件有关的一些HAL代码)
|--out (编译完成后的代码输出到此目录)
|--bionic (Android编译过程所需要的一些库)
|--repo (主要是同步管理所用到的一系列文件)
|--packages (应用程序包)
|--prebuilt (x86和ARM架构下预编译的一些资源)
|--sdk (SDK及模拟器)
|--system (文件系统库、应用及组件—C语言)
`--vendor (厂商定制代码)
(7)编译Android源码
源码是由程序设计人员编写的代码,又叫源代码,这类代码只有经过(编译器/编译程序)编译后,成为二进制的机器码,才能被 CPU 识别和运行,所以代码下载完成后需要进行编译。为了保证编译成功,一般需要增加SWAP分区的大小。编译的步骤如下:
编译初始化;
选择编译目标;
在终端执行下面的命令:
lunch
执行命令后选择你要编译的设备,初始化编译的相关文件。
$ cd myandroid
$ make(开始编译,此过程需要很长时间,根据机器配置不同,大约需要几个小时左右)
Android 编译完成后,将会在根目录下生成一个 out 文件夹,所有生成的内容均放在这个文件夹中。
Out文件夹中有相关目标机的主要文件夹out/target/product/generic/里的文件内容:
|-- android-info.txt
|-- clean_steps.mk
|-- data
|-- obj
|--ramdisk.img
|-- root
|-- symbols
|-- system
|--system.img
|--userdata.img
说明:system 目录是主要的文件系统;data 目录是存放数据的文件系统。以.img 结尾的文件是目标映像文件,其中 ramdisk.img 是作为内存盘的根文件系统映像,system.img 是主要文件系统的映像,userdata.img 是数据内容的映像。这几个 image 文件是运行时真正需要的文件。
(8)使用模拟器emulator,在模拟器上运行编译好的镜像文件:
$ emulator -system system.img -data userdata.img -ramdisk ramdisk.img
最后进入 Android 桌面,这就说明编译成功了。此时并没有编译 Linux 内核(Kernel),只是模拟运行,包括模拟一些尚未创建的环境(包括内核和CPU)。
(9)编译模块
Android 中的应用程序可以单独编译,编译后生成相对应的以.apk 为结尾的 APK 包,编译后要重新生成system.img。
(10)编译SDK
形成Android的开发工具,开发应用程序的工具包集合,是整体开发中所用到的工具包。
(11)编译Linux内核映像
在Android源码中,并不包括Android的Linux内核,所以Linux内核还需要单独下载和编译。
准备交叉编译工具链;
设定环境变量;
复制或者下载合适的内核源代码,例如,Linux-2.6.30或者其他版本的源代码;
解压上述内核源码;
设定交叉编译参数;
Nand backup—NAND备份;
Nand + ext backup—NAND备份(系统和ext 分区一同备份);
Nand restore—NAND还原;
BART backup—BART 备份 (包括系统和ext 分区);
BART restore—还原最后一次的BART备份;
Flash zip from sdcard—从SD卡根目录的.zip刷机升级;
Wipe—清除数据;
Partition sdcard—SD卡分区(现在多为TF卡)。
Fastboot:
从字面上理解就是“快速引导”的意思,其实Fastboot也是一个程序,此模式下不加载内核及文件系统,它比Recovery更底层,更接近硬件层,当不能进入Recovery的时候,可以进入该模式试试,不过在该模式下需要和电脑相连,平板电脑的 USB 口有 OTG 功能,并且电脑端需要装有ADB驱动(Android Debug Bridge,Android debug工具,是一个客户端—服务器端的程序, 其中客户端是用来操作的电脑或者一个终端,服务器端是 Android设备如平板电脑。ADB 驱动就是三防平板电脑与 Android 设备通信的客户端驱动程序。例如手机管家和卓大师刷机专家等都是通过ADB驱动来进行管理设备的),常用的功能有:
update:更新、刷机;
flashall:刷入单个或者多个镜像文件,如 boot.img、system.img、recovery.img 镜像文件;
erase <partition>:擦除单个或者多个镜像。