如何找到 driver.mod.c 連結到的位置?

如何找到 driver.mod.c 連結到的位置?

我正在嘗試將網路攝影機複合小工具從核心 2.6.37 移植到 2.6.32。我對此沒有選擇,因為我依賴其他驅動程式和僅針對此版本進行編譯的 SDK。

我的想法是模仿乙太網路小工具的功能,進行一些細微的更改,並使其快速工作,至少正確加載,然後花時間研究視訊串流功能。

我很快就遇到了磚牆,因為我的新驅動程式無法 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 中,它告訴我它被映射到某個地方,我只是無法到達那個地方!

相關內容