/dev/memの部分メモリマッピングを許可する

/dev/memの部分メモリマッピングを許可する

シングルチップには、ARM-Cortex-A9 CPUとCyclone V FPGAを含むSoC-FPGA(DE0-nano-soc)があります。 CPUは1 GBのDDR3メモリにアクセスできますが、FPGAもそのメモリにアクセスしてデータを共有できます。

これで、起動パラメータを使用して合計RAMのうち900 Mしか表示されないようにLinuxを設定しましたmem=900M。これにより、Linuxに触れないRAMがあり、それを使用してFPGAと通信できます。 RAMに書き込む部分を使いたいです/dev/mem。適切なアドレスをメモリにマッピングすると、権限拒否エラーが発生します。これはカーネルがCONFIG_STRICT_DEVMEM設定されたためであると推測されます。

今はLinuxで使われていないアドレスだけを書くだけですので、この設定を解除したくありません。特定のセクションに書き込むことができますが、まだ通常のメモリ制限があることをLinuxカーネルに通知する方法はありますか?

ベストアンサー1

私はこれを見つけました:https://docs.pmem.io/getting-started-guide/creating-development-environments/linux-environments/linux-memmap

十分に新しいカーネルがあると仮定すると、追加memmap=124!900で必要なメモリを/dev/pmem0

同時に追加することをお勧めしますnokaslr。そうしないと、任意のシステムエラーが発生する可能性があります。 KASLRはカーネルを悪用しにくくするセキュリティ機能です。

これが使われたが、魅惑的なハッカー、私はあなたにそれを十分にお勧めできません。 CPUキャッシュとFPGA(DMAとも呼ばれる)アップデートを管理する方法がわかりません。私たちの提案その他の問題そうする方法ではありません :-)。


書かれた質問に対する答えではありませんが、別のオプションがあります。iomem=relaxedまったく新しいカーネルをコンパイルせずにSTRICT_DEVMEMを一時的に無効にするには、bootを使用します。

おすすめ記事