Android AOSP编译后的镜像文件

Android AOSP编译后会在out目录下生成多个image文件:
boot.img,cache.img,system.img,userdata.img,ramdisk.img,recovery.img。下面对这几个img做一个简单的介绍

system.img
system.img在Android启动后会被挂载到system目录(在init.rc环节通过mount挂载)。
system.img包含了Android系统的主要的目录和文件,解压后的目录如下:
app目录:存放系统预制APK
bin目录:存放Linux工具
etc目录:存放系统配置
framework目录:存放系统所有的jar包和资源文件
lib目录:存放系统共享库
media目录:存放多媒体资源
priv-app目录:4.4后增加的用于存放系统核心的APK
tts目录:存放系统的语音合成文件
usr目录:存放键盘布局,时间区域文件
vendor目录:存放第三方厂商配置文件,firmware以及动态库
xbin目录:存放系统管理工具
build.prop文件:系统属性的定义文件

userdata.img
userdata.img在Android启动后被挂载到data目录(在init.rc环节通过mount挂载)。
userdata.img主要用于存储用户数据,这些数据一般是使用过程中产生的(比如安装APK),但是也可以预制APK到userdata.img中,这些预制的APK用户可以删除。
除此之外,userdata.img还可以确定设备内存的大小。

ramdisk.img
ramdisk.img是Android编译生成的img文件(打包out目录下的root文件夹),其最后会和kernel一起打包生产boot.img。
ramdisk.img中主要是存放android启动后第一个用户进程init可执行文件和init.*.rc等相关启动脚本以及sbin目录下的adbd工具。

boot.img
boot.img包含了kernel(二进制文件zImage)和ramdisk.img。
由于ramdisk.img中包含的init命令是与Linux内核第一个交互的程序,所以在boot.img中需要同时包含kernel和ramdisk.img。当kernel调用init后,系统就会根据init.rc及其相关文件的代码对整个Android系统进行初始化。
其中主要的初始化工作就是建立如/system、/data等系统目录,然后使用mount命令将相应的镜像挂载到这些目录上。(在device路径下的fstab.xxx文件定义了挂载img对应的路径,然后device路径下的init.xxx.rc执行mount_all)

recovery.img
recovery.img和boot.img一样,也是由kernel和ramdisk.img组成的。它们的kernel是一样的,recovery.img的ramdisk.img中的sbin目录多了一个recovery命令,从而开机后进入recovery界面,不会正常启动Android。

作者:xcz1899
链接:https://www.jianshu.com/p/3575fb134a50
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

### 编译 Android 13 AOSP 源码 #### 准备工作环境 为了顺利编译 Android 13 的 AOSP 源码,建议在一个干净的 Ubuntu 20.04 LTS 环境中操作。确保已经安装了必要的依赖包和工具链[^3]。 ```bash sudo apt-get update && sudo apt-get install git-core gnupg flex bison build-essential zip curl zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386 libncurses5-dev x11proto-core-dev libx11-dev lib32z1-dev libgl1-mesa-dev libxml2-utils xsltproc unzip fontconfig ``` #### 安装 Repo 工具并初始化仓库 Repo 是 Google 开发的一个 Python 脚本,用于管理多个 Git 项目。通过它可以从 GitHub 或其他托管服务获取整个 Android 源树。 ```bash mkdir ~/bin PATH=~/bin:$PATH curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo chmod a+x ~/bin/repo ``` 创建一个新的文件夹来保存源代码: ```bash mkdir ~/aosp cd ~/aosp repo init -u https://android.googlesource.com/platform/manifest -b android-13.0.0_rXX # XX代表具体的修订版本号 repo sync --no-tags --no-clone-bundle ``` #### 配置构建环境变量 进入源码根目录设置环境变量以便后续命令能够正常执行: ```bash source build/envsetup.sh lunch aosp_arm-eng ``` `lunch` 命令会配置一系列默认参数,其中 `eng` 表示开发者模式,适合调试;而 `userdebug` 则介于两者之间,更接近生产环境但仍保留一些日志输出功能[^1]。 #### 执行实际编译流程 当一切准备就绪后就可以启动编译过程了。这一步可能耗时较长取决于机器性能以及网络状况等因素影响。 ```bash m -j$(nproc) ``` 上述指令利用多线程加速编译速度(`-j`)选项指定了使用的 CPU 核心数,通常设为当前系统的最大核心数量可以加快进度[^4]。 #### 获取编译成果 一旦编译顺利完成,最终生成的镜像文件将会位于 `out/target/product/<device>/` 文件夹内,具体路径视所选设备型号不同有所变化。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值