需要更改android vendor路径下的文件,在拿到vendor.img后怎么去修改并打包呢?
ubuntu下,先看一下img的格式:
$ file vendor-19.1.img
vendor-19.1.img: Android sparse image, version: 1.0, Total of 262144 4096-byte output blocks in 17 input chunks.
如果是Android sparse image,需要先转化为raw才能挂载:
$ simg2img vendor-19.1.img vendor-19.1-raw.img
$ file vendor-19.1-raw.img
vendor-19.1-raw.img: Linux rev 1.0 ext2 filesystem data, UUID=121c4496-fe10-4c9a-9248-157c6e1b966d, volume name "vendor" (extents) (large files) (huge files)
将img挂载到loop伪块设备上:
# 查看所有的loop设备
$ ls /dev/loop*
/dev/loop0 /dev/loop1 /dev/loop2 /dev/loop3 /dev/loop4 /dev/loop5 /dev/loop6 /dev/loop7 /dev/loop-control
# 查看已使用的loop设备[-l 或者 -a 都可以]
$ losetup -l
NAME SIZELIMIT OFFSET AUTOCLEAR RO BACK-FILE
/dev/loop1 0 0 0 0 /home/chu/android-img/vendor.img
# 删除已占用的loop设备[正在使用的可以换一个loop映射,不必删除]
$ sudo losetup -d /dev/loop1
# 将img映射到loop块设备
$ sudo losetup /dev/loop1 vendor-19.1-raw.img
# 映射后可看到多了一个块设备
$ sudo fdisk -l
Disk /dev/loop1: 1 GiB, 1073741824 bytes, 2097152 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
# 块设备可以挂载到本地路径,此时可以修改内容了
$ mkdir vendor-test
$ sudo mount /dev/loop1 vendor-test
$ mount | grep loop
/dev/loop1 on /home/chu/android-img/vendor-test type ext4 (rw,relatime)
修改结束后,再次打包内容修改后的img:
# 卸载块设备
$ sudo umount vendor-test
# 删除占用的loop设备
$ sudo losetup -d /dev/loop1
# 此时vendor-19.1-raw.img 就是修改后的raw镜像,再打包成android格式
$ img2simg vendor-19.1-raw.img vendor-19.1-new.img