ホームページ  >  記事  >  運用・保守  >  Linux におけるプラットフォームとは何を意味しますか?

Linux におけるプラットフォームとは何を意味しますか?

WBOY
WBOYオリジナル
2022-07-08 17:00:134470ブラウズ

Linux では、プラットフォームは「spi/sdio/usb/pcie」などの実際のバスに対応する仮想バスです。プラットフォームはハードウェアとソフトウェアを分離でき、プラットフォームによって記述されるリソースには 1 つの共通点があります。アドレスは CPU バス上で直接取得され、プラットフォーム デバイスには名前と、アドレスや割り込み要求番号などの一連のリソースが割り当てられます。

Linux におけるプラットフォームとは何を意味しますか?

#このチュートリアルの動作環境: linux7.3 システム、Dell G3 コンピューター。

Linux におけるプラットフォームの意味

プラットフォームは仮想バスであり、実際の 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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。