这篇文章布局好乱呀,有时间得整理一下。
声明本文是积累式的写法,不会为去写而写,是先总结一些写一些:
Android文件系统与linux文件系统层次结构标准(FHS)对比:
FHS | Android |
/tmp | /data/local/tmp |
/bin | /system/bin |
/etc | /etc -> /system/etc |
/lib | /system/lib |
/var | 无,可用/data/local/tmp代替先 |
/sys | /sys |
/proc | /proc |
/mnt | /mnt |
/media | 无,可用/mnt代替 |
/root | 无,无可替代 |
/sbin | /sbin |
Android底层功能与标准linux对比:
功能 | Linux | Android |
管理动态设备文件 | udev/mdev | ueventd(init) [好文章] |
管理动态存储挂载 | udev/mdev | Vold |
管理静态存储挂载 | fstab | Vold |
向上层报告 | 无 | Vold |
init进程 | init/linuxrc | init |
图形界面 | X Windows/Qt/MiniGui | Gralloc+SurfaceFlinger/Minui |
蓝牙驱动 | BluZ | BlueDroid |
音频库 | libalsa | tinyalso《Android音频系统之音频框架-TinyAlsa》 |
遇到一些记录一些。弄明白了这些,从底层向Android出发就方便多了。
很多文章都在说它代替了udev,这个真是一个不负责人的说法,Vold全称Volume Daemon,顾名思义,它是管理卷的,所谓卷也就是硬盘/Flash/sdcard之类的存储设备,它负责将上述的存储设备自动挂载到指定目录。
在Android中与udev相提并论的是ueventd,它是管理/dev/下设备文件的。
而Vold只会检测是否为存储设备,如果是就会挂载。
---------------------------------------
Udev的工作中包括管理/dev下设备文件和自动挂载文件系统,不过Vold全称是Volume Daemon专门的卷管理,它是没有管理/dev下的设备文件的,这个功劳不是它的,创建设备文件的是ueventd。
在Android中不能和其它linux进行一对一的对应了,因为Vold甚至还包括和上层的通信,而udev没有,管理好设备文件和挂载动态的存储设备就完了。还有一个区别是Vold是管理了所有的卷无论静态还是动态,而udev只管理动态的,管理静态的是fstab。
关于/tmp目录的问题,这个是最直接的问题了,一般的开源软件都是直接用hardcode的方法默认将临时文件放到/tmp目录中的,这点一定要注意,编译一个开源的软件到Android上时首先创建一个/tmp目录。没有/tmp目录会出现很多问题。等到测试好发布的时候要把hardcode的/tmp目录调整到自己新创建的目录一般在/data/misc/${func}/tmp一般${func}为自己的功能的名字。
Android源码目录:
/cts 兼容性测试套件
/kernel 内核
Android系统目录功能介绍
/cache分区
使用:在进行OTA升级(俗称:刷机)的时候会用到/cache/recovery目录
1.利用/cache/recovery/command会传递参数.如:update.zip的路径.
2.升级过程产生的Log文件也会放到/cache/recovery目录中.如:last_install,last_locale,last_log,一般供调试人员使用.
3.当然/cache目录也可以存放update.zip包.
4.看到其它地方说Google Play会将软件包下载到些处.
这些是我在工作中遇到的.
完整包升级:
将以下内容写入到/cache/recovery/command
boot-recovery
--update_package=/data/media/0/update.zip
--wipe_cache
reboot
执行reboot recovery 即可升级.