欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Android 根目录和sdcard卡路径分析

程序员文章站 2022-05-16 21:00:41
...

http://blog.csdn.net/xx326664162/article/details/50599911 

一、系统分区

# adb shell
# mount
  • 1
  • 2
rootfs / rootfs ro 0 0
tmpfs /dev tmpfs rw,mode=755 0 0
devpts /dev/pts devpts rw,mode=600 0 0
proc /proc proc rw 0 0
sysfs /sys sysfs rw 0 0
none /acct cgroup rw,cpuacct 0 0
tmpfs /mnt/asec tmpfs rw,mode=755,gid=1000 0 0
none /dev/cpuctl cgroup rw,cpu 0 0
/dev/block/mtdblock0 /system yaffs2 ro 0 0
/dev/block/mtdblock1 /data yaffs2 rw,nosuid,nodev 0 0
/dev/block/mtdblock2 /cache yaffs2 rw,nosuid,nodev 0 0
/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 0 0
/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 0 0
tmpfs /mnt/sdcard/.android_secure tmpfs ro,size=0k,mode=000 0 0
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

以上就是 Android 系统的分区结构,可见其挂载方式和 Linux 非常类似

  • /dev/block/mtdblock* 这几个核心分区(写入 ROM 的),他们都是使用 yaffs2 文件系统(基于 FLASH 存储),

    • 其中是 /system 这个分区只有特殊的 ro 只读权限,由此可见 Android 在安全性设计方面所下的一些功夫。
  • /dev/block/vold 据说是设计来替代 udev 的功能,主要用于支持一些热插拔设备。

二、目录概览

# ls -l
  • 1
dr-x------ root     root              2011-08-18 10:36 config
drwxrwx--- system   cache             2011-06-21 05:32 cache
lrwxrwxrwx root     root              2011-08-18 10:36 sdcard -> /mnt/sdcard
drwxr-xr-x root     root              2011-08-18 10:36 acct
drwxrwxr-x root     system            2011-08-18 10:36 mnt
lrwxrwxrwx root     root              2011-08-18 10:36 d -> /sys/kernel/debug
lrwxrwxrwx root     root              2011-08-18 10:36 etc -> /system/etc
drwxr-xr-x root     root              2010-06-30 21:06 system
drwxr-xr-x root     root              1970-01-01 00:00 sys
drwxr-x--- root     root              1970-01-01 00:00 sbin
dr-xr-xr-x root     root              1970-01-01 00:00 proc
-rwxr-x--- root     root        12995 1970-01-01 00:00 init.rc
-rwxr-x--- root     root         1677 1970-01-01 00:00 init.goldfish.rc
-rwxr-x--- root     root       107412 1970-01-01 00:00 init
-rw-r--r-- root     root          118 1970-01-01 00:00 default.prop
drwxrwx--x system   system            2011-08-12 06:54 data
drwx------ root     root              2010-01-28 00:59 root
drwxr-xr-x root     root              2011-08-18 10:36 dev
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

以上是 Android 根目录下文件目录,根据之前的分区结构可以大致看出每个目录的所处位置和大致功能,

以下是几个重要目录/文件的说明:

  1、mnt 挂载点目录

  2、etc 系统主要配置文件

  3、system Android 系统文件

  4、sys Linux 内核文件

  5、proc 运行时文件

  6、init.rc 启动脚本

  7、default.prop 系统属性配置文件

  8、data 用户程序目录

  9、dev 设备文件

下面来看下system目录和data目录:

2.1、system目录

# ls -l /system
  • 1
drwxr-xr-x root     root              2010-06-30 21:03 usr
drwxr-xr-x root     root              2010-06-30 21:07 app
drwxr-xr-x root     root              2010-06-30 21:05 lib
drwxr-xr-x root     root              2010-06-30 21:07 etc
drwxr-xr-x root     root              2010-06-30 21:06 framework
-rw-r--r-- root     root         1532 2010-06-30 20:58 build.prop
drwxr-xr-x root     shell             2010-06-30 21:04 xbin
drwxr-xr-x root     root              2010-06-30 21:00 tts
drwxr-xr-x root     root              2010-06-30 21:00 media
drwxr-xr-x root     root              2010-06-30 21:00 fonts
drwxr-xr-x root     shell             2010-06-30 21:04 bin
drw-rw-rw- root     root              2011-08-18 10:36 lost+found
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

以上是 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 等

2.2、data目录:

# ls -l /data
  • 1
