Я хотел бы написать какую-нибудь программу на С++, которая может обнаруживать наличие карты расширения USB или устройства чтения SD-карт без необходимости подключения к ней чего-либо. Это возможно? В линуксе?
Можно ли определить наличие карты расширения USB в Linux?
Ответы (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;
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
lsusb
иudev
. Я не знаю точно, какие системные вызовы они на самом деле делают. Вы можете использоватьstrace
, чтобы узнать. - person Basile Starynkevitch   schedule 20.01.2012