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가 complex_bind 또는 웹캠_bind에 매핑될 것으로 예상했는데 둘 다 정의되었습니다. 불행하게도 이 두 함수의 printks는 dmesg에 전혀 표시되지 않으므로 여기에 뭔가 빠진 것 같습니다.

usb_gadget_register_driverg_webcam.mod.c에 나타나며 어딘가에 매핑되어 있다고 알려주지만 그 장소에 갈 수 없습니다!

관련 정보