Como descobrir para onde o driver.mod.c está vinculado?

Como descobrir para onde o driver.mod.c está vinculado?

Estou tentando portar o gadget composto de webcam do kernel 2.6.37 para 2.6.32. Não tenho escolha, pois dependo de outros drivers e de um SDK que só compila para esta versão.

Minha linha de pensamento era imitar a funcionalidade do gadget Ethernet com algumas pequenas alterações e fazê-lo funcionar rapidamente, pelo menos carregando corretamente, e então gastar tempo trabalhando nos recursos de streaming de vídeo.

Encontrei uma parede de tijolos muito rápido, porque meu novo driver não pode ser insmod, porque -1 Dispositivo de recurso ocupado.

Tentei me aprofundar no printk e descobrir o que estava acontecendo.

A inicialização principal parece ser a seguinte

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

Essas funções são definidas da seguinte forma:

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);
}

A página do manual usb_gadget_register_driver mostra isso

Chame isso na função de inicialização do módulo do driver do gadget, para informar o driver do controlador USB subjacente sobre o seu driver. A função bind do driver será chamada para vinculá-lo a um gadget antes que essa chamada de registro retorne. Espera-se que as funções de ligação estejam nas seções init. Esta função deve ser chamada em um contexto que possa dormir.

Eu esperaria que usb_gadget_register_driver fosse mapeado para composite_bind de webcam_bind, ambos definidos. Infelizmente, os printks em qualquer uma das funções nunca aparecem no dmesg, então presumo que estou faltando alguma coisa aqui.

usb_gadget_register_driveraparece em g_webcam.mod.c, o que me diz que está mapeado em algum lugar, simplesmente não consigo chegar onde fica esse lugar!

informação relacionada