android系统—储存知识源码分析

1.存储相关名词:

RAM
Ramdom Access Memory 随机存取存储器
ROM
Read Only Memory
ROM image 只读存储器镜像
NAND Flash
flash内存的一种

2.OBB

OBB:Opaque Binary Blob

Android 2.3引入的OBB文件
一种隔离的文件系统
APK分离出的资源文件放在SD卡上,别的程序没有权限访问
可以通过mkobb.sh、obbtool 加my_secret_key生成obb文件
访问时也需要my_secret_key

3.USB连接模式

默认连接模式
persist.sys.usb.config
bicr mtp adb mass_storage

内置光盘 Built in CD ROM
MTK_BICR_SUPPORT
system/etc/iAmCdRom.iso

PTP Picture Transfer Protocol

MTP 媒体传输协议

MIDI
Musical Instrument Digital Interface
乐器数字接口

4.android服务总览

android系统—储存知识源码分析_第1张图片

ServiceManager为系统服务管家
1、主要负责添加服务,获取服务,查找服务以及当某个服务意外终止时,对该服务的资源进行回收
2、所有的Service使用前都必须先在ServiceManager中进行注册
3、 ServiceManager的启动。

5.Android启动流程

android系统—储存知识源码分析_第2张图片

android系统—储存知识源码分析_第3张图片

init是第一个进程。
init进程挂载目录,
比如/sys、/dev、/proc,

二是运行init.rc脚本。
rc文件叫做Android初始化语言 由四大类型的声明组成
Actions(动作)、Commands(命令)
Services(服务)、Options(选项)

6.Dumpsys

服务: DiskStatsService
This service exists only as a “dumpsys” target which reports statistics about the status of the disk
Dumpsys:打印系统中指定服务的信息
“dumpsys diskstats” 内部存储设备的使用情况
android系统—储存知识源码分析_第4张图片

frameworks\base\services\core\java\com\android\server\ DiskStatsService.java
frameworks/native/cmds/dumpsys/dumpsys.cpp

7.DeviceStorageMonitorService

DSMS:监测系统内部存储空间的状态
服务名:devicestoragemonitor
构造函数,
onstart
checkMemory函数

8.MountService

android系统—储存知识源码分析_第5张图片
Client —— StorageManager
Proxy —— IMountServie.Stub.Proxy
Parcel ——对象序列化类,数据只有继承Parcelable才能进行RPC
Stub —— IMountService.Stub
Server —— MountService

android系统—储存知识源码分析_第6张图片

在SystemServer中调用mSystemServiceManager.startService(MOUNT_SERVICE_CLASS)
实例化

9.Vold (Volume Daemon)

Vold:native进程,接收来自内核的外部设备消息,用于管理和控制Android平台外部存储设备,包括SD插拨、挂载、卸载、格式化等

Netlink
Linux系统中用户空间进程和Kernel进行通信的一种机制,用户空间进程可以接收来自Kernel的消息,同时也可以向Kernel发送一些控制命令

Uevent
和Linux的设备文件系统及设备模型有关,是sysfs向用户空间发送的消息。消息格式实际上是一串字符串。

10.存储大小显示不一致

区分标示容量、实际容量、可以容量
标示1G=1000Mb=1000*1000Kb=1000*1000*1000 字节
实际1G=1024Mb=1024*1024Kb=1024*1024*1024字节
总字节一致时,实际与标示的比值是1000/1024的三次方
数值约为0.9313

遇到的问题如:
总容量显示不是8G,
各存储项大小加起来不够8G
设置和文件管理器大小显示不一致

11.默认存储位置

Google标准接口
String path = Environment.getExternalStorageDirectory().getPath();

2、MTK接口
StorageManagerEx.getDefaultPath()
PROP_SD_DEFAULT_PATH = “persist.sys.sd.defaultpath“

3、通过getVolumeList获取路径

注意:权限、签名
android.permission.WRITE_EXTERNAL_STORAGE“
android.permission.WRITE_MEDIA_STORAG

你可能感兴趣的:(Android,OS,源码分析)