この問題には追加の説明が必要です。
背景:私はARMプロセッサ+ FPGAからなる組み込みシステム(Xilinx zynq ultrascale +)を開発しています。メモリマップ(システムをベアメタルとして使用する場合)は次のとおりです。
ARMに接続(データシートによる):
Segment name | Start addresss | Size
HP0_DDR_HIGH | 0x0_0008_0000_0000 | 32G
HP0_DDR_LOW | 0x0_0000_0000_0000 | 2G
HP0_LPS_OCM | 0x0_0000_FF00_0000 | 16M
HP0_QSPI | 0x0_0000_C000_0000 | 512M
その後、FPGAのDDRコントローラを介してアクセスできる外部RAM(4GB)があります。この思い出がここにあります。
Segment name | Start addresss | Size
C0_DDR4_ADDRESS_BLOCK | 0x0_0005_0000_0000 | 4G
私はLinux用にビルドするときにYoctoに変装したXilinx Petalinuxツールチェーンを使います。システムが起動したら、0x5_0000_0000
その物理アドレスを使用するか、コマンドを介してdevmem
またはユーザー空間から物理アドレスをマッピングして外部DDRにアクセスできます。
私はLinuxが起動時にデバイスツリーを解析してこの追加のDDRを見つけたと思います。
詳細:データシートを見る(https://www.xilinx.com/support/documentation/user_guides/ug1085-zynq-ultrascale-trm.pdf)
このアドレスはMMU翻訳装置に含まれていないようです。
質問):
- Linuxが可能なメモリプールの一部として外部ddrを使用しているかどうかを確認する方法は? OSがメモリ内のすべてのページを追跡していることを知っていますが、このメモリはページングされますか?
- オペレーティングシステムはこのメモリを使用してプロセスアドレス空間を作成および管理できますか?
- この物理アドレスをプロセスのユーザー仮想アドレス空間にマップすると仮定すると、カーネルは新しいページエントリを生成しますか?