Android是一个开源的操作系统,其项目的源码通过git可以从这个页面克隆:http://android.git.kernel.org/。因为Android是由Kernel、Dalvik、Bionic、Prebuilt、build等多个项目组成,如果我们分别用git来获取显得很麻烦,所以Android项目编写了一个名位Repo的Python的脚本来统一管理这些项目的仓库,使得项目的获取更加简单。

Google提供Android代码树包含了原始Android的目标机代码、主机编译工具、仿真环境。代码包经过解压缩后,第一级别的目录和文件如下所示:

  |-- Makefile (全局的Makefile

  |-- bionic Bionic含义为仿生,这里面是一些基础的库的源代码)

  |-- bootloader (引导加载器),我们的是bootable

  |-- build build目录中的内容不是目标所用的代码,而是编译和配置所需要的脚本和工具)

  |-- dalvik JAVA虚拟机)

  |-- development (程序开发所需要的模板和工具)

  |-- external (目标机器使用的一些库)

  |-- frameworks (应用程序的框架层)

  |-- hardware (与硬件相关的库)

  |-- kernel Linux2.6的源代码)

  |-- packages Android的各种应用程序)

  |-- prebuilt Android在各种平台下编译的预置脚本)

  |-- recovery (与目标的恢复功能相关)

  |-- system Android的底层的一些库)

|--vendor厂商定制代码,这部分我们可以维护自己的分支,比如有htc的分支

Google提供的Android代码树中驱动部分并没有实现,需要各厂商自己实现。厂商将驱动补充到Android代码树后对其进行编译,就可以得到可以部署到移动设备上的img文件,包括system.img,ramdisk.img,userdata.img。

编译完成Android系统后,生成的结果全部在根目录的out目录中,原始的各个工程不会改动。

out目录的结构如下所示:

out /
|-- host [主机内容]
| |-- common[主机的通用内容]
| | |-- obj
| |-- linux - x86[编译所生成的主机Linux上运行的工具]
| |-- bin
| |-- framework
| |-- lib
| |-- obj
|-- target[目标机内容]
|-- common[目标机的通用内容]
| |-- R
| |-- docs
| |-- obj
|-- product[目标机的产品目录]
|-- generic

out
/ target / product / generic中存放目标产品,默认情况下作为目标产品的名称
out
/ target / product / generic
|-- android - info.txt
|-- clean_steps.mk
|-- data[数据目录]
|-- obj[中间目标文件记录]
| |-- APPS[Java应用程序包]
| |-- ETC[运行时配置文件]
| |-- EXECUTABLES[可执行程序]
| |-- KEYCHARS
| |-- NOTICE.html
| |-- NOTICE.html.gz
| |-- NOTICE_FILES
| |-- PACKAGING
| |-- SHARED_LIBRARIES[动态库(共享库)]
| |-- STATIC_LIBRARIES[静态库(归档文件)]
| |-- include
| |-- lib
|-- previous_build_config.mk
|-- ramdisk.img[根文件系统映像]
|-- root[根文件系统目录]
|-- symbols[符号的目录]
|-- system[主文件系统目录]
|-- system.img[主文件系统映像]
|-- userdata - qemu.img[QEMU的数据映像]
|-- userdata.img[数据映像]

其中root、system、data三个目录分别是目标根文件系统,主文件系统和数据文件系统的目录,后缀名为.img的文件分别为它们所对应的映像文件。

编译后,运行模拟器:

$declare - xANDROID_PRODUCT_OUT = " {Androidroot}out/target/product/generic“
$. / out / host / linux - x86 / bin / emulator - shell

Android系统启动后,可以用ls -l 命令查看系统根目录: # ls-l
drwxrwxrwtrootroot 2010 - 03 - 12 19 : 26 sqlite_stmt_journalsdrwxrwx --- systemcache 2010 - 03 - 12 12 : 22 cache
d
--------- systemsystem 2010 - 03 - 12 19 : 26 sdcard
lrwxrwxrwxrootroot
2010 - 03 - 12 19 : 26 etc -> / system / etc
drwxr
- xr - xrootroot 2010 - 03 - 12 10 : 38 system
drwxr
- xr - xrootroot 1970 - 01 - 01 0 8 : 00 sys
drwxr
- x --- rootroot 1970 - 01 - 01 0 8 : 00 sbin
dr
- xr - xr - xrootroot 1970 - 01 - 01 0 8 : 00 proc
- rwxr - x --- rootroot 9075 1970 - 01 - 01 0 8 : 00 init.rc
- rwxr - x --- rootroot 1677 1970 - 01 - 01 0 8 : 00 init.goldfish.rc
- rwxr - x --- rootroot 106568 1970 - 01 - 01 0 8 : 00 init
- rw - r -- r -- rootroot 118 1970 - 01 - 01 0 8 : 00 default.prop
drwxrwx
-- xsystemsystem 2010 - 03 - 12 12 : 22 data
drwx
------ rootroot 1970 - 01 - 01 0 8 : 00 root
drwxr
- xr - xrootroot 2010 - 03 - 12 19 : 26 dev

sqlite_stmt_journals:

cache : 是缓存临时文件夹,据说是除了T-mobile的OTA更新外,别无用处。

sdcard:是SD卡中的FAT32文件系统挂载的目录。

etc :指向 /system/etc ,配置文件存放目录。

system :是一个很重要的目录,系统中的大部分东西都在这里

sys :用于挂载 sysfs文件系统。 在设备模型中,sysfs文件系统用来表示设备的结构.将设备的层次结构形象的反应到用户空间中.用户空间可以修改sysfs中的文件属性来修改设备的属性值

sbin: 只放了一个用于调试的adbd程序。

proc :/proc 文件系统下的多种文件提供的系统信息不是针对某个特定进程的,而是能够在整个系统范围的上下文中使用。

data :存放用户安装的软件以及各种数据。

root :什么都没有。

dev :设备节点文件的存放地。

Android根目录中主要文件夹与目标系统的out/target/product/generic/root内容相对应,此外etc,proc等目录是在启动后建立的。

system映像被挂载到根文件系统的system目录下,data映像被挂接到根文件系统的data目录中。

对于Android根文件系统的获取,ramdisk.img是模拟器的文件系统,将ramdisk.img复制一份到任何其他目录下,将其名称改为ramdisk.img.gz,并使用命令 gunzipramdisk.img.gz

然后新建一个文件夹,叫ramdisk吧,进入,输入命令

cpio - i - F.. / ramdisk.img

这下,就能看见并操作ramdisk里面的内容了。

根据自己的需要对里面的内容修改之后,可以使用下列命令重新打包成镜像。

cpio - i - t - F.. / ramdisk.img > list
cpio
- o - Hnewc - Olk.img < list 

当前目录下生成的lk.img就是我们的新镜像了。

更多相关文章

  1. 详解Android 目录结构
  2. Android入门教程(四)之-------->Android工程目录结构介绍
  3. Android文件系统的提取方法(一)
  4. android的文件系统结构及其引导过程的初步理解
  5. Android 工程目录结构介绍
  6. android程序目录结构及分析

随机推荐

  1. 解决Android(安卓)SDK Manager更新、下载
  2. Android(安卓)Q适配(4)-------针对后台 Act
  3. 将网页变成灰色(只限IE)
  4. Android自定义属性 attr format取值类型
  5. android之帧动画实现
  6. Android设置全屏隐藏状态栏的方法
  7. Android(安卓)Studio 修改Logcat的颜色
  8. Android软件版本更新
  9. Android(安卓)LayoutInflater深度解析
  10. 如何获取GAID,Android(安卓)ID和IMEI