1

私のシナリオは次のとおりです。

  • 1 つのボードが PCIE ルートポート (RP) として機能し、1 つのボードが PCIE エンドポイント (EP) として機能しました。
  • PCIE エンドポイントがメモリ領域をエクスポートしました。このメモリ領域は、RP と EP の間で共有されます。この共有メモリ領域にアクセスする必要があるときはいつでも (実際には、この領域の最初の数バイトの制御データ構造にアクセスするだけです)。読み取りのためにキャッシュを無効化し、書き込み後にキャッシュをフラッシュする必要があります。
  • 以下のように構造を宣言しようとしましたが、キャッシュの無効化/フラッシュがないと、読み取り/書き込みが有効になりません。

    typedef volatile struct { u32 フロント; u32リア; u32 n_msg; u32 オフセット; } queue_ctl_t;

この共有メモリ領域にアクセスする正しい方法を教えてください。一部のネットワークドライバー (PCIE バス上のネットワークカード用) が、キャッシュの無効化/フラッシュを行わずにデータに一貫してアクセスできるのはどうしてだろうか。どんな提案でも大歓迎です、どうもありがとう!

4

1 に答える 1

1

を使用して問題のメモリ領域をマップし、および関数ioremap_nocache()を使用してそれらを読み書きする必要があります。ioread*()iowrite*()

于 2013-03-19T11:25:32.117 に答える