Можно ли определить наличие карты расширения USB в Linux?

Я хотел бы написать какую-нибудь программу на С++, которая может обнаруживать наличие карты расширения USB или устройства чтения SD-карт без необходимости подключения к ней чего-либо. Это возможно? В линуксе?


person jmatias    schedule 20.01.2012    source источник
comment
Вас могут заинтересовать программы lsusb и udev. Я не знаю точно, какие системные вызовы они на самом деле делают. Вы можете использовать strace, чтобы узнать.   -  person Basile Starynkevitch    schedule 20.01.2012


Ответы (2)


если вы знаете точный идентификатор поставщика и/или идентификатор продукта, вы можете найти его, например:

for (bus = busses; bus; bus = bus->next)
for (dev = bus->devices; dev; dev = dev->next)
  if ((dev->descriptor.idVendor == vendor) && (dev->descriptor.idProduct == product))
    return dev;

руководство по libusb

person iabdalkader    schedule 20.01.2012

Да, вы можете получить idVendor и idProduct простым dmesg. А затем поставить условие поиска для него только что показанное выше знающим человеком. Если вы хотите копнуть глубже, и если у вас есть Linux, вы можете изучить usb.h, присутствующие в вашем <kernel_source>/drivers/usb/core. Есть структура: struct usb_device{}. Если вы еще больше заинтересованы в изучении, вам следует проверить driver.c и hub.c для таких методов, как announce_device(), который печатает информацию об устройстве USB после dmesg. Исследуйте его навсегда! :)

person Community    schedule 10.02.2013