Driver.mod.cが接続されている場所をどのように見つけますか?

Driver.mod.cが接続されている場所をどのように見つけますか?

Webカメラ複合ガジェットをカーネル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またはwebcam_bindにマッピングされると予想しましたが、両方が定義されました。残念ながら、これら2つの関数のprintksはdmesgにまったく表示されないので、ここに何かが欠けているようです。

usb_gadget_register_driverg_webcam.mod.cに表示され、どこかにマップされていることをお知らせしますが、その場所に行くことはできません!

関連情報