
シングルチップには、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を使用します。