PowerPCアーキテクチャでCPUキャッシュ範囲を「無効化」または「フラッシュ」する方法は?

PowerPCアーキテクチャでCPUキャッシュ範囲を「無効化」または「フラッシュ」する方法は?

PowerPC私はPCIeを介してCPUと通信する組み込みデバイスで作業しています。 SDKの制限により、Linuxカーネルバージョンを使用する必要があります4.1.8。このバージョンには、次の cache操作に関連する機能はありません。$KERNEL_SOURCE/arch/powerpc/include/asm/

  • "invalidate_dcache_range()"
  • "flush_dcache_range()"
  • "clean_dcache_range()"

"cacheflush.h"上記の関数の宣言のみがディレクトリヘッダに含まれています。)
また、組み込みデバイスのSDKはアクセスを準備するためにこれらの関数を呼び出す必要がありますDMA
これ以降のカーネルバージョンでは、4.5これらの関数の宣言を提供します。

今、いくつかの質問があります。

  1. 最新のカーネル、以前のカーネルに実装された機能を使用してコピーして再構築することはできますが、カーネルソースコードを変更することは意味がありません。
  2. この問題を解決するためのいくつかの回避策を提案できますか?
  3. キャッシュが無効であるか正しくフラッシュされたかどうかをどのようにテストできますか?ユーザー空間からキャッシュブロックを読み取る方法はありますか?

ありがとう、

ベストアンサー1

このバージョンには、次のcache操作に関連する機能はありません。$KERNEL_SOURCE/arch/powerpc/include/asm/

  • "invalidate_dcache_range()"
  • "flush_dcache_range()"
  • "clean_dcache_range()"

"cacheflush.h"(このディレクトリヘッダには上記の関数の宣言のみが含まれています。)

カーネルバージョン4.1.8には次の機能があります。arch/powerpc/kernel/misc_32.SCONFIG_WORD_SIZE、の場合にのみ使用されます32(つまり、32ビットプラットフォームでのみ)。

プラットフォームの詳細を提供する必要があります。

  1. 最新のカーネル、以前のカーネルに実装された機能を使用してコピーして再構築することはできますが、カーネルソースコードを変更することは意味がありません。

カーネルソースコードを修正することは非常に意味のあることですが、必要な場合。いくつかのコードをバックポートしなければならない妥当な理由があるようですが...私の考えにはおそらく何かが欠けているようです(おそらくプラットフォーム構成で?)。

  1. この問題を解決するためのいくつかの回避策を提案できますか?

ドライバがこれらのファイルを必要とし、何らかの理由でカーネルがそのファイルを提供していない場合arch/powerpc/kernel/

  1. キャッシュが無効であるか正しくフラッシュされたかどうかをどのようにテストできますか?ユーザー空間からキャッシュブロックを読み取る方法はありますか?

申し訳ありません。お手伝いできません。 JTAGデバッガを使用できますか?乾杯!

マレー...

おすすめ記事