私はカーネル ドライバー プログラミングに不慣れで、いくつかの側面を理解したいと考えています。
http://lxr.free-electrons.com/source/drivers/i2c/busses/i2c-ocores.c?v=3.19の以下のコード
static int ocores_i2c_probe(struct platform_device *pdev)
{
struct ocores_i2c *i2c;
i2c = devm_kzalloc(&pdev->dev, sizeof(*i2c), GFP_KERNEL);
}
- pdev は、プラットフォーム デバイスへのポインタです。pdev が指している構造体の内容は、プラットフォーム デバイスが初期化されたときに既に作成されており、ドライバー コアはその情報をこのプローブ関数に渡します。?? これは、ドライバーコアが使用するドライバーのプローブ中に識別された pci_dev を渡す pci dev 構造と同じですか? 私の理解は正しいですか?
- devm_kzalloc のパラメーターについては明確ではありません。763行目の「メモリを割り当てるデバイス」とはどういう意味ですかhttp://lxr.free-electrons.com/source/drivers/base/devres.c?v=3.19#L774 ? 結局のところ、サイズが struct ocores_i2c のカーネルにメモリを割り当てる必要があるだけです。最初のパラメーターは、後で自動的に解放するための追跡メカニズムとして使用されますか (devres カーネルのドキュメントを読むことに基づいています)?
- devm_kzalloc の戻り値は、カーネルで新しく割り当てられたサイズ ocores_i2c のメモリへのポインタです。この場合、devm_kzalloc の 2 番目のパラメーターを sizeof(*i2c ) ではなく sizeof(struct ocores_i2c) にすべきではありませんか?