在关闭automount的情况下查找并安装USB驱动器

时间:2013-03-06 00:46:10

标签: ubuntu usb mount dbus udev

我将USB设备插入Ubuntu 12.04系统。 由于各种原因,Automount已关闭。

我想创建一个程序来查找和安装此设备,最好是在 启动过程。我需要这样做而不扫描dmesg。 我已经对DBus做了一些阅读,这似乎是相关的 子系统,但我希望有一个干净的界面 某种我可以用来识别/ dev / sd *名称 该设备。

编辑:我似乎能够通过libudev框架使用他们的usb供应商ID搜索设备。我正在使用的示例代码如下:

    #include <libudev.h>
    #include <stdio.h>
    #include <stdlib.h>
    #include <locale.h>
    #include <unistd.h>

    /**
    *    compile with gcc -Wall -g -o udev_listener udev_listener.c -ludev
    *
    **/

    int main (void)
    {
        struct udev *udev;
        struct udev_enumerate *enumerate;
        struct udev_list_entry *devices, *dev_list_entry;
        struct udev_device *dev;

        /* Create the udev object */
        udev = udev_new()

;
    if (!udev) {
        printf("Can't create udev\n");
        exit(1);
    }

    /* Create a list of the devices in the 'hidraw' subsystem. */
    enumerate = udev_enumerate_new(udev);
    udev_enumerate_add_match_sysattr(enumerate, "idVendor", "046d");   
    udev_enumerate_scan_devices(enumerate);
    devices = udev_enumerate_get_list_entry(enumerate);
    /* For each item enumerated, print out its information.
       udev_list_entry_foreach is a macro which expands to
       a loop. The loop will be executed for each member in
       devices, setting dev_list_entry to a list entry
       which contains the device's path in /sys. */
    udev_list_entry_foreach(dev_list_entry, devices) {
        const char *path;

        /* Get the filename of the /sys entry for the device
           and create a udev_device object (dev) representing it */
        path = udev_list_entry_get_name(dev_list_entry);
        dev = udev_device_new_from_syspath(udev, path);

        /* usb_device_get_devnode() returns the path to the device node
           itself in /dev. */
        printf("Device Node Path: %s\n", udev_device_get_devnode(dev));

        /* The device pointed to by dev contains information about
           the hidraw device. In order to get information about the
           USB device, get the parent device with the
           subsystem/devtype pair of "usb"/"usb_device". This will
           be several levels up the tree, but the function will find
           it.*/
        dev = udev_device_get_parent_with_subsystem_devtype(
               dev,
               "usb",
               "usb_device");
        if (!dev) {
            printf("Unable to find parent usb device.");
            exit(1);
        }

        /* From here, we can call get_sysattr_value() for each file
           in the device's /sys entry. The strings passed into these
           functions (idProduct, idVendor, serial, etc.) correspond
           directly to the files in the directory which represents
           the USB device. Note that USB strings are Unicode, UCS2
           encoded, but the strings returned from
           udev_device_get_sysattr_value() are UTF-8 encoded. */
        printf("  VID/PID: %s %s\n",
                udev_device_get_sysattr_value(dev,"idVendor"),
                udev_device_get_sysattr_value(dev, "idProduct"));
        printf("  %s\n  %s\n",
                udev_device_get_sysattr_value(dev,"manufacturer"),
                udev_device_get_sysattr_value(dev,"product"));
        printf("  serial: %s\n",
                 udev_device_get_sysattr_value(dev, "serial"));
        udev_device_unref(dev);
    }
    /* Free the enumerator object */
    udev_enumerate_unref(enumerate);

    udev_unref(udev);

    return 0;      
}

奇怪的是,当我运行此代码时,我得到以下输出:

Device Node Path: /dev/bus/usb/007/002
  VID/PID: 1d6b 0001
  Linux 3.2.0-38-generic ohci_hcd
  OHCI Host Controller
  serial: 0000:00:16.0

这不是我指定的VID ......

0 个答案:

没有答案