Android系统本质上也是一种OS,而且是基于Linux内核的OS,本系列文章以探索OS的角度,从实践中了解Android系统,从而更好的使用Android系统,甚至改造它。

实验环境:

硬件:HTC G11 S710e 港版 + 16GBTF卡

Android: MIUI for G11,已经S-Off

所需软件: 终端模拟器

实践中探索Android智能手机系统------ROM分区

磁盘分区是OS静态的存在方式,如Windows往往只需要一个C盘分区,而Linux则可以占用多个分区来挂载不同的部分。Android本身使用的就是Linux内核,但其所在设备往往没有硬盘,而是ROM,所以分区也有所不同。打开手机上的终端模拟器,输入su取得root权限后,执行df -h查看ROM分区情况如下:


$su
# df -h
Filesystem Size Used Available Use% Mounted on
tmpfs 307.3M 32.0K 307.3M 0% /dev
tmpfs 307.3M 0 307.3M 0% /mnt/asec
tmpfs 307.3M 0 307.3M 0% /mnt/obb
/dev/block/mmcblk0p25 549.2M 165.4M 355.9M 32% /system
/dev/block/mmcblk0p26 1.1G 115.1M 982.7M 10% /data
/dev/block/mmcblk0p27 290.5M 39.1M 236.4M 14% /cache
/dev/block/vold/179:65 14.8G 428.8M 14.4G 3% /mnt/sdcard
/dev/block/vold/179:65 14.8G 428.8M 14.4G 3% /mnt/secure/asec
#

首先说明的是tmpfs文件系统类型是基于虚拟内存的文件系统,不占用ROM空间。最后两个是sd卡,只用中间三个是ROM分区(红色标记)。

可以看到,ROM被分成了3个区,大小分别为:549.2M, 1.1G, 290.5M。这应该是个2GB的ROM吧。这三个分区被挂载到不同的路径,其中/system是系统分区,/data是用户安装程序的分区,/cache是系统用来当缓存的分区。平时所谓的刷ROM其实就是重新写/system分区,而不会影响到/data分区,所以用户安装的程序依然存在。

为了进一步看清系统运行时挂载情况,执行mout命令:

$ export PATH=/data/local/bin:$PATH
$su
# mount
rootfs on / type rootfs (ro,relatime)
tmpfs on /dev type tmpfs (rw,relatime,mode=755)
devpts on /dev/pts type devpts (rw,relatime,mode=600)
proc on /proc type proc (rw,relatime)
sysfs on /sys type sysfs (rw,relatime)
none on /acct type cgroup (rw,relatime,cpuacct)
tmpfs on /mnt/asec type tmpfs (rw,relatime,mode=755,gid=1000)
tmpfs on /mnt/obb type tmpfs (rw,relatime,mode=755,gid=1000)
none on /dev/cpuctl type cgroup (rw,relatime,cpu)
/dev/block/mmcblk0p25 on /system type ext4 (ro,relatime,barrier=1,data=ordered)
/dev/block/mmcblk0p26 on /data type ext4 (rw,nosuid,nodev,noatime,barrier=1,data=ordered,noauto_da_alloc)
/dev/block/mmcblk0p27 on /cache type ext4 (rw,nosuid,nodev,noatime,barrier=1,data=ordered)
/data/d on /data/d type debugfs (rw,relatime)
/sys/kernel/debug on /sys/kernel/debug type debugfs (rw,relatime)
/dev/block/vold/179:65 on /mnt/sdcard type vfat(rw,dirsync,nosuid,nodev,noexec,relatime,uid=1000,gid=1015,fmask=0602,dmask=0602,allow_utime=0020,codepage=cp437,iocharset=iso8859-1,shortname=mixed,utf8,errors=remount-ro)
/dev/block/vold/179:65 on /mnt/secure/asec type vfat (rw,dirsync,nosuid,nodev,noexec,relatime,uid=1000,gid=1015,fmask=0602,dmask=0602,allow_utime=0020,codepage=cp437,iocharset=iso8859-1,shortname=mixed,utf8,errors=remount-ro)
tmpfs on /mnt/sdcard/.android_secure type tmpfs (ro,relatime,size=0k,mode=000)
#

其中rootfs,也是一种基于RAM的文件系统,可以看到Android的/是直接建立在RAM上的,在PC上,Linux系统一般是启动过程中需要rootfs,然后再切换到磁盘上的根文件系统,而Android则直接就是使用rootfs,所以速度快,但是毕竟RAM大小有限,所以根目录下不能存放太多的东西。


其他如none, proc,devpt, tmpfs等等,也都是无设备文件系统,一般都是基于内存的文件系统,具体的作用以后慢慢研究。

从上红色标记的内容可以看出,ROM分区使用的是ext4标准的Linux文件系统类型,SD卡则采用vfat这种Linux和Windows下可以识别的文件系统,便于其上面的内容被Windows桌面系统读取。

更多相关文章

  1. 开箱即用!Android四款系统架构工具
  2. Android 系统(125)---Android通过Dialer实现暗码启动
  3. 浅谈Android系统进程间通信(IPC)机制Binder中的Server和Client获得
  4. Android的属性Property系统
  5. Android 分区挂载
  6. Android 图形系统之图形缓冲区分配

随机推荐

  1. 【Android自助餐】Handler消息机制完全解
  2. Android(安卓)学习
  3. 构建Android的交叉编译器、用NDK编译移植
  4. Android(安卓)Manifest标签之manifest,me
  5. 深度解析Android中字体设置
  6. android开发资源合集
  7. Android(安卓)GWES之Android窗口管理
  8. Android: TextView常用属性的用法详解
  9. 在eclipse的android工程里引用android sd
  10. Android(安卓)上Camera分析