android生成system.img命令
### Android生成system.img命令解析与实践 #### 一、概述 在Android系统开发与定制过程中,经常需要构建自定义的system分区镜像(system.img),这对于系统级别的修改与调试至关重要。system.img是Android设备中用于存储应用程序及系统设置的分区镜像文件。本文将详细介绍如何通过命令行方式来生成system.img,并结合提供的部分脚本内容进行具体说明。 #### 二、生成system.img的方法 ##### 1. 使用`mkyaffs2image` 根据描述中的信息,“system.img: Linux rev 0.0 ext2 filesystem data, UUID=4eb0489c-647d-49d8-9111-94657b5fd342, volume name 'system'” 可知,system.img是一个基于ext2文件系统的镜像文件。而在早期版本的Android中,通常使用`mkyaffs2image`工具来创建system.img。 ``` # mkyaffs2 image system/system.img ``` 这条命令用于使用`mkyaffs2`工具生成system.img文件。需要注意的是,`mkyaffs2`主要用于创建YAFFS格式的镜像文件,而在Android中早期确实使用了这种格式,但在较新的版本中已经改为ext2/ext4等格式。 ##### 2. 使用`genext2fs` 随着Android的发展,系统文件系统逐渐转向了ext2/ext4格式。在这种情况下,可以使用`genext2fs`工具来生成system.img。根据给定的部分内容,我们可以看到一个bash脚本示例: ```bash #!/bin/bash export PATH="/home/tony/tmp/e2fsprogs-1.41.3/prefix/sbin:$PATH" num_blocks=`du -sk out/target/product/eeepc/system | tail -n1 | awk '{print $1;} '` if [ $num_blocks -lt 20480 ]; then extra_blocks=3072; else extra_blocks=20480; fi num_blocks=`expr $num_blocks + $extra_blocks` num_inodes=`find out/target/product/eeepc/system | wc -l` num_inodes=`expr $num_inodes + 500` out/host/linux-x86/bin/genext2fs -a -d out/target/product/eeepc/system -b $num_blocks -N $num_inodes -m 0 out/target/product/eeepc/system.img tune2fs -L system out/target/product/eeepc/system.img tune2fs -C 1 out/target/product/eeepc/system.img e2fsck -fy out/target/product/eeepc/system.img ``` 这段脚本首先设置了环境变量`PATH`以便找到`genext2fs`工具,然后计算了system分区所需的数据块数量(`num_blocks`)和inode数量(`num_inodes`),并最终调用`genext2fs`工具生成system.img。之后还使用`tune2fs`工具对system.img进行了调整,包括设置卷标为`system`以及最大挂载次数为1次,最后使用`e2fsck`工具检查并修复可能存在的文件系统错误。 #### 三、其他相关信息 根据描述中的信息,“system.img: VMS Alpha executable 当前一个system.img文件时会使用mkyaffs2 image system/system.img”,这似乎是在描述一个特殊情况下的处理方式,即当遇到非标准格式的system.img文件时(例如VMS Alpha可执行文件),使用`mkyaffs2`工具进行转换。 此外,文中还提到使用`make systemimage`命令,但只显示了部分输出信息:“Install system fs image: out/target/product/eeepc/system.img”。这个命令通常是在Android源码编译过程中的一部分,用于自动构建system.img文件。 #### 四、总结 在不同的Android版本或系统配置下,生成system.img的方法有所不同。对于早期版本,可以使用`mkyaffs2image`;而对于较新版本,则推荐使用`genext2fs`工具。此外,还可以利用`make systemimage`命令来自动化完成这一过程。理解这些工具的工作原理有助于开发者更好地进行系统定制与调试工作。
使用#file system.img
输出:system.img: Linux rev 0.0 ext2 filesystem data, UUID=4eb0489c-647d-49d8-9111-94657b5fd342, volume name "system"。
然而本人使用命令#mkyaffs2image system/ system.img,
再使用#file system.img,却输出:system.img: VMS Alpha executable
前一个system.img文件时可用的,而使用mkyaffs2image命令生成的system.img却不能使用(将ramdisk.img,system.img,install.img等打包成iso文件,用virtualbox运行)。
谁清楚android编译系统是用什么命令生成system.img的?本人使用#make systemimage命令,只显示出如下信息: Install system fs image: out/target/product/eeepc/system.img
out/host/linux-x86/bin/acp -fpt out/target/product/eeepc/obj/PACKAGING /systemimage_unopt_intermediates/system.img out/target/product/eeepc/system.img
true
没能查到是哪个脚本生成的system.img
根据这个网址http://blog.csdn.net/liaoshengjiong/archive/2009/03/04/3957749.aspx,
1.执行#make showcommands snod
2.得出android制作system.img命令为:
#!/bin/bash
export PATH="/home/tony/tmp/e2fsprogs-1.41.3/prefix/sbin:$PATH"
num_blocks=`du -sk out/target/product/eeepc/system | tail -n1 | awk '{print $1;}'`
if [ $num_blocks -lt 20480 ]; then
extra_blocks=3072;
else
extra_blocks=20480;
fi
num_blocks=`expr $num_blocks + $extra_blocks`
num_inodes=`find out/target/product/eeepc/system | wc -l`
num_inodes=`expr $num_inodes + 500`
out/host/linux-x86/bin/genext2fs -a -d out/target/product/eeepc/system -b $num_blocks -N $num_inodes -m 0 out/target/product/eeepc/system.img
- luke12152011-09-27该资源就是http://www.eoeandroid.com/thread-7283-1-1.html 复制的文字版,不建议下载,一点儿意义没有。
- 粉丝: 801
- 资源: 773
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助