私のシナリオは次のとおりです。
- 1 つのボードが PCIE ルートポート (RP) として機能し、1 つのボードが PCIE エンドポイント (EP) として機能しました。
- PCIE エンドポイントがメモリ領域をエクスポートしました。このメモリ領域は、RP と EP の間で共有されます。この共有メモリ領域にアクセスする必要があるときはいつでも (実際には、この領域の最初の数バイトの制御データ構造にアクセスするだけです)。読み取りのためにキャッシュを無効化し、書き込み後にキャッシュをフラッシュする必要があります。
以下のように構造を宣言しようとしましたが、キャッシュの無効化/フラッシュがないと、読み取り/書き込みが有効になりません。
typedef volatile struct { u32 フロント; u32リア; u32 n_msg; u32 オフセット; } queue_ctl_t;
この共有メモリ領域にアクセスする正しい方法を教えてください。一部のネットワークドライバー (PCIE バス上のネットワークカード用) が、キャッシュの無効化/フラッシュを行わずにデータに一貫してアクセスできるのはどうしてだろうか。どんな提案でも大歓迎です、どうもありがとう!