Как найти, куда ссылается driver.mod.c?

Как найти, куда ссылается driver.mod.c?

Я пытаюсь перенести составной гаджет веб-камеры с ядра 2.6.37 на 2.6.32. У меня нет выбора, так как я завишу от других драйверов и SDK, которые компилируются только для этой версии.

Моя идея была в том, чтобы имитировать функциональность гаджета Ethernet с некоторыми небольшими изменениями и заставить его работать быстро, по крайней мере, правильно загружаться, а затем потратить время на работу над возможностями потоковой передачи видео.

Я довольно быстро упёрся в стену, потому что мой новый драйвер не может быть insmod, потому что -1 Устройство ресурса занято.

Я попытался глубже разобраться с printk и выяснить, что происходит.

Основная инициализация выглядит следующим образом:

module_init(webcam_init)
webcam_init()
usb_composite_register(&webcam_driver)
usb_gadget_register_driver(&composite_driver)

Эти функции определяются следующим образом:

static struct usb_composite_driver webcam_driver = {
    .name       = "g_webcam",
    .dev        = &webcam_device_descriptor,
    .strings    = webcam_device_strings,
    .bind           = webcam_bind,
    .unbind     = webcam_unbind,
};

static int __init
webcam_init(void)
{
    return usb_composite_register(&webcam_driver);
}

int __init usb_composite_register(struct usb_composite_driver *driver)
{
    if (!driver || !driver->dev || !driver->bind || composite)
        return -EINVAL;

    if (!driver->name)
        driver->name = "composite";
    composite_driver.function =  (char *) driver->name;
    composite_driver.driver.name = driver->name;
    composite = driver;

    return usb_gadget_register_driver(&composite_driver);
}

Страница руководства usb_gadget_register_driver показывает это

Вызовите это в функции инициализации модуля драйвера гаджета, чтобы сообщить базовому драйверу контроллера USB о вашем драйвере. Функция привязки драйвера будет вызвана для привязки его к гаджету до возврата этого вызова регистрации. Ожидается, что функции привязки будут находиться в разделах init. Эта функция должна вызываться в контексте, который может спать.

Я бы ожидал, что usb_gadget_register_driver будет сопоставлен либо с composite_bind, либо с webcam_bind, оба из которых определены. К сожалению, printks в любой из функций никогда не отображаются в dmesg, поэтому я предполагаю, что я что-то упускаю.

usb_gadget_register_driverотображается в g_webcam.mod.c, который сообщает мне, что он где-то отображен, но я просто не могу понять, где это место!

Связанный контент