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 は、両方とも定義されている、composite_bind または webcam_bind のいずれかにマップされるはずです。残念ながら、どちらの関数の printk も dmesg に表示されないため、ここで何かが欠けていると思われます。

usb_gadget_register_driverg_webcam.mod.c には表示されるので、どこかにマップされていることはわかりますが、その場所がどこなのかわかりません。

関連情報