Wie finde ich heraus, wohin driver.mod.c verweist?

Wie finde ich heraus, wohin driver.mod.c verweist?

Ich versuche, das Webcam-Composite-Gadget von Kernel 2.6.37 auf 2.6.32 zu portieren. Ich habe keine andere Wahl, da ich auf andere Treiber und ein SDK angewiesen bin, das nur für diese Version kompiliert werden kann.

Meine Überlegung war, die Funktionalität des Ethernet-Gadgets mit einigen geringfügigen Änderungen nachzuahmen und es schnell zum Laufen zu bringen, zumindest so, dass es richtig lädt, und dann Zeit damit zu verbringen, an den Video-Streaming-Funktionen zu arbeiten.

Ich bin ziemlich schnell gegen eine Wand gelaufen, da mein neuer Treiber nicht insmod werden kann, da -1 Gerät oder Ressource belegt ist.

Ich habe versucht, mit printk tiefer zu graben und herauszufinden, was los war.

Die Hauptinitialisierung scheint wie folgt abzulaufen

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

Diese Funktionen sind wie folgt definiert:

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

Die Manpage von usb_gadget_register_driver zeigt dies

Rufen Sie dies in der Modulinitialisierungsfunktion Ihres Gadget-Treibers auf, um den zugrunde liegenden USB-Controller-Treiber über Ihren Treiber zu informieren. Die Bind-Funktion des Treibers wird aufgerufen, um ihn an ein Gadget zu binden, bevor dieser Registrierungsaufruf zurückkehrt. Es wird erwartet, dass sich die Bind-Funktionen in Init-Abschnitten befinden. Diese Funktion muss in einem Kontext aufgerufen werden, der in den Ruhezustand versetzt werden kann.

Ich würde erwarten, dass usb_gadget_register_driver entweder auf composite_bind oder webcam_bind abgebildet wird, die beide definiert sind. Leider werden printks in beiden Funktionen nie in dmesg angezeigt, daher gehe ich davon aus, dass ich hier etwas übersehe.

usb_gadget_register_driverwird in g_webcam.mod.c angezeigt, was mir sagt, dass es irgendwo zugeordnet ist, ich kann nur nicht herausfinden, wo dieser Ort ist!

verwandte Informationen