Android2.2 Vold mian函数分析
2011-01-12 14:28
253 查看
声明 VolumeManager *vm; CommandListener *cl; NetlinkManager *nm;对象指针;
创建目录/dev/block/vold mkdir("/dev/block/vold", 0755);
分别构建VolumeManager 、 CommandListener 、NetlinkManager 对象*vm,*cl,*nm;
if (!(vm = VolumeManager::Instance()))
if (!(nm = NetlinkManager::Instance()))
cl = new CommandListener();
广播相关参数 mBroadcaster = sl 设置;
vm->setBroadcaster((SocketListener *) cl);
nm->setBroadcaster((SocketListener *) cl);
解析 /system/etc/vold.fstab文件,做三件事:
if (process_config(vm))
(1). 构建DirectVolume对象 :中定义的挂载项构建对应的DirectVolume对象 dv = new DirectVolume(vm, label, mount_point, -1);
(2). 添加vold.fstab中定义的某一挂载项对应的sysfs_path到 DirectVolume对象的mPaths容器 dv->addPath(sysfs_path);
(3). 将这个DirectVolume 对象添加到 VolumeManager对象的容器mVolumes中 vm->addVolume(dv);
启动NetlinkManager,创建相应的socket,通过NetlinkHandler的start函数启动 SocketListener::startListen,关于SocketListener到后面再进行分析;
nm->start()
int NetlinkManager::start()------->mHandler->start()-------->this->startListener()调用 SocketListener::startListen();
递归打开sys/block目录下的所有子目录 coldboot("/sys/block");
/*
* Switch uevents are broken.
* For now we manually bootstrap
* the ums switch
*/
查询/sys/devices/virtual/switch/usb_mass_storage/state状态信息,并发送广播
if ((fp = fopen("/sys/devices/virtual/switch/usb_mass_storage/state","r"))) {
if (fgets(state, sizeof(state), fp)) {
if (!strncmp(state, "online", 6)) {
vm->notifyUmsConnected(true);
监听命令,并进行相应的处理,Eventually we'll become the monitoring thread .
cl->startListener()
调用SocketListener::startListener(),在startListener函数中启动线程
pthread_create(&mThread, NULL, SocketListener::threadStart, this) ;
void *SocketListener::threadStart(void *obj) {
SocketListener *me = reinterpret_cast<SocketListener *>(obj);
me->runListener(); ------------>void SocketListener::runListener()无限循环,监听消息及消息出理
pthread_exit(NULL);
return NULL;
}
创建目录/dev/block/vold mkdir("/dev/block/vold", 0755);
分别构建VolumeManager 、 CommandListener 、NetlinkManager 对象*vm,*cl,*nm;
if (!(vm = VolumeManager::Instance()))
if (!(nm = NetlinkManager::Instance()))
cl = new CommandListener();
广播相关参数 mBroadcaster = sl 设置;
vm->setBroadcaster((SocketListener *) cl);
nm->setBroadcaster((SocketListener *) cl);
解析 /system/etc/vold.fstab文件,做三件事:
if (process_config(vm))
(1). 构建DirectVolume对象 :中定义的挂载项构建对应的DirectVolume对象 dv = new DirectVolume(vm, label, mount_point, -1);
(2). 添加vold.fstab中定义的某一挂载项对应的sysfs_path到 DirectVolume对象的mPaths容器 dv->addPath(sysfs_path);
(3). 将这个DirectVolume 对象添加到 VolumeManager对象的容器mVolumes中 vm->addVolume(dv);
启动NetlinkManager,创建相应的socket,通过NetlinkHandler的start函数启动 SocketListener::startListen,关于SocketListener到后面再进行分析;
nm->start()
int NetlinkManager::start()------->mHandler->start()-------->this->startListener()调用 SocketListener::startListen();
递归打开sys/block目录下的所有子目录 coldboot("/sys/block");
/*
* Switch uevents are broken.
* For now we manually bootstrap
* the ums switch
*/
查询/sys/devices/virtual/switch/usb_mass_storage/state状态信息,并发送广播
if ((fp = fopen("/sys/devices/virtual/switch/usb_mass_storage/state","r"))) {
if (fgets(state, sizeof(state), fp)) {
if (!strncmp(state, "online", 6)) {
vm->notifyUmsConnected(true);
监听命令,并进行相应的处理,Eventually we'll become the monitoring thread .
cl->startListener()
调用SocketListener::startListener(),在startListener函数中启动线程
pthread_create(&mThread, NULL, SocketListener::threadStart, this) ;
void *SocketListener::threadStart(void *obj) {
SocketListener *me = reinterpret_cast<SocketListener *>(obj);
me->runListener(); ------------>void SocketListener::runListener()无限循环,监听消息及消息出理
pthread_exit(NULL);
return NULL;
}
相关文章推荐
- Android2.2 Vold 分析-(二)---Vold 中 Netlink事件通信机制分析
- Android2.2源码分析[GPS模块]
- Android2.2、Android2.3 、Android4.0 audio hardware模块分析
- Android2.2源码属性服务分析
- Android 2.2 源码结构分析
- Camera源码分析(android2.2)
- 深入理解init_1----init分析(基于Android 2.2,源码来自Google)
- Camera源码分析(android2.2)
- Camera源码分析(android2.2)
- Android2.2源码分析1.Manifest.permission
- Android2.2 Vold 分析(一)-- main函数分析
- Android2.2 Vold 分析-(二)---Vold 中 Netlink事件通信机制分析
- 卷二 Dalvik与Android源码分析 第二章 进程与线程 2.2 Dalvik线程创建机制 图书版试读--请勿转发
- android2.2 watchdog分析
- android 2.2 vold VolumeManager 分析
- Android2.2 Vold 分析(三)---Vold 中 volumeManager分析