drwx------ root     root              2011-06-22 02:32 property
drwxrwx--t system   misc              2011-06-21 05:32 misc
drwxrwx--x shell    shell             2011-06-21 05:32 local
drwxrwx--x system   system            2011-06-21 05:32 app-private
drwx------ system   system            2011-06-21 05:33 backup
drwxrwxr-x system   system            2011-08-12 06:54 anr
drwxrwx--x system   system            2011-08-20 06:50 app
drwxrwx--x system   system            2011-08-20 06:50 data
drwxr-x--- root     log               2011-06-21 05:32 dontpanic
drwxrwx--x system   system            2011-08-20 06:50 dalvik-cache
drwxrwxr-x system   system            2011-08-22 06:40 system
drwxrwx--- root     root              2011-06-21 05:32 lost+found 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • /data 目录下结构都和应用有关,平时安装的用户应用/游戏程序,对应APP的数据,都被安装在 /data/app 下就可以了。

2.3、查看系统变量:

# set
  • 1
ANDROID_ASSETS=/system/app
ANDROID_BOOTLOGO=1
ANDROID_DATA=/data
ANDROID_PROPERTY_WORKSPACE=9,32768
ANDROID_ROOT=/system
ASEC_MOUNTPOINT=/mnt/asec
BOOTCLASSPATH=/system/framework/core.jar:/system/framework/ext.jar:/system/framework/framework.jar:/system/framework/android.policy.jar:/system/framework/services.jar
EXTERNAL_STORAGE=/mnt/sdcard
IFS='
'
LD_LIBRARY_PATH=/system/lib
OPTIND=1
PATH=/sbin:/system/sbin:/system/bin:/system/xbin
PS1='# '
PS2='> '
PS4='+ '
PWD=/
_=/system/xbin
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

从系统变量我们也可以看到一些系统使用中的重要目录。

三、挂载路径和软连接

以下两篇仅供参考:

android 4.2版本的sdcard文件目录分析这篇文章,很多观点错误,而且上下文出现矛盾。

Android得到的真机的SD卡路径是 /storage/emulated/0/

下面以sdcard的挂载和软连接为例,分析一下,虽说是在4.2版本的android,但是原理是一样的。

3.1、根目录

先来看一下根目录,可以结合上面的目录概览来看看每个文件夹都是什么(图片来自网络,所以序号不对应): 
Android 根目录和sdcard卡路径分析

3.2、TF卡 路径分析

不是每个系统路径都和下面一模一样,原理都是一样的,可能文件夹的名称不一样

先看一下整体结构 
/mnt/shell/emulated/0/ 
/\ 

|—/storage/emulated/0 
|—/storage/emulated/legacy 
 /\ 
 |—/storage/sdcard0/ 
 |—/sdcard/ 
 |—/mnt/sdcard/

/mnt/sdcard2/->/storage/sdcard1

3.2.1 /storage/路径分析

Android 根目录和sdcard卡路径分析

上图红色框中的路径/storage/emulated/0/是个软连接,访问/storage/emulated/0相当于访问/mnt/shell/emulated/0(内部存储)

  • /storage/emulated/0/ —>/mnt/shell/emulated/0/
  • /storage/emulated/legacy/—>/mnt/shell/emulated/0/

原文中说,“这里的0代表是第几个存储卡,手机没有外插的内存卡,就是0,有的话就会多出来一个/storage/emulated/1的文件夹。”但是经过我的测试,发现不论是否插内存卡,都只有一个路径/storage/emulated/0/(内部存储)

  • /storage/sdcard0/是内部存储
  • /storage/sdcard1/是外部存储,没有插sd卡时,这个目录也是存在,是个空目录

3.2.2、三个指向storage/emulated/legacy/的路径

storage/emulated/legacy (故名思议,传统的)为了兼容以前的系统

1、根目录下的/sdcard/ -> storage/emulated/legacy/,说明/sdcard/ 也是内部存储。**

Android 根目录和sdcard卡路径分析

2、/storage/sdcard0 
3、/mnt/sdcard

3.2.3、我们去看看/mnt/shell/emulated/0/这个文件夹

Android 根目录和sdcard卡路径分析

3.2.4、外部存储卡挂载 
android是基于linux的,linux里的要使用存储设备就要先把它挂载到到linux的目录树上(以/为根),android上一般是挂载到/storage/emulated/对应的目录或者/storage对应目录里的。

  • 外部存储卡,被挂在到/storage/目录下。/storage/sdcard1/是外部存储,没有插sd卡时,这个目录也是存在,是个空目录

参考:http://www.cnblogs.com/bastard/archive/2012/11/28/2793008.html