android /system/vold源码分析(1)

来源:互联网 发布:在淘宝上做虚拟充值 编辑:程序博客网 时间:2024/06/12 20:14

    void是类似linux中udev功能的程序,它管理着可热插拔设备的热插拔工作。

main函数完成的VolumeManager, CommandListerer, NetlinkManager的初始化工作,并执行:
vm->start()
nm->start()
cl->startListener()

int main() {//下面定义了VOLD中三个重要的类    VolumeManager *vm;    CommandListener *cl;    NetlinkManager *nm;    SLOGI("Vold 2.1 (the revenge) firing up");    mkdir("/dev/block/vold", 0755);    /* For when cryptfs checks and mounts an encrypted filesystem */    klog_set_level(6);    /* Create our singleton managers */    if (!(vm = VolumeManager::Instance())) {        SLOGE("Unable to create VolumeManager");        exit(1);    };    if (!(nm = NetlinkManager::Instance())) {        SLOGE("Unable to create NetlinkManager");        exit(1);    };    cl = new CommandListener();    vm->setBroadcaster((SocketListener *) cl);     nm->setBroadcaster((SocketListener *) cl);    if (vm->start()) {        SLOGE("Unable to start VolumeManager (%s)", strerror(errno));        exit(1);    }    if (process_config(vm)) {        SLOGE("Error reading configuration (%s)... continuing anyways", strerror(errno));    }    if (nm->start()) {        SLOGE("Unable to start NetlinkManager (%s)", strerror(errno));        exit(1);    }    coldboot("/sys/block");//    coldboot("/sys/class/switch");    /*     * Now that we're up, we can respond to commands     */    if (cl->startListener()) {        SLOGE("Unable to start CommandListener (%s)", strerror(errno));        exit(1);    }    // Eventually we'll become the monitoring thread    while(1) {        sleep(1000);    }    SLOGI("Vold exiting");    exit(0);}
在NetlinkManager.h和VolumeManager.h中均定义了
SocketListener       *mBroadcaster;void setBroadcaster(SocketListener *sl) { mBroadcaster = sl; }SocketListener *getBroadcaster() { return mBroadcaster; }
CommandListener类是FrameworkListener子类,而FrameworkListener是SocketListener子类。



0 0
原创粉丝点击