2016-05-09 4 views
2

私はLinuxのデバイスドライバを勉強しています。現在、私はデバイスドライバの流れを近似的に理解していますが、probe()関数がどのように引数を取得するのか分かりません。probe()関数の引数はどこから来ますか?

たとえば、ここに私のコードがあります。これはカーネル3.10に基づいています。

static int gpio_led_probe(struct platform_device *pdev) { 
     struct gpio_led_platform_data *pdata = pdev->dev.platform_data; 
     struct gpio_leds_priv *priv; 
     .... 
     priv = gpio_leds_create_of(pdev); 
     .... 
} 

このように、引数 'pdev'はさまざまなソースポイントに使用されています。私はprobe()が呼び出され、それが役割だと考えていますが、データ 'pdev'がどこから来るのか分かりません。

私のスレッドを読んでいただきありがとうございます。申し訳ありませんが、私の英語は良くありません。

答えて

1

プラットフォームのデバイス固有のデータのプロービングは、プラットフォームの設定コードまたはのデバイスツリーから行われます。 あなたはファイル アーチ/腕/ borad /デバイスで使用すると、ドライバにプラットフォーム関連するデータを渡しますplatform_data構造に埋め込まれた構造体platform_deviceを、関連するコードを見つけることができます。

最新のカーネルでは、プラットフォームデータがデバイスツリーを通じてデバイスドライバに渡されます。デバイスツリーは/arch/arm/boot/dts/your_deviceにあります。

0

platform_device構造体を埋めることでプラットフォームデバイス情報を提供することができます。または、システム起動時にデバイス情報をデバイスツリーに提供する必要があります。 platform_device構造体は、デバイスツリー情報に基づいて生成されます。最新のカーネルでは通常、デバイスツリーを使用してデバイス情報を取得します。

関連する問題