首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >vold和udevd的区别

vold和udevd的区别
EN

Stack Overflow用户
提问于 2014-05-05 07:26:33
回答 2查看 4.5K关注 0票数 6

我知道Android使用卷守护程序而不是udevd。

由于这两个守护进程的作用相似,如下所示:

  1. 使用netlink套接字接收从内核发送的uevents。
  2. 处理用于进一步处理的文件节点。

我不清楚这两个不同守护进程之间的区别。

有人能提供反馈吗?这将是很好的利弊。

谢谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-05-05 13:46:43

在查看vold源代码之后,我只能知道它只是对udevd的一个简单的替代。

您说得对,vold正在使用netlink套接字从内核接收uevents。但我想说的是,它处理的是子系统事件,而不是像您所说的“文件节点”。

在NetlinkHandler.cpp中,您可以看到以下内容:

代码语言:javascript
复制
void NetlinkHandler::onEvent(NetlinkEvent *evt) {
    VolumeManager *vm = VolumeManager::Instance();
    const char *subsys = evt->getSubsystem();

    if (!subsys) {
        SLOGW("No subsystem found in netlink event");
        return;
    }

    if (!strcmp(subsys, "block")) {
        vm->handleBlockEvent(evt);
    }
}

最后一行只需比较uevent子系统字符串和“块”。正如我所看到的,这是与udevd的主要区别,因为udevd处理所有的子系统,而vold是处理像存储卡这样的块设备的简单守护进程。

vold的良好演示:http://www.slideshare.net/wiliwe/android-storage-vold

子系统编辑

子系统是整个内核的高级部分的表示。实际上,子系统只是内核的kset的一个包装器。在LDD3的第14.1章- Kobjects、Kset和子系统中有一篇很好的文章。

例如,让我们监视事件时,我插入USB棒。

代码语言:javascript
复制
$ udevadm monitor -k
KERNEL[82215.299677] add      /devices/pci0000:00/0000:00:1a.0/usb1/1-1/1-1.1 (usb)
KERNEL[82215.299921] add      /devices/pci0000:00/0000:00:1a.0/usb1/1-1/1-1.1/1-1.1:1.0 (usb)
KERNEL[82215.300192] add      /devices/pci0000:00/0000:00:1a.0/usb1/1-1/1-1.1/1-1.1:1.0/host10 (scsi)
KERNEL[82215.300226] add      /devices/pci0000:00/0000:00:1a.0/usb1/1-1/1-1.1/1-1.1:1.0/host10/scsi_host/host10 (scsi_host)
KERNEL[82216.339987] add      /devices/pci0000:00/0000:00:1a.0/usb1/1-1/1-1.1/1-1.1:1.0/host10/target10:0:0 (scsi)
KERNEL[82216.340047] add      /devices/pci0000:00/0000:00:1a.0/usb1/1-1/1-1.1/1-1.1:1.0/host10/target10:0:0/10:0:0:0 (scsi)
KERNEL[82216.340069] add      /devices/pci0000:00/0000:00:1a.0/usb1/1-1/1-1.1/1-1.1:1.0/host10/target10:0:0/10:0:0:0/scsi_disk/10:0:0:0 (scsi_disk)
KERNEL[82216.340088] add      /devices/pci0000:00/0000:00:1a.0/usb1/1-1/1-1.1/1-1.1:1.0/host10/target10:0:0/10:0:0:0/scsi_device/10:0:0:0 (scsi_device)
KERNEL[82216.340302] add      /devices/pci0000:00/0000:00:1a.0/usb1/1-1/1-1.1/1-1.1:1.0/host10/target10:0:0/10:0:0:0/scsi_generic/sg2 (scsi_generic)
KERNEL[82216.340445] add      /devices/pci0000:00/0000:00:1a.0/usb1/1-1/1-1.1/1-1.1:1.0/host10/target10:0:0/10:0:0:0/bsg/10:0:0:0 (bsg)
KERNEL[82217.110295] add      /devices/virtual/bdi/8:16 (bdi)
KERNEL[82217.141629] add      /devices/pci0000:00/0000:00:1a.0/usb1/1-1/1-1.1/1-1.1:1.0/host10/target10:0:0/10:0:0:0/block/sdb (block)

要确定这个输出中的子系统是什么,让我们看看udevadm-monitor.c中的udev代码

代码语言:javascript
复制
static void print_device(struct udev_device *device, const char *source, int prop)
{
        struct timespec ts;

        clock_gettime(CLOCK_MONOTONIC, &ts);
        printf("%-6s[%llu.%06u] %-8s %s (%s)\n",
               source,
               (unsigned long long) ts.tv_sec, (unsigned int) ts.tv_nsec/1000,
               udev_device_get_action(device),
               udev_device_get_devpath(device),
               udev_device_get_subsystem(device));
        if (prop) {
                struct udev_list_entry *list_entry;

                udev_list_entry_foreach(list_entry, udev_device_get_properties_list_entry(device))
                        printf("%s=%s\n",
                               udev_list_entry_get_name(list_entry),
                               udev_list_entry_get_value(list_entry));
                printf("\n");
        }
}

在第一个printf中,udev_device_get_subsystem(device)将在括号的最后一个字段中输出sybsystem。

因此,对于udevadm monitor输出,您可以看到以下子系统:

  • usb
  • scsi
  • scsi_host
  • scsi_disk
  • scsi_device
  • scsi_generic
  • bsg
  • bdi
  • 区块

udev将处理所有这些事件,以便在/dev下创建不同的条目,例如

  • /dev/disk/by-id/<entry>将基于磁盘SCSI创建。
  • /dev/disk/by-path/<entry>将基于PCI连接和SCSI主机信息创建。
  • 诸若此类

相反,vold只对来自系统的uevents感兴趣,它不关心scsi、usb或bdi之类的东西。

票数 6
EN

Stack Overflow用户

发布于 2017-07-11 15:12:47

在android中没有udevd,它被称为ueventsd。在android系统中,Ueventsd和vold都有存在。Vold主要用于拆放储藏室,主要用于储存卡、挂件等。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23467050

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档