1Vold和Rild做什么的?
(1)Vold:Volume Daemon,用于管理和控制Android平台外部存储设备的后台进程,这些管理和控制,包括SD卡的插拔事件检测、SD卡挂载、卸载、格式化等。
(2)Rild:Radio Interface Layer Daemon,用于智能手机的通讯管理和控制的后台进程,所有和手机通讯相关的功能,例如接打电话、收发短信/彩信、GPRS等都需要Rild的参与。
2Vold和Rild都是Native的程序,与Java世界的交互
(1)MountService和Vold交互,一方面它可以接收来自Vold的消息,例如,在应用程序中经常监听到的ACTION_MEDIA_MOUNTED/ACTION_MEDIA_EJECT等广播,就是由MountService根据Vold的信息而触发的。另一方面,它可以向Vold发送控制命令,例如挂载SD卡为磁盘驱动器的操作,就是由MountService发送命令给Vold来执行的。
(2)Phone和Rild交互,它是一个比较复杂的应用程序。简单来说,Phone拨打电话时需要发送对应的命令给Rild来执行。后面在Rild的实例分析中会做相关介绍。
3Vold架构图
4VM模块的职责
说明:VM模块的主要功能是管理Android系统中的外部存储设备。
(1)SD卡的变动(例如热插拔)将导致Kernel发送Uevent消息给NM模块。
(2)NM模块调用VM模块处理这些Uevent消息。
(3)VM模块遍历它所持有的Volume对象,Volume对象根据addPath添加的DEVPATH和Uevent消息中的DEVPATH来判断,自己是否可以处理这个消息。
5SD卡插入事件处理流程图
6智能手机的硬件架构是怎样的?
一个处理器用来运行操作系统,上面可以跑应用程序,这个处理器称作Application Processor,简称AP;
另一个处理器负责和射频无线通信相关的工作,叫Baseband Processor,简称BP。
AP和BP芯片之间采用串口进行通信,通信协议使用的是AT指令。
7Rild解决问题的方法
说明:
(1)Rild会动态加载厂商相关的动态库,这个动态库加载在Linux平台上则使用dlopen系统调用。
(2)Rild和动态库之间通过接口进行通信,也就是说Rild输出接口供动态库使用,而动态库也输出对应的接口供Rild使用。
(3)AP和BP交互的工作由动态库去完成。
8Linux MTD系统层次图