本帖最后由 果果 于 2016-9-30 17:54 编辑
Android平台根目录文件
> 系统分区 # adb shell # mount
rootfs / rootfs ro 00tmpfs /dev tmpfs rw,mode=75500devpts /dev/pts devpts rw,mode=60000proc /proc proc rw 00sysfs /sys sysfs rw 00none /acct cgroup rw,cpuacct 00tmpfs /mnt/asec tmpfs rw,mode=755,gid=100000none /dev/cpuctl cgroup rw,cpu 00/dev/block/mtdblock0 /system yaffs2 ro 00/dev/block/mtdblock1 /data yaffs2 rw,nosuid,nodev 00/dev/block/mtdblock2 /cache yaffs2 rw,nosuid,nodev 00/dev/block/vold/179:0 /mnt/sdcard vfat rw,dirsync,nosuid,nodev,noexec,uid=1000,gid=1015,fmask=0702,dmask=0702,allow_utime=0020,codepage=cp437,iocharset=iso8859-1,shortname=mixed,utf8,err ors=remount-ro 00/dev/block/vold/179:0 /mnt/secure/asec vfat rw,dirsync,nosuid,nodev,noexec,uid=1000,gid=1015,fmask=0702,dmask=0702,allow_utime=0020,codepage=cp437,iocharset=iso8859-1,shortname=mixed,utf 8,errors=remount-ro 00tmpfs /mnt/sdcard/.android_secure tmpfs ro,size=0k,mode=00000
以上就是 Android 系统的分区结构,可见其挂载方式和 Linux 非常类似,熟悉 Linux 的朋友应该能很容易的看出这些分区的作用大概是什么。 其中需要说明一下的可能是 /dev/block/mtdblock* 这几个核心分区(写入 ROM 的),他们都是使用 yaffs2 文件系统(基于 FLASH 存储), 其中是 /system 这个分区只有特殊的 ro 只读权限,由此可见 Android 在安全性设计方面所下的一些功夫。另外 /dev/block/vold 据说是设计 来替代 udev 的功能,主要用于支持一些热插拔设备。 > 目录概览 # ls -l
dr-x------ root root 2011-08-1810:36 configdrwxrwx--- system cache 2011-06-2105:32 cachelrwxrwxrwx root root 2011-08-1810:36 sdcard -> /mnt/sdcarddrwxr-xr-x root root 2011-08-1810:36 acctdrwxrwxr-x root system 2011-08-1810:36 mntlrwxrwxrwx root root 2011-08-1810:36 d -> /sys/kernel/debuglrwxrwxrwx root root 2011-08-1810:36 etc -> /system/etcdrwxr-xr-x root root 2010-06-3021:06 systemdrwxr-xr-x root root 1970-01-0100:00 sysdrwxr-x--- root root 1970-01-0100:00 sbindr-xr-xr-x root root 1970-01-0100:00 proc-rwxr-x--- root root 129951970-01-0100:00 init.rc-rwxr-x--- root root 16771970-01-0100:00 init.goldfish.rc-rwxr-x--- root root 1074121970-01-0100:00 init-rw-r--r-- root root 1181970-01-0100:00default.propdrwxrwx--x system system 2011-08-1206:54 datadrwx------ root root 2010-01-2800:59 rootdrwxr-xr-x root root 2011-08-1810:36 dev
以上是 Android 根目录下文件目录,根据之前的分区结构可以大致看出每个目录的所处位置和大致功能, 以下是几个重要目录/文件的说明: 1、mnt 挂载点目录 2、etc 系统主要配置文件 3、system Android 系统文件 4、sys Linux 内核文件 5、proc 运行时文件 6、init.rc 启动脚本 7、default.prop 系统属性配置文件 8、data 用户程序目录 9、dev 设备文件 system目录: # ls -l /system
drwxr-xr-x root root 2010-06-3021:03 usrdrwxr-xr-x root root 2010-06-3021:07 appdrwxr-xr-x root root 2010-06-3021:05 libdrwxr-xr-x root root 2010-06-3021:07 etcdrwxr-xr-x root root 2010-06-3021:06 framework-rw-r--r-- root root 15322010-06-3020:58 build.propdrwxr-xr-x root shell 2010-06-3021:04 xbindrwxr-xr-x root root 2010-06-3021:00 ttsdrwxr-xr-x root root 2010-06-3021:00 mediadrwxr-xr-x root root 2010-06-3021:00 fontsdrwxr-xr-x root shell 2010-06-3021:04 bindrw-rw-rw- root root 2011-08-1810:36 lost+found
以上是 system 目录下面的主要文件目录下面也简单介绍一下: 1、usr 用户文件夹,包含共享、键盘布局、时间区域文件等 2、app 常规下载的应用程序,这些 apk 包都是受保护的哦 3、lib 系统底层库,如平台运行时库等 4、etc 系统的配置文件,比如APN接入点设置等核心配置等 5、framework Android 系统平台核心 framework 的文件 6、build.prop Android 系统属性配置文件 7、xbin 常用开发工具,比如 tcpdump/sqlite3 等 8、bin 系统工具,比如 ps/cp/pm 等 data目录: # ls -l /data
drwx------ root root 2011-06-2202:32 propertydrwxrwx--t system misc 2011-06-2105:32 miscdrwxrwx--x shell shell 2011-06-2105:32 localdrwxrwx--x system system 2011-06-2105:32 app-privatedrwx------ system system 2011-06-2105:33 backupdrwxrwxr-x system system 2011-08-1206:54 anrdrwxrwx--x system system 2011-08-2006:50 appdrwxrwx--x system system 2011-08-2006:50 datadrwxr-x--- root log 2011-06-2105:32 dontpanicdrwxrwx--x system system 2011-08-2006:50 dalvik-cachedrwxrwxr-x system system 2011-08-2206:40 systemdrwxrwx--- root root 2011-06-2105:32 lost+found
可以看到 /data 目录下结构都和应用有关,平时安装的用户应用/游戏程序,对应APP的数据, 都被安装在 /data/app 下就可以了。 查看系统变量: # set
ANDROID_ASSETS=/system/appANDROID_BOOTLOGO=1ANDROID_DATA=/dataANDROID_PROPERTY_WORKSPACE=9,32768ANDROID_ROOT=/systemASEC_MOUNTPOINT=/mnt/asecBOOTCLASSPATH=/system/framework/core.jar:/system/framework/ext.jar:/system/framework/framework.jar:/system/framework/android.policy.jar:/system/framework/services.jarEXTERNAL_STORAGE=/mnt/sdcardIFS=''LD_LIBRARY_PATH=/system/libOPTIND=1PATH=/sbin:/system/sbin:/system/bin:/system/xbinPS1='# 'PS2='> 'PS4='+ 'PWD=/_=/system/xbin
从系统变量我们也可以看到一些系统使用中的重要目录。 > 进程分析 # ps
USER PID PPID VSIZE RSS WCHAN PC NAMEroot 10312220 c009b74c 0000ca4c S /initroot 2000 c004e72c 00000000 S kthreaddroot 3200 c003fdc8 00000000 S ksoftirqd/0root 4200 c004b2c4 00000000 S events/0... ...root 271740196 c0158eb0 afd0d8ac S /system/bin/shsystem 281808204 c01a94a4 afd0db4c S /system/bin/servicemanagerroot 2913736372 ffffffff afd0e1bc S /system/bin/voldroot 3013716336 ffffffff afd0e1bc S /system/bin/netd... ...system 593318339625580 ffffffff afd0db4c S system_serverapp_0 1083313418414876 ffffffff afd0eb08 S com.android.inputmethod.pinyinradio 1123314730015804 ffffffff afd0eb08 S com.android.phoneapp_25 1223314940819932 ffffffff afd0eb08 S com.android.launchersystem 1243313670813172 ffffffff afd0eb08 S com.android.settingsapp_0 1483314889218044 ffffffff afd0eb08 S android.process.acore
从这里我们可以看出和 Linux 一样所有进程的入口都是 init,接下来的系统进程也和 Linux 类似, 再接下来就是一些系统的守护程序(Native Service),最后是系统重要的应用程序。 通过这个列表大家也可以看出 Android 启动过程的一些端倪。
|