关于Android系统中system.img和data.img中文件系统的权限设置【转】
2010-07-06 09:33
转自:http://blog.chinaunix.net/u3/103613/showart_2218437.html
in system.img and data.img, we can find directory and files have their own UID/GID, and also access permission.
but in Android build environment, they have not been given the configuration.
in fact, these modification are done by mkyaffs2image tool.
in yaffs source code, we can get the real process.
1. Pre-condition.
while we use mkyaffs2image tool to generate yaffs2 file system, there are two pre-condition.
a. we need use '-f' flags as mkyaffs2image boot option.
In /external/yaffs2/yaffs2/utils/mkyaffs2image.c.
if we use '-f' option, it will set fixstats flag and do some special process according to this flag.
if (strcmp(argv[1], "-f") == 0) {
fixstats = 1;
argc--;
argv++;
}
b. for the folder which will be transfered to yaffs file system, the folder name should be "system" or "data".
if (fixstats) {
int len = strlen(argv[1]);
if((len >= 4) && (!strcmp(argv[1] + len - 4, "data"))) {
source_path_len = len - 4;
} else if((len >= 7) && (!strcmp(argv[1] + len - 6, "system"))) {
source_path_len = len - 6;
} else {
fprintf(stderr,"Fixstats (-f) option requested but filesystem is not data or android!\n");
exit(1);
}
fix_stat(argv[1], &stats);
}
2. normal configuration for permission and uid/gid.
for all directory and files, mkyaffs2image tool give them ROOT:ROOT uid and gid. and also re-use access permission according to directory and file's original permission in build environment.
3. special configuration for Android.
if fixstats is set, mkyaffs2image tool will do special configuration for Android.
the process is as below:
In /external/yaffs2/yaffs2/utils/mkyaffs2image.c.
main() -> process_directory() -> fix_stat() -> fs_config() ->
fs_config() function is defined in sysem/core/include/private/android_filesystem_config.h. This function will do special configuration according to android_dirs and android_files data stuctures.
4. about android_dirs and android_files data stuctures.
the defination is in system/core/include/private/android_filesystem_config.h file.
static struct fs_path_config android_dirs[] = {
{ 00770, AID_SYSTEM, AID_CACHE, "cache" },
{ 00771, AID_SYSTEM, AID_SYSTEM, "data/app" },
{ 00771, AID_SYSTEM, AID_SYSTEM, "data/app-private" },
{ 00771, AID_SYSTEM, AID_SYSTEM, "data/dalvik-cache" },
{ 00771, AID_SYSTEM, AID_SYSTEM, "data/data" },
{ 00771, AID_SHELL, AID_SHELL, "data/local/tmp" },
{ 00771, AID_SHELL, AID_SHELL, "data/local" },
{ 01771, AID_SYSTEM, AID_MISC, "data/misc" },
{ 00770, AID_DHCP, AID_DHCP, "data/misc/dhcp" },
{ 00771, AID_SYSTEM, AID_SYSTEM, "data" },
{ 00750, AID_ROOT, AID_SHELL, "sbin" },
{ 00755, AID_ROOT, AID_SHELL, "system/bin" },
{ 00755, AID_ROOT, AID_SHELL, "system/xbin" },
{ 00755, AID_ROOT, AID_ROOT, "system/etc/ppp" },
{ 00777, AID_ROOT, AID_ROOT, "sdcard" },
{ 00755, AID_SYSTEM, AID_SYSTEM, "system/midletbox" },
{ 00777, AID_SYSTEM, AID_SYSTEM, "system/bin/midletvm" },
{ 00755, AID_ROOT, AID_ROOT, 0 },
};
/* Rules for files.
** These rules are applied based on "first match", so they
** should start with the most specific path and work their
** way up to the root. Prefixes ending in * denotes wildcard
** and will allow partial matches.
*/
static struct fs_path_config android_files[] = {
{ 00440, AID_ROOT, AID_SHELL, "system/etc/init.goldfish.rc" },
{ 00550, AID_ROOT, AID_SHELL, "system/etc/init.goldfish.sh" },
{ 00440, AID_ROOT, AID_SHELL, "system/etc/init.trout.rc" },
{ 00550, AID_ROOT, AID_SHELL, "system/etc/init.ril" },
{ 00550, AID_ROOT, AID_SHELL, "system/etc/init.testmenu" },
{ 00550, AID_DHCP, AID_SHELL, "system/etc/dhcpcd/dhcpcd-run-hooks" },
{ 00440, AID_BLUETOOTH, AID_BLUETOOTH, "system/etc/dbus.conf" },
{ 00440, AID_BLUETOOTH, AID_BLUETOOTH, "system/etc/bluez/main.conf" },
{ 00440, AID_BLUETOOTH, AID_BLUETOOTH, "system/etc/bluez/input.conf" },
{ 00440, AID_BLUETOOTH, AID_BLUETOOTH, "system/etc/bluez/audio.conf" },
{ 00444, AID_RADIO, AID_AUDIO, "system/etc/AudioPara4.csv" },
{ 00555, AID_ROOT, AID_ROOT, "system/etc/ppp/*" },
{ 00644, AID_SYSTEM, AID_SYSTEM, "data/app/*" },
{ 00644, AID_SYSTEM, AID_SYSTEM, "data/app-private/*" },
{ 00644, AID_APP, AID_APP, "data/data/*" },
/* the following two files are INTENTIONALLY set-gid and not set-uid.
* Do not change. */
{ 02755, AID_ROOT, AID_NET_RAW, "system/bin/ping" },
{ 02755, AID_ROOT, AID_INET, "system/bin/netcfg" },
/* the following four files are INTENTIONALLY set-uid, but they
* are NOT included on user builds. */
{ 06755, AID_ROOT, AID_ROOT, "system/xbin/su" },
{ 06755, AID_ROOT, AID_ROOT, "system/xbin/librank" },
{ 06755, AID_ROOT, AID_ROOT, "system/xbin/procrank" },
{ 06755, AID_ROOT, AID_ROOT, "system/xbin/procmem" },
{ 06755, AID_ROOT, AID_ROOT, "system/xbin/tcpdump" },
{ 04755, AID_ROOT, AID_ROOT, "system/bin/fota" },
{ 00755, AID_ROOT, AID_SHELL, "system/bin/*" },
{ 00755, AID_ROOT, AID_SHELL, "system/xbin/*" },
{ 00750, AID_ROOT, AID_SHELL, "sbin/*" },
{ 00755, AID_ROOT, AID_ROOT, "bin/*" },
{ 00750, AID_ROOT, AID_SHELL, "init*" },
{ 00644, AID_ROOT, AID_ROOT, 0 },
};
分享到:
相关推荐
system.img是Android设备中用于存储应用程序及系统设置的分区镜像文件。本文将详细介绍如何通过命令行方式来生成system.img,并结合提供的部分脚本内容进行具体说明。 #### 二、生成system.img的方法 ##### 1. ...
在Android系统中,"BOOT.IMG", "SYSTEM.IMG", 和 "userdata.IMG" 是三个至关重要的镜像文件,它们代表了系统的核心组件。这里,我们详细探讨一下这些文件的作用以及如何进行一键刷机。 1. **BOOT.IMG**: 这个文件...
unpack yafffs 解开 yafffs(包括data img及system img) updata app的话就输入bootimg unpack updata 下面一一说明功能中的参数 unpack updata [文件] [文件]为空时 默认使用UPDATA APP 解开后 会有四个...
总结来说,Android文件系统中的ramdisk.img、system.img和userdata.img分别负责系统启动、核心组件和用户数据的管理。理解这些镜像文件的内容和功能对于Android开发、系统维护和故障排查至关重要。通过构建和定制...
系统分区通常包含Google预装的应用程序、核心系统服务和框架,以及其他必要的组件,如系统设置、安全补丁和Android操作系统的主要功能。 Android系统的分区结构是其复杂性和灵活性的基础。除了ramdisk-u.img和...
首先,Android的文件系统由几个关键的映像文件组成,分别是system.img、ramdisk.img和userdata.img。system.img包含了Android系统的大部分核心组件,如系统应用、库文件、框架和系统服务。这些文件在设备启动时被...
在Android系统中,文件系统是其核心组成部分,用于组织和管理设备上的数据和程序。创建Android文件系统主要包括构建root文件...注意,创建过程中需确保遵循Android系统的权限和文件权限规则,以保证系统能够正常运行。
总结来说,Android系统的启动涉及多个重要的镜像文件,包括bootloader(MLO和u-boot.img)、内核镜像文件(uImage)、根文件系统镜像(ramdisk.img)、系统镜像(system.img)和用户数据镜像(userdata.img)。...
Android系统的分区为:system分区对应的目录 /system ,userdata分区对应 /data ,cache分区对应 /cache , 可用ADB 或超级终端 通过命令查看系统分区,命令如下: su cat /proc/mtd 假设mtd1对应 boot分区,mtd...
在Android系统中,`system.img`和`data.img`文件是非常关键的部分,它们包含了系统的运行环境和用户数据。本文将重点讲解如何处理yaffs2格式的`img`文件,这种格式通常用于基于nand flash的存储设备。如果你的设备...
Android 系统文件系统的结构可以分为三个部分:system.img、ramdisk.img 和 userdata.img。这三个文件都是通过 Linux 平台编译生成的。其中,ramdisk.img 是 emulator 的文件系统,system.img 包括了主要的包、库等...
1. **构建文件系统源码**:构建Android文件系统需要先从Android源码中编译出所需的文件系统镜像,包括`system.img`、`ramdisk.img`和`userdata.img`等。 - `system.img`包含了Android系统的基本组件和应用程序。 -...
在Android系统中,修改开机画面是一项涉及到多个步骤的技术工作,主要涵盖了图像处理、文件格式转换以及文件系统的操作。以下是对整个过程的详细说明: 首先,你需要制作一张与目标设备屏幕像素相匹配的图片。通常...
1. **system.img**:这是系统分区的映像,包含了 Android 系统的核心组件、预装应用和服务。 2. **userdata.img**:如前所述,这个文件代表用户数据分区,用于存储应用程序数据、用户设置、文件等。 3. **ramdisk....
1. **解包BIN包**:将U880的BIN文件放入BINTOOL目录并重命名为U880.BIN,选择对应版本,点击“解包”,生成Logo.img、System.img、Data.img和Ramdisk.img等文件。 2. **替换开机首屏**:修改Logo.img,生成新BIN包后...
Android系统由多个部分组成,包括system.img、ramdisk.img和userdata.img等。这些文件分别代表了不同的功能: - **system.img**:包含了系统的核心应用程序和服务。 - **ramdisk.img**:这是一个临时文件系统,在...
4. **system**:这是Android系统的核心组成部分,包含系统库、框架、应用以及系统设置等。刷入新的system分区可以改变系统的行为,比如更新系统应用、添加新功能或移除预装应用。 综上所述,安卓2.1刷机包旨在提供...
用户可以解包已ROOT的BIN,提取Superuser.apk和SU文件,导入到自己的system.img和BIN文件夹中,设置相应权限,再用BINTOOL生成新的BIN文件,刷机后设备即被ROOT。 更换开机首屏则可以直接通过BINTOOL实现。需要480*...