Android烂笔头

Android烂笔头

android 7.0之后使用了ninja编译系统。ninja非常方便查看编译进度。同时借助于out/build-xxxxxx.ninja也方便于分析编译过程。


文中所有xxxxxx代表设备代号

bootimage

  • 生成命令
rule rule35083
 description = Target boot image: out/target/product/xxxxxx/boot.img
 command = /bin/bash -c "out/host/linux-x86/bin/mkbootimg  --kernel out/target/product/xxxxxx/kernel --ramdisk out/target/product/xxxxxx/ramdisk.img --base 0x40000000 --ramdisk_offset 0x15000000 --kernel_offset 0x00080000 --tags_offset 0x14000000 --cmdline \"bootopt=64S3,32N2,64N2 buildvariant=eng\" --board 1499766116 --os_version 7.1.1 --os_patch_level 2017-06-05 --kernel_offset 0x00080000 --ramdisk_offset 0x15000000 --tags_offset 0x14000000 --output out/target/product/xxxxxx/boot.img"
build out/target/product/xxxxxx/boot.img: rule35083 out/host/linux-x86/bin/mkbootimg out/target/product/xxxxxx/kernel out/target/product/xxxxxx/ramdisk.img
rule rule35084

以上可以确定,bootimg的组成,偏移已经kernel参数等。

  • kernel

kernel使用的文件为:
out/target/product/xxxxxx/obj/KERNEL_OBJ/arch/arm64/boot/Image.gz-dtb.bin
显然,Image.gz-dtb.bin代表gzip压缩,带dts的内核Image

  • ramdisk
 description = Target ram disk: out/target/product/xxxxxx/ramdisk.img
 command = /bin/bash -c "out/host/linux-x86/bin/mkbootfs -d out/target/product/xxxxxx/system out/target/product/xxxxxx/root | out/host/linux-x86/bin/minigzip > out/target/product/xxxxxx/ramdisk.img"
build out/target/product/xxxxxx/ramdisk.img: rule35082 out/host/linux-x86/bin/mkbootfs out/target/product/xxxxxx/root/file_contexts.bin out/target/product/xxxxxx/root/fstab.mt6758 out/target/product/xxxxxx/root/init out/target/product/xxxxxx/root/init.environ.rc out/target/product/xxxxxx/root/init.preload.rc out/target/product/xxxxxx/root/init.rc out/target/product/xxxxxx/root/property_contexts out/target/product/xxxxxx/root/sbin/adbd out/target/product/xxxxxx/root/sbin/fuelgauged_static out/target/product/xxxxxx/root/sbin/healthd out/target/product/xxxxxx/root/sbin/multi_init out/target/product/xxxxxx/root/seapp_contexts out/target/product/xxxxxx/root/selinux_version out/target/product/xxxxxx/root/sepolicy out/target/product/xxxxxx/root/service_contexts out/target/product/xxxxxx/root/init.zygote64_32.rc out/target/product/xxxxxx/root/init.zygote32.rc out/target/product/xxxxxx/root/init.usb.rc out/target/product/xxxxxx/root/init.usb.configfs.rc out/target/product/xxxxxx/root/ueventd.rc out/target/product/xxxxxx/root/factory_init.project.rc out/target/product/xxxxxx/root/init.project.rc out/target/product/xxxxxx/root/meta_init.project.rc out/target/product/xxxxxx/root/init.mt6758.rc out/target/product/xxxxxx/root/factory_init.rc out/target/product/xxxxxx/root/init.modem.rc out/target/product/xxxxxx/root/ueventd.mt6758.rc out/target/product/xxxxxx/root/init.sensor_bio.rc out/target/product/xxxxxx/root/meta_init.modem.rc out/target/product/xxxxxx/root/meta_init.rc out/target/product/xxxxxx/root/init.mt6758.usb.rc out/target/product/xxxxxx/root/init.recovery.mt6758.rc out/target/product/xxxxxx/root/enableswap.sh out/target/product/xxxxxx/root/init.microtrust.rc out/target/product/xxxxxx/root/init.volte.rc out/target/product/xxxxxx/root/multi_init.rc out/target/product/xxxxxx/root/init.rilproxy.rc out/target/product/xxxxxx/root/init.connectivity.rc out/target/product/xxxxxx/root/factory_init.connectivity.rc out/target/product/xxxxxx/root/meta_init.connectivity.rc out/target/product/xxxxxx/root/init.epdg.rc out/target/product/xxxxxx/root/init.common_svc.rc out/target/product/xxxxxx/root/init.aee.rc out/target/product/xxxxxx/root/default.prop || out/host/linux-x86/bin/minigzip

可以看到ramdisk里面包括,一些启动脚本,seandroid配置和默认prop。另外,可以看到ramdisk.img经过了gzip压缩。作为有志趣的少年郎,一定要解压看看。

文件信息

$ file out/target/product/xxxxxx/ramdisk.img
out/target/product/xxxxxx/ramdisk.img: gzip compressed data, from Unix

解压过程

zyitong@Z228M:/dev/shm/tmp$ mv ramdisk.img ramdisk.img.gz 
zyitong@Z228M:/dev/shm/tmp$ gunzip ramdisk.img.gz 
zyitong@Z228M:/dev/shm/tmp$ cpio -i -F ramdisk.img 
11258 块
zyitong@Z228M:/dev/shm/tmp$ find -type f 
./ueventd.rc
./ueventd.mt6758.rc
./service_contexts
./sepolicy
./selinux_version
./seapp_contexts
./sbin/multi_init
./sbin/healthd
./sbin/fuelgauged_static
./sbin/adbd
./property_contexts
./multi_init.rc
./meta_init.rc
./meta_init.project.rc
./meta_init.modem.rc
./meta_init.connectivity.rc
./init.zygote64_32.rc
./init.zygote32.rc
./init.volte.rc
./init.usb.rc
./init.usb.configfs.rc
./init.sensor_bio.rc
./init.rilproxy.rc
./init.recovery.mt6758.rc
./init.rc
./init.project.rc
./init.preload.rc
./init.mt6758.usb.rc
./init.mt6758.rc
./init.modem.rc
./init.microtrust.rc
./init.epdg.rc
./init.environ.rc
./init.connectivity.rc
./init.common_svc.rc
./init.aee.rc
./init
./fstab.mt6758
./file_contexts.bin
./factory_init.rc
./factory_init.project.rc
./factory_init.connectivity.rc
./enableswap.sh
./default.prop

systemimage

  • 生成

笔者什么都不想说

  • 解压
$ mkdir tmp
$ out/host/linux-x86/bin/simg2img out/target/product/xxxxxx/system.img /dev/shm/raw_system.img
$ sudo mount -t ext4 /dev/shm/raw_system.img tmp/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值