Android 镜像

软件环境:Ubuntu20.04,AOSP
硬件环境:x86 PC,Arm64开发板 
目标:介绍Android编译出的各种img

1. 介绍

    在编译Android时看到各种.img,有的还有_a.img后缀,它们究竟都有什么作用?
这篇文章将以cuttlefish平台和某Arm64平台Android12进行介绍。

2. 镜像介绍

#boot:Android12中包含 GKI内核 + 通用ramdisk;Android13 仅有GKI内核,ramdisk移到init_boot
#dtbo:存放设备树,解压后会有多个.dtb文件
#vendor_boot:特定于供应商的信息从boot分离出来,linux5.4 Android11必须支持,包含Vendor boot header + vendor ramdisk + dtb + bootconfig
#vendor_dlkm:super中的动态分区,存储供应商内核模块。将供应商内核模块存储在vendor_dlkm分区(与vendor分区相反)可以在不更新vendor分区的情况下更新内核模块,包含odm ko + modprobe + modules.load
#system_dlkm:super中的动态分区,Android13要求,GKI模块在super中命名为system_dlkm,包含ko + depmod
#system_ext:super中的动态分区,Android11引入,可以使用system资源并且可以包含以下系统模块的新分区:
在system分区中扩展 AOSP 系统模块。我们建议将此类模块上传到 AOSP,以便稍后将它们安装到system分区。
捆绑 OEM 或 SoC 特定模块。我们建议取消捆绑此类模块,以便将它们安装到product或vendor分区。
#product:super中的动态分区,此分区现在可以使用允许的接口来安装未与任何其他分区捆绑的产品特定模块。
#misc:此分区由恢复和升级使用,大小为 4 KB 或更大 
#cache:此分区存储临时数据,如果设备使用无缝更新,则该分区是可选的。缓存分区不需要可从引导加载程序写入,但需要可擦除。分区大小取决于设备类型和用户数据空间的userdata ;通常,50 MB–100 MB 就足够了。
#metadata:当设备使用元数据加密时,此分区用于存储元数据加密密钥。大小为 16 MB 或更大。它未加密,其数据未快照。当设备恢复出厂设置时,它会被擦除。此分区的使用受到严格限制。
#userdata:此分区包含用户安装的应用程序和数据,包括自定义数据。 

2. 镜像解析

下述使用的unpack_bootimg,simg2img,lpunpack工具均为aosp中的,在aosp源码工程中可用。

2.1 boot.img

#unpack_bootimg工具可以解析boot.img,vendor_boot.img和recovery.img
unpack_bootimg --boot_img boot.img --out ./
unpack_bootimg --boot_img vendor_boot.img --format info 

#解压后为:kernel image + ramdisk
ramdisk.img 是一种lz4压缩格式内存根文件系统

2.2 dtbo.img

#将dtbo.img/boot_dtbo.img转换为dtb,一个dtbo.img会包含多个dtb
mkdir dtbo && mkdtimg dump dtbo.img -b dtbo/dtb

#将dtb.0转化为0.dts
dtc -I dtb -O dts -o dtbo/0.dts dtbo/dtb.0

#一次多转
find ./dtbo -name 'dtb.*' | xargs -n1 sh -c 'dtc $1 -o $1.dts' sh 

2.3 vendor_boot.img

#unpack_bootimg工具可以解析boot.img和vendor_boot.img
./out/host/linux-x86/bin/unpack_bootimg --boot_img boot.img --out ./
unpack_bootimg --boot_img vendor_boot.img --format info 

2.4.Super.img

#如果是sparse格式先解析为raw格式
simg2img super.img super_raw.img
#如果是raw直接解析
lpunpack super.img super
#cuttlefish super解压后:
odm_a.img odm_dlkm_a.img product_a.img system_a.img system_ext_a.img vendor_a.img vendor_dlkm_a.img
odm_b.img odm_dlkm_b.img product_b.img system_b.img system_ext_b.img vendor_b.img vendor_dlkm_b.img
#A super解压后:
product_a.img product_b.img system_a.img system_b.img system_ext_a.img system_ext_b.img vendor_a.img vendor_b.img vendor_dlkm_a.img vendor_dlkm_b.img 
#super下镜像都可以mount之后查看内容
mkdir system_a & sudo mount -o ro system_a.img system_a
  • system_ext

    很多库,服务,
    
  • product

    Etc media lib64等目录文件
    
  • vendor_dlkm

    A没啥实质上的东西
    
  • odm

    trout看起来没啥实质
    
  • odm_dlkm

    trout看起来也没啥实质
    

2.5 metadata/userdata

#如果为sparse转为raw
simg2img metadata.img metadata_raw.img
#挂载访问
mkdir metadata && sudo mount -o ro metadata_raw.img metadata 

2.6 vbmeta

vbmeta.img,vbmeta_system.img好像暂时没找到解析方法

3.镜像格式

镜像如果是RAW格式,占用空间大,sparse格式为稀疏,节省空间
TARGET_USERIMAGES_SPARSE_EXT_DISABLED := false 将userdata 稀疏
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值