记一次客户提供的super.img和自己编译出来的不匹配的解题过程

重新理清思路:

  1. 刷了编译出来的super.img之后camera service无法起来
  2. Camera service 无法起来是因为data目录没有挂载
    1). data目录挂载点是/dev/block/sda5
    2). 目录挂载读取的是/vendor/etc/fstab文件
  3. Camera service会被打包成system.img,provider相关修改有以下4个地方:
    1). Manifest: /vendor/etc/vintf/manifest.xml
    2). Provider binary: /vendor/bin/hw/android.hardware.camera.provider
    3). shared library: /vendor/lib64/hw/camera.XXX.so
    4). Init.rc: /system/etc/init/hw/init.rc(可以通过setprop的方式临时修改,重启会失效)
  4. 从以上可以看出,主要修改点在vendor.image
  5. .经lpunpack解包之后本地编译的super.img和bst提供的super.img不一样
  6. vendor.img通过挂载的方式,无法修改vendor.img

问题的关键在于第6点,如果能修改vendor.img一切问题就迎刃而解了。在尝试各种挂载命令之后,vendor.img依然无法修改。

思路转变一下,如果把vendor.img以只读的方式挂载之后,拷贝挂在后的目录,在新拷贝的目录下修改,最后重新打包vendor.img和super.img,或许是一种可行的方法,经多次尝试以后,按照以下步骤问题解决:

$ mkdir -p tmp/vendor_mnt
$ simg2img super.img super_raw.img
$ lpunpack super_raw.img tmp
$ cd tmp
$ mount -o ro vendor.img vendor_mnt
$ cp -r vendor_mnt vendor_cp
把修改后的内容拷贝到vendor_cp
将vendor_cp拷贝到android_platform/out/target/product/PROJECT
$ rm vendor*.img
$ make vendorimage

1.此时生成了新的vendor.img,这个vendor.img是基于客户提供的vendor.img附带了我们的修改
2.通过file查看vendor.img,这个img是sparse文件类型的,需要通过simg2img生成Linux rev 1.0 ext2
3.将vendor.img拷贝回步骤4的tmp目录 执行lpmake.sh,需要修改第12行vendor.img的大小

lpmake.sh:

  1 lpmake  \
  2     --metadata-size 65536                                                \
  3     --super-name super                                                   \
  4     --metadata-slots 2                                                   \
  5     --virtual-ab                                                         \
  6     --device super:3221225472                                            \
  7     --group bst_dynamic_partitions:3210739712                            \
  8     --partition system:readonly:1158778880:bst_dynamic_partitions        \
  9     --image system=system.img                                            \
 10     --partition system_ext:readonly:114483200:bst_dynamic_partitions     \
 11     --image system_ext=system_ext.img                                    \
 12     --partition vendor:readonly:215457792:bst_dynamic_partitions         \
 13     --image vendor=vendor.img                                            \
 14     --partition product:readonly:328126464:bst_dynamic_partitions        \
 15     --image product=product.img                                          \
 16     --partition vendor_dlkm:readonly:10448896:bst_dynamic_partitions     \
 17     --image vendor_dlkm=vendor_dlkm.img                                  \
 18     --sparse                                                             \
 19     --output ./super.img

附:bootimg的打包方式

mkdir bootfs
simg2img ./boot_src.img boot.img.ext4
mount -t ext4 -o loop boot.img.ext4 ./bootfs
cp -fr build/arch/arm64/boot/dts/*.dtb ./bootfs
cp -fr build/Image.itb ./bootfs
make_ext4fs -l 128M -s boot.img ./bootfs

参考博客:
[1]: https://blog.csdn.net/yiqingyang2012/article/details/125514590
[2]: https://blog.csdn.net/guyongqiangx/article/details/132581720

  • 7
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值