介绍——修改system.img(系统镜像)
系统镜像是地址ROM最常使⽤的⼀个镜像,⽤于存储Android系统的核⼼⽂件,System.img就是设备中system⽬录的镜像,⾥⾯包含了Android系统主要的⽬录和⽂件。⼀般这些⽂件是不允许修改的。系统镜像对应的⽂件名⼀般叫system.img,当然,系统镜像的⽂件可以任意命名,之所以叫system.img,是为了与⽣成镜像⽂件之前的system⽬录保持⼀致,这样⽐较容易与其他类型的镜像⽂件区分。
system.img可以添加
1、Android系统应⽤,
2、更多的library so⽂件
那么如何查看在system.img镜像中都有哪些内容呢,那么就需要我们解压
尽管ROM中的5个镜像⽂件的扩展名都是img,但其格式却不同,也就是说不能使⽤同⼀种⽅法对其解压。
对于system.img⽂件来说,可以使⽤unyafss命令对其解压。Android源代码中并未提供该命令,所以读者可以到
编译命令
gcc -o unyaffs unyaffs.c
unyaffs system.img
如果对编译Android源代码⽣成的system.img⽂件执⾏上⾯的命令,可以完美的将system.img⽂件还原成system⽬录,会从system⽬录中看到相应的⼦⽬录,例如,/system/app、/system/lib等,实际上,system.img⽂件就是Android远
吗/out/target/product/generic/system中的⽂件压缩⽣成的。不过很遗憾,对官⽅提供的system.img⽂件执⾏上⾯的命令并不能将system.img解压,所以可以初步判断官⽅提供的system.img的格式与有Android源代码⽣成的system.img⽂件格式不同。
为了进⼀步验证system.img⽂件的格式,可以分别对官⽅提供的和由Android源代码⽣成的system.img⽂件执⾏如下的命令,并进⾏对⽐。
file system.img
我们发现不同,既然官⽅提供的system.img⽂件不能⽤unyaffs命令解压,那就使⽤另外⼀种⽅法。这
种⽅法并不需要讲system.img解压,⽽是将系统镜像挂载(mount)到Linux的某个⽬录,实际上,这种⽅式⽐直接解压system.img⽂件更⽅便操作。
注意:
实际上,⾼版本Android的system.img通常是ext4格式的⽂件系统,⽽不是yaffs格式的⽂件系统,所以不能使⽤mkyaffs2image命令制作system.img,也不能使⽤unyaffs命令将其解压。如果想⽣成system.img⽂件,需要使⽤make_ext4命令,解压system.img需要使⽤mount命令将其挂载到某个⽬录.
由于system.img是压缩格式,所以并不能直接使⽤mount命令挂载。在编译Android 源代码后会在Android源代码⽬录/out/host/linux-
x86/bin⽬录⽣成⼀个simg2img命令⾏⼯具,建议将该⽬录加到PATH环境变量中,因为在本书中会⼤量使⽤bin⽬录中的各种命令⾏⼯具。
simg2img可以通过如下的命令将system.img转化为普通的Linux镜像⽂件(system.img.raw)。
simg2img system.img system.img.raw
然后在/mnt⽬录中建⽴⼀个system⼦⽬录,并执⾏下⾯的 命令挂载系统镜像。
mount system.img.raw /mnt/system
linux操作系统镜像执⾏⽂上⾯的命令后,进到/mnt/system⽬录,就会看到官⽅提供的系统镜像中所有⽂件,
所有的⽬录都是可读写的。
⽂件列表如下
===========================================================
app⽬录:存放⼀般的apk⽂件。
bin⽬录:存放⼀些Linux的⼯具,但是⼤部分都是toolbox的链接.100font免费下载字体
etc⽬录:存放系统的配置⽂件。
fonts⽬录:存放系统的字体⽂件。
framework⽬录:存放系统平台所有jar包和资源⽂件包。
lib⽬录:存放系统的共享库。
media⽬录:存放系统的多媒体资源,主要是铃声。
priv-app⽬录:android4.4开始新增加的⽬录,存放系统核⼼的apk⽂件。
tts⽬录:存放系统的语⾔合成⽂件。
java爱心代码编程简单>网页界面usr⽬录:存放各种键盘布局,时间区域⽂件。
vendor⽬录:存放⼀些第三⽅⼚商的配置⽂件、firmware以及动态库。
xbin⽬录:存放系统管理⼯具,这个⽂件夹的作⽤相当于标准Linux⽂件系统中的sbin.
build.prop⽂件:系统属性的定义⽂件。
============================================================
将system.img.raw挂载到/mnt/system ⽬录后,该⽬录中的内容实际上与system.img中的内容完全⼀样,现在可以任意修改/mnt/system⽬录中的内容,例如,添加或替换/mnt/system/app ⽬录中的apk⽂件,或更换开机动画。在修改完系统镜像后,还需要使⽤make_extfs命令
将/mnt/system⽬录重新⽣成system.img⽂件(EXT4⽂件系统)。
make_ext4fs命令在如下的⽬录中,所以建议读者将该⽬录加到PATH环境变量中,这样的任意⽬录下都可以使⽤make_ext4fs命令。南昌企业建站系统模板
我们可以在Linux终端执⾏如下的命令⽣成system.img⽂件。
make_ext4fs -s -l 1024M -a system system.img /mnt/system
在执⾏make_ext4fs 命令使⽤了3个命令⾏参数,这些参数的含义如下:
-s:⽣成Spare格式的镜像。这种格式的镜像⽂件的尺⼨会更⼩,但⽆法直接使⽤mount命令挂载。要想挂载Spare格式的镜像⽂件,需要⾸先使⽤simg2img命令按着前⾯描述的⽅式进⾏转换。如果不加-s参数,⽣成的system.img⽂件是可以直接通过mount挂载。不过不管是不是Spare 格式的系统镜像⽂件,Nexus 7都可以使⽤(其他的Android设备应该也可以),但建议⽣成Spare格式的镜像⽂件,因为这样的镜像⽂件尺⼨更⼩。
-l : 镜像的尺⼨。该参数指定的值并不是⽣成镜像⽂件(r如system.img)的实际尺⼨,⽽是⽂件系统的尺⼨。这有些类似在Windows中建⽴的⼼得逻辑分区,⽽该参数指定的值就是逻辑分区的尺⼨,⽣成的镜像⽂件的尺⼨不能⼤于⽂件系统的尺⼨。例如官⽅提供的⽤于Nexus 7的system.img⽂件(Spare格式的镜像⽂件)的尺⼨⼤⼩越是480M,
-
struct类型重定义a: 指定挂载点,这⾥是system.
重新⽣成经过修改的system.img⽂件后,⾸先让Nexus 7 进⼊Bootloader模式,然后执⾏下⾯的命令即可刷机
fastboot flash system system.img
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论