Driver.mod.c가 링크되는 위치를 찾는 방법은 무엇입니까?

Driver.mod.c가 링크되는 위치를 찾는 방법은 무엇입니까?

웹캠 복합 가젯을 커널 2.6.37에서 2.6.32로 포팅하려고 합니다. 이 버전용으로만 컴파일되는 다른 드라이버와 SDK에 의존하기 때문에 이에 대한 선택의 여지가 없습니다.

내 생각은 몇 가지 사소한 변경을 통해 이더넷 장치 기능을 모방하고 빠르게 작동하도록 하고 최소한 제대로 로드한 다음 비디오 스트리밍 기능 작업에 시간을 투자하는 것이었습니다.

-1 장치의 리소스가 사용 중이기 때문에 새 드라이버를 insmod로 설정할 수 없기 때문에 매우 빠르게 벽돌 벽에 부딪혔습니다.

나는 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가 둘 다 정의되어 있는 웹캠_bind의 complex_bind에 매핑될 것으로 예상합니다. 불행하게도 두 기능 모두의 printks는 dmesg에 표시되지 않으므로 여기에 뭔가 빠졌다고 가정합니다.

usb_gadget_register_driverg_webcam.mod.c에 나타나서 어딘가에 매핑되어 있다고 알려주는데, 그 장소가 어디에 있는지 알 수 없습니다!

관련 정보