Z1i高阶教程个性RO制作教程 -电脑资料

电脑资料 时间:2019-01-01 我要投稿
【www.unjs.com - 电脑资料】



   1、背景知识Android手机的文件系统有许多存储器组成,以下是在adb shell下面的输出:


#cat /proc/mtddev: 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"



**************************************

注意,不同的手机在上述存储设备的顺序可能会各不相同!一定要检查您的手机,

确定在以下的操作中选择正确的设备号(mtdX,这个X的序号一定要检查清楚),

Z1i高阶教程个性RO制作教程



**************************************

在本向导中,我们主要描述对"recovery"和"boot"的存储设备进行操作;

"system"存储设备保存了android系统目录的所有数据

(在系统启动后会挂载到“system/”目录);

“userdata”存储设备将保存了android数据目录中的所有数据

及用户的preference之类的配置数据)。

从上面的输出可以看出来,

recovery和boot分区对应着/dev/mtd/mtd1和/dev/mtd/mtd2,

在你您开始做任何修改之前一定要做两件事情,第一件事情,一定要先对这两个分区进行备份。

可以使用如下命令进行备份:

# cat /dev/mtd/mtd1 > /sdcard/recovery.img

# cat /dev/mtd/mtd2 > /sdcard/boot.img

(注意added by lxros,

只有手机获取了ROOT权限以后才能够执行上述的备份命令)

第二件事情,你您应该把你您最喜欢的update.zip刷机包放置到你您的sd卡的根目录上面。

如此一来,即使你您在后续的操作中出了问题,也可以启动到recovery模式进行恢复。

另外一个你您需要知道的重要文件是在android系统目录下的/system/recovery.img,

此文件是mtd1存储设备的完全拷贝。这个文件在每次关机的时候,会自动地被写回到mtd1存储

设备里面。

这会意味着两个事情:

(1)任何对/dev/mtd/mtd1中数据的直接修改都会在下一次重启手机以后消失。

(2)如果希望对/dev/mtd/mtd1进行修改,

最简单的做法是用你您自己的recovery.img替换掉/system/recovery.img。

当你您创建自己的update.zip刷机包的时候(特别是在做刷机包的适配的时候),

如果你您忘记替换这个/system/recovery.img,

这个recovery.img就会在关机的时候被烧写到mtd1里面去或许会变砖。

一定要注意这一点!(译者的话,关于这个/system/recovery.img文件,

在2.1的android的平台里面并没有找到,或许这个机制已经out了?!

或者偶本人对这段话的理解不够深入?!希望明白的朋友不吝斧正)



   2、boot和recovery映像的文件结构boot和recovery映像并不是一个完整的文件系统,
它们是一种android自定义的文件格式,该格式包括了2K的文件头,

后面紧跟着是用gzip压缩过的内核,再后面是一个ramdisk内存盘,

然后紧跟着第二阶段的载入器程序(这个载入器程序是可选的,在某些映像中或许没有这部分),

电脑资料

Z1i高阶教程个性RO制作教程》(https://www.unjs.com)。

此类文件的定义可以从源代码android-src/system/core/mkbootimg找到

一个叫做bootimg.h的文件。(译者的话,原文是一个叫做mkbootimg.h的文件,

但从Android 2.1的代码来看,该文件名应该是改为bootimg.h了)。

/*

** +-----------------+

** | boot header | 1 page

** +-----------------+

** | kernel | n pages

** +-----------------+

** | ramdisk | m pages

** +-----------------+

** | second stage | o pages

** +-----------------+

**

** n = (kernel_size + page_size - 1) / page_size

** m = (ramdisk_size + page_size - 1)/ page_size

** o = (second_size + page_size - 1) / page_size

**

** 0. all entities are page_size aligned in flash

** 1. kernel and ramdisk are required(size != 0)

** 2. second is optional (second_size== 0 -> no second)

** 3. load each element (kernel, ramdisk, second) at

** the specified physical address (kernel_addr, etc)

** 4. prepare tags at tag_addr. kernel_args[] is

** appended to the kernel commandline in the tags.

** 5. r0 = 0, r1 = MACHINE_TYPE, r2 = tags_addr

** 6. if second_size != 0: jump to second_addr

** else: jump to kernel_addr

*/



**************************************

ramdisk映像是一个最基础的小型文件系统,它包括了初始化系统所需要的全部核心文件,

例如:初始化init进程以及init.rc(可以用于设置很多系统的参数)等文件。

如果你您希望了解更多关于此文件的信息可以参考以下网址:

http://git.source.android.com/?p=kernel/common.git;a=blob;
f=Documentation/filesystems/ramfs-rootfs-init
最新文章