Linux では、プラットフォームは「spi/sdio/usb/pcie」などの実際のバスに対応する仮想バスです。プラットフォームはハードウェアとソフトウェアを分離でき、プラットフォームによって記述されるリソースには 1 つの共通点があります。アドレスは CPU バス上で直接取得され、プラットフォーム デバイスには名前と、アドレスや割り込み要求番号などの一連のリソースが割り当てられます。
#このチュートリアルの動作環境: linux7.3 システム、Dell G3 コンピューター。
プラットフォームは仮想バスであり、実際の spi/sdio/usb/pcie およびその他のバスに対応します
#論理バス の重要な機能は、デバイスを検出し、デバイスを操作するための適切なドライバーを見つけることです。
プラットフォームバスは、論理的な相互接続機能を満たす仮想的な論理バスです。デバイスを均一に管理するために、プラットフォームはプラットフォーム バスを使用して、物理的にバスを持たないタイプのデバイスを均一に管理できます。
USB、SPI、UART、PCI、I2S、その他のバスなどの一般的なバスは、物理的には実際のバスです。 Linux システムは、このようなバス、つまりバスを一元管理するための方法を設計しました。同時に、プラットフォーム バスは、物理的にバスを持たないデバイス向けにも設計されています。そのため、Linux カーネルの設計者は、プラットフォーム バスを設計しました。言い換えれば、プラットフォーム バスは、内部に物理的なバスを持たないデバイス向けに設計されています。 SoC.それらはすべてバス カテゴリに属します。
この利点は、デバイス (デバイス) 側のコードの作成者が特定のハードウェア部分のみを考慮し、デバイスの共通部分 (安定した部分) がカーネル設計者によって完成されることです。ドライバーの書き込みの難易度を軽減します。
プラットフォーム バスを通じて、デバイス属性 (データとも呼ばれる) とドライバーを分離できるため、同じドライバーを使用して、同じ機能のコア ハードウェアを備えたさまざまなデバイスをサポートできます。これにより、1 つのデバイスに 1 つのドライバーが必要になるという現象が回避され、繰り返しの作業が軽減されます。
拡張知識
プラットフォーム プラットフォーム バス関連の定義
プラットフォーム プラットフォーム バス関連のオブジェクトは、ファイル drivers/base/platform で定義されます。 c 真ん中。このファイルは、プラットフォーム バス オブジェクトとオブジェクト操作メソッドを実装します。
2 つの重要なデータ構造
1. platform_driver
これは、オブジェクトの操作方法を定義する device_driver が埋め込まれた構造オブジェクトです。
2. platform_device
これは、デバイス記述リソースの属性を定義する組み込みデバイス構造オブジェクトです。
具体的なオブジェクト定義は次のとおりです:
1. platform_driver オブジェクト定義
struct platform_driver { int (*probe)(struct platform_device *); //探测函数,安装设备,初始化设备,并且判断是否能成功(初始化成功,通讯成功等等) int (*remove)(struct platform_device *); //从内核中删除这个设备 void (*shutdown)(struct platform_device *); // 关闭设备 int (*suspend)(struct platform_device *, pm_message_t state); //挂起 int (*resume)(struct platform_device *); //唤醒 struct device_driver driver; //驱动的通用属性 const struct platform_device_id *id_table; //设备ID表 };
platform_device オブジェクト ペア定義:
struct platform_device { const char* name; //平台总线中设备的名字,在平台总线下有多个设备,每个设备都有自己的名称 intid; //设备的排序 struct devicedev; //所有设备通用的属性 u32num_resources; //设备资源,如IO等一些外设等的个数 struct resource* resource; //设备资源的首地址,和上面的个数num_resources一起构成一个数组来表示这个资源 const struct platform_device_id*id_entry; //设备ID表,表示同一种类型的几个设备的ID号,数组表示。 struct pdev_archdataarchdata; /* arch specific additions *///用户自定义数据,扩展数据 };
プラットフォーム バス ドライバー関数を登録します:
int platform_driver_register(struct platform_driver *drv)
プラットフォーム バス デバイスを登録する関数:
int platform_device_register(struct platform_device *pdev)
推奨学習: Linux ビデオ チュートリアル
以上がLinux におけるプラットフォームとは何を意味しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。