Vold初识1

5 篇文章 0 订阅

system/vold/mail.cpp

1、vold初始化,首先会执行main方法,在该方法中,会初始化三个对象,这三个对象是vold的重要组成部分。

VolumeManager *vm;
    CommandListener *cl;
    NetlinkManager *nm;

创建文件夹:

mkdir("/dev/block/vold", 0755);
创建三大对象:

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();
CommandListener是一个消息传递中介者,其作为服务端,与上层MountService传递消息。故:我们的NetlinkManager与VolumeManager都需要获取其句柄。

vm->setBroadcaster((SocketListener *) cl);
    nm->setBroadcaster((SocketListener *) cl);
2、对象创建完毕,那么接下来就是三大对象的初始化等流程。

2.1、VolumeManager的初始化以及相关逻辑。

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));
    }
2.2、NetlinkManager的初始化以及相关逻辑:

if (nm->start()) {
        SLOGE("Unable to start NetlinkManager (%s)", strerror(errno));
        exit(1);
    }

    coldboot("/sys/block");
其中coldboot会模拟往设备文件写入内容,从而触发kernel上报底层状态。写入的操作的前提,是保证NetlinkManager与kernel建立链接,从而保证kernel上报的信息,NetlinkManager能够收到并继续处理。

2.3、CommandListener的初始化:

if (cl->startListener()) {
        SLOGE("Unable to start CommandListener (%s)", strerror(errno));
        exit(1);
    }


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

hailushijie

您的鼓励是我创作最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值