Цитата(gosha @ Oct 9 2012, 12:40)

Есть опыт написания драйверов usb-storage, usb-video.
Со стороны хоста, или со стороны гаджета?
Мои вопросы состоят примерно в следующем:
1) В папке drivers/usb/gadget во всех драйверах используются функции библиотеки composite.c. Например, драйвер регистрируется с помощью функции usb_composite_probe, которая в свою очередь вызывает usb_gadget_probe_driver, описанную в include/linux/usb/gadget.h. А реализация этой функции, похоже, у каждого драйвера своя. Например, для драйвера zero.c её нет в явном виде, и мне не понятно, в каком направлении дальше идёт регистрация драйвера Gadget Zero в системе...
2) Если продолжить рассматривать драйвер zero.c, то там явно описывается только дескриптор устройства ( в структуре zero_driver = { <...>, .dev = &device_desc, <...> } ). Остальные дескрипторы (Configuration Descriptor, Interface Descriptor), похоже, инициализируются где-то через функции composite.c. Мне не понятно, как их (дескрипторы) задавать (например, для USB TMC устройств мне нужно прописать bInterfaceClass = 0xFE, bInterfaceSubClass = 3, bInterfaceProtocol = 1).