固定RAMメモリ領域をブロックデバイスとして(所定の開始物理アドレスで)予約します。


11

RAMディスクについて多くの質問があり、ramをブロックデバイスとして使用できるramfsとtmpfsを知っています。しかし、私の関心は、固定メモリアドレス範囲をブロックデバイスとして使用することです。

これは、私のシステムで利用可能な不揮発性RAMを使用する必要性から生じます。6GBのRAMが利用可能で、8GBの不揮発性RAMが存在します。/ proc / iomemの出力は私に次を与えます

100000000-17fffffff:システムRAM

180000000-37fffffff:予約済み

ここで、6GBから14GBの領域は、E820 BIOSメモリマップによって予約済みとしてマークされている不揮発性RAM領域に対応しています。私の主な目的は、このNVRAMをLinuxのブロックデバイスとして使用することです。これは、NVRAMシステムのテストに役立ちます。この領域をブロックデバイスとして使用できるようにするLinuxコマンドはすでに存在しますか?それを容易にするために独自のカーネルデバイスドライバーを作成する必要がありますか?


2
好奇心旺盛ですが、なぜこれをしたいのですか?
mtak 2014

Linuxで不揮発性RAM用に設計されたファイルシステムをテストする簡単な方法を提供します。
qstack 2014

回答:


2

私はデバイスドライバーの専門家ではありませんが、R&Dのポイントをいくつか紹介します。

  1. メモリが「予約済み」としてマークされている場合、OSはメモリにアクセスできません。BIOSでOSで利用可能としてマークする方法、または直接低レベルのioctlを使用して制御する方法を見つける必要があります
  2. Linuxができれば参照メモリを、あなたはまだRAMの他のブロックとしてそれを使用してからLinuxを防ぐための簡単な方法を持っていないでしょう。このようなRAMを「不良」としてマークし、カーネルを変更して特別に使用する試みが試行される可能性があります(これについてはカーネルのドキュメントを確認してください。前回ハッキングして以来、大幅に変更され進化しています。素晴らしいスピードで)
  3. 上記を予備的な(そして非決定的でも網羅的でもない)実現可能性調査として考えると、私はあなたのramdiskブロックデバイスドライバーを書くことがあなたのケースで最も賢明なオプションであると思います、そしておそらくあなたはそれをLinuxカーネルやチームと協力して戻す必要がありますすでにこれを試している人々(おそらく、まだ投稿していない場合は、この質問のより適切な場所はLinuxカーネルメーリングリストです)

他の関連する情報源:


1

導入前にtmpfs/ initramfsそこたramdiskロードするために使用されるinitrd画像を、あらかじめ定義された固定サイズのブロックデバイスを、私は、少なくともそれ以前の実装で、連続したと思います。

ブロックドライバー自体には、メモリアドレスのパラメーターはなく、サイズのみが含まれますが、カーネルは、事前に定義されたアドレスで(構成によって)initrdイメージを読み込むために使用されているため、main / initカーネルコードをのぞくと役立ちます(私はramdiskがinitrdでサポートされなくなった場合は驚いてください。ただし、initramfsが使用されているため、何年もたった今、ramdiskを使用することはありません)。

ドライバーのソースは、drivers / block / rd.c でした。正しく表示されている場合は、drivers / block / brd.cです。

そうでない場合、ramdiskを探して、興味深い実装が見つかりました。

RAM上のディスク—ブロックドライバーで遊ぶ

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.