如何找到 driver.mod.c 链接到的位置?

如何找到 driver.mod.c 链接到的位置?

我正在尝试将网络摄像头复合小工具从内核 2.6.37 移植到 2.6.32。我对此没有选择,因为我依赖于其他驱动程序和仅针对此版本进行编译的 SDK。

我的思路是模仿以太网小工具的功能,进行一些细微的更改,并使其快速工作,至少正确加载,然后花时间研究视频流功能。

我很快就遇到了麻烦,因为我的新驱动程序无法被修改,因为 -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 中,它告诉我它被映射到某个地方,我只是无法到达那个地方!

相关内容