Android ROM 备书

时间:2022-06-22 22:35:39

1. Android ROM 目录接口

  我们经常说的刷ROM是刷系统的意思,但是ROM的原意并不是这样,ROM的全称是read only memory只读储存器,正因为它是“只读”的,而且系统文件通常都会存储在手机ROM里,但这个只读是有条件限定的,通常情况下我们只能读,但在特殊情况下我们可以对ROM进行写操作,往ROM里写入新的系统文件的过程,就是刷机,也称“刷ROM”,而把系统文件包叫做了ROM(包)。

Rom包的文件结构,

  一般Rom文件包下有以下文件:

  1).  META-IN

    META-INF: 内含升级脚本及ROM的签名

  2).  data           

    data:顾名思义,是一个存储数据的文件夹,如安装第三方app会保存在data/data/app目录下

  3).  boot.img

    Boot.img: android内核文件

  4).  system

    System文件夹下还有以下文件或文件夹:

      [1]. app : 放置系统软件的目录,所以内置软件就是在制作Rom包的时候把apk文件放入此文件夹

      [2]. bin:Android系统本地程序,主要是Linux系统自带的组件

      [3]. Etc文件夹 : 放置android系统配置文件,如apn文件等

      [4]. Fonts文件夹:放置字体文件,包含标准字体和粗体、斜体、中文、英文等

      [5]. Framework文件夹:放置android系统平台框架文件及布局控制

      [6]. Lib文件夹:放置系统底层库及运行库文件

      [7]. Media文件夹:放置系统铃声音乐文件夹及开机动画文件,需要说明一下开机动画其实是多张静态图片的帧动画效果

      [8]. Tts文件夹:放置手机的语音文件

      [9]. Usr文件夹: 放置用户文件,包含共享、键盘布局、时间区域文件等

      [10]. Vendor文件夹:放置ROM厂商定制内容

      [11]. Xbin文件夹:放置用户系统支持程序文件

      [12]. Build.prop文件:系统属性配置文件,如我们在设置-关于里看到的内容

2. Android 文件系统

Android ROM 备书

  You can know which partitions are available along with the partition size for all partition in your android device. Go through the below image and run the adb command as shown in that image. For more adb commands, you can read my atricle Useful adb Commands for Android Development. Also for more details for android architecture, you can read my article Android Architecture

http://techblogon.com/android-file-system-structure-architecture-layout-details/

Android ROM 备书

  以上我们大概分析了下android ROM 包目录结构和android 手机的文件系统结构,有没有发现rom包和android 文件系统结构有某种对应关系呢?

  下面我们再进一步,从自己生成rom包 和 分析刷机过程, 来进一步了解android ROM 和 文件系统的一些更层次的东西,渐渐把我们带入android内核的研究。

3.  android源代码编译 以及 镜像文件(ramdisk.img   system.img   userdata.img)

  1). 编译android 源码, 暂时不做展开,后续会展开,可参考如下链接

    http://blog.csdn.net/luoshengyang/article/details/6559955

    2).  系统镜像文件  

   编译完成后,可以在源码目录的out/target/product/generic/目录下看到编译好的ramdisk.img、system.img 和 userdata.img。其中,

    ramdisk.img 是 emulator的文件系统,

    system.img 包括了主要的包、库等文件

    userdata.img包括了一些用户数据

    emulator负责加载这3个映像文件后,会把system.img和userdata.img分别加载到 ramdisk 文件系统中的 system 和 userdata 目录下(会发觉有相似性)。

    我们会发觉编译生成的root 文件夹 内容与android运行时根目录内容相似。

    ramdisk 根文件系统中包含一些对于启动android的很重要的文件,比如内核启动完后加载的第一个进程init、一些重要的配置文件等,总之它控制着整个android的启动。根据 init.rc, init.goldfish.rc 来初始化并装载系统库、程序等直到开机完成。

    init.rc脚本包括了文件系统初始化、装载的许多过程。

    init.rc的工作主要是:
      1)设置一些环境变量
      2)创建system、sdcard、data、cache等目录
      3)把一些文件系统mount到一些目录去,如,mount tmpfs tmpfs /sqlite_stmt_journals
      4)设置一些文件的用户群组、权限
      5)设置一些线程参数
      6)设置TCP缓存大小

    生成的system.img , ramdisk.img , userdata.img 映像文件是采用cpio打包、gzip压缩的,可以通过file命令验证: file ramdisk.img,输出: ramdisk.img: gzip compressed data, from Unix, last modified: Wed Mar 18 17:16:10 2009 ,我们可以学习怎么样把 ramdisk.img解压出来。将ramdisk.img复制一份到任何其他目录下,将其名称改为ramdisk.img.gz,并使用命令 gunzip ramdisk.img.gz,然后新建一个文件夹,叫ramdisk吧,进入,输入命令cpio -i -F ../ramdisk.img,这下,你就能看见并操作ramdisk里面的内容了。然后把Android源码编译后生成的system和 userdata里的文件复制到 ramdisk/system 和 ramdisk/userdata下。这样就得到一个文件系统了。
还会发现,根文件系统下的sys就是一个 linux 。 (内核?)
   3).  系统加载 
    在android 1.5 模拟器 上加载 android 2.1 的系统: 本文编译出来的3个img文件是2.1版的。可以用system.img和ramdisk.img 替换1.5的版本:
    命令如下:
      emlator -avd sdk_1_5 -ramdisk [ramdisk.img路径] -system [system.img的路径]

      打开android 1.5的模拟器 ,同时加载 system.img 和 ramdisk.img

      启动后可以看到设置中的 手机 版本变成了2.1版。

4.  android ROM 和 android 文件系统综合应用( 刷机 )

1).  recovery

    recovery 就是你用 home键+开机键 开机后能进入的一个界面(工程模式),在这个界面你可以直接用sd 卡上的zip的rom升级或者备份你的系统.

    如何更新recovery?

    1、 Reboot system now——重启

    2、 Backup/Restore——备份和还原
      可以完整的将系统备份至SD卡中,适合经常刷机的朋友。备份还原中还包含以下选项
      Nand backup——Nand 备份
      Nand + ext backup——Nand 备份(系统和ext 分区一同备份)
      Nand restore——还原(就是还原3-1、3-2 的最后一次备份)
      BART backup——BART 备份 (包括系统和ext 分区)
      BART restore——还原最后一次的BART备份

    3、Flash zip from sdcard——从sd卡根目录的.zip ROM 刷机包刷机
      这项算是常见的了,现在的新版本的recovery,一般都不需要把刷机包重命名为UPDATE.ZIP了,可以直接刷机。

    4、Wipe——清除数据
      这一项一般是在刷机前需要做的,清空个人数据,一般这个大项还包括以下的小项。
      Wipe data/factory reset——清除内存数据和缓存数据
      Wipe Dalvik-cache——清除缓存数据 + ext 分区内数据
      Wipe SD:ext partition——只清除ext 分区内数据
      Wipe battery stats——清除电池数据
      Wipe rotate settings——清除传感器内设置的数据

    5、Partition sdcard——分区sd 卡
      这个选项主要是用来做APP 2 SD的,需要将卡分为LINUX下的格式ext,一般有以下选项。
      Partition SD——自动为sd 卡分区
      Repair SD:ext——修复ext 分区
      SD:ext2 to ext3——将ext2 分区转换为ext3 分区(推荐)
      6-4、SD:ext3 to ext4——将ext3 分区转换为ext4 分区(C4 卡不推荐,C6 卡推荐)

2).  fastboot

  从字面上来看是【快速启动】的意思,也算是一个刷机界面,不过比recovery更加底层。这个底层是更加接近硬件层的意思。
  两个都很重要,不过fastboot更为主要。当你不能进入recovery的时候,不要紧张,你还能进fastboot挽救,不过当你连fastboot都不能进入的时候,那可真就是砖了。
  为了使用Fastboot功能。您必须root您的设备;并获得S-OFF的SPL;你的电脑还必须装有ADB驱动。

  进入Fastboot的方式是关机状态下按返回+开机.

  Fastboot使用方式:

fastboot [ <选项> ] <命令>         []可选的;      <>必须的.

  可用命令:
    update <文件名>                         从官方update.zip升级系统。该update.zip必须是官方的
    flashall                                       'flash boot' + 'flash system'
    flash <分区名> [ <文件名> ]          将文件写入分区。文件必须正确的格式.分区名有但不限于system,recovery,boot,splash1,hboot,radio,userdata,cache
           erase <分区名>                            清空一个分区.
           getvar <参数名>                           显示一个启动参数
           boot <内核文件> [ <ramdisk文件> ] 将电脑上的内核下载到手机并用该内核启动系统.
           flash:raw boot <内核文件> [ <ramdisk文件> ] 创建boot.img并下载到手机启动系统.
           devices 列出所有与电脑连接的设备.
           reboot 正常启动系统
           reboot-bootloader 启动系统到hboot

  选项:
    -w 清空用户数据分区和缓存分区.相当于recvery中的"wipe data/factory reset"
    -s <串口号> 置顶要操作的设备的串口号
    -p <产品名> 指定要操作的设备的产品名.比如hero,bravo,dream...
    -c <命令行> 用命令行替换系统的启动命令行.

  分区解释:

    hboot:   这个是SPL所在的分区。也是fastboot所在的分区。

           SPL英文全称是Second Program Loader (第二次装系统),就是负责装载操作系统到RAM中,主要作用就是引导系统启动。SPL一般提供这几部分功能:

          检测手机硬件、寻找系统启动分区、启动操作系统为系统的基本维护提供操作界面,可以通过数据线与操作终端(如PC)建立连接,并接受和执行相应命令。

    boot:      存放内核和ramdisk的分区。

    system:    系统分区; 我们刷机器一般就是刷的这个分区。
    userdata:  数据分区.
    cache:     缓存分区
    recovery:  Recovery分区.

    splash1:   这个就是开机第一屏幕了.
    radio:     通讯模块,手机里面负责信号部分的模块。最简单的理解为无线(包括蓝牙 通话 WIFI)的驱动程序所在的分区。
    misc:    其他分区.放的是htc的一些东西.

    比如你的机器是G3。那么您的机器需要具备的条件是: SPL版本1.76.2007 S-OFF

    现在您需要刷recovery。那么您需要找对recovery版本。推荐RA-hero-1.6.2.img

    将您的RA-hero-1.6.2.img和fastboot.exe放入系统的某一目录.比如D:\

    点击开始-->运行-->输入cmd-->回车.
    在黑色的窗口中输入.
    D: <回车>
    fastboot.exe flash recovery d:\RA-hero-1.6.2.img <回车>

   总结

  最后一部分,我们讨论了android刷机,目的不是为了(不是去抢刷机小摊贩的饭碗啊),也不是意在普及如何来刷机,刷机的过程是如何的,主要目的是想通过刷的过程,以及刷机涉及的操作,来直观的认识下android手机的文件系统,硬件分区等,并窥探下android 内核文件可能的分布,加载,内核的运行等等,该文章从简单的显示中可以遇到的情况入手,并引导和引出对android内核的学习与分析。

参考:

1.  Android File System Structure/Architecture/Layout Details         http://techblogon.com/android-file-system-structure-architecture-layout-details/

2.  编译android源代码以及ramdisk.img system.img userdata.img       http://my.oschina.net/u/561492/blog/90289

  3.   关于APK、ROM、SPL、Superuser、ROOT、recovery                   http://bbs.anzhi.com/thread-9812-1-1.html