web-dev-qa-db-ja.com

RAMのrootfsでLinuxをブートするにはどうすればよいですか?

Rootfsはsquashfsイメージであり、私のブートローダーはそれをSDRAMのいくつかのアドレスにロードしています。そこからrootfsをマウントできるように、カーネルに渡す必要があるパラメーターは何ですか? Squashfsのサポートは組み込みで、すでに動作します

root=/dev/mtdblock2 rootfstype=squashfs  

フラッシュからの起動用。

編集:これはカスタムブートローダーを使用するMIPSベースの組み込みデバイスです。通常、ブートローダーはフラッシュからSDRAMに圧縮カーネルを抽出し、カーネルは/ dev/mtdblock2をrootfsとしてマウントします。ブートローダーを改善して、イメージをRAMにダウンロードし、フラッシュに書き込むことなく起動できるようにしています。

LinuxがファイルシステムイメージをRAMにrootfsとしてマウントする方法を理解できません。

17
Atilla Filiz

私はinitramfsを使用します。 ( http://www.kernel.org/doc/Documentation/filesystems/ramfs-rootfs-initramfs.txt

多くのLinuxディストリビューションは、ブートプロセス中にinitramfs(initrdと混同しないでください。それらは異なります)を使用します。ほとんどの場合、ブートプロセスの非常に早い段階でユーザースペースプログラムを開始できます。ただし、何にでも使用できます。

Initrdに対するinitramfsの利点は、initrdがramブロックデバイスを使用するのに対し、initramfsはtmpfsファイルシステムを使用することです。ここでの主な違いは、initrdの場合、すべてのスペースを使用しない場合でも、ファイルシステムにすべてのスペースを事前に割り当てる必要があることです。そのため、ファイルシステムのスペースを使用しない場合、RAMを浪費します。これは、組み込みデバイスでは、多くの場合、リソースが不足しています。 TmpfsはRAMを使い果たすファイルシステムですが、ファイルシステムで現在使用されているRAMのみを使用します。したがって、tmpfsからファイルを削除すると、そのramはすぐに解放されます。

現在、通常initramfsは一時的なものであり、ブートプロセスの非常に早い段階で一部のプログラムを実行するためにのみ使用されます。これらのプログラムの実行後、制御は物理ディスクで実行されている実際のファイルシステムに引き渡されます。ただし、その必要はありません。 initramfsが無期限に使い尽くされるのを妨げるものは何もありません。

10
Patrick

私はこの目的でphramドライバーを使用します。これは、物理メモリを使用してMTDデバイスをエミュレートします。つまり、後で実際のフラッシュに書き込む予定のまったく同じrootfsイメージをテスト/開発に使用できます。カーネルコマンドラインで必要な魔法は次のようになります

phram.phram=rootfs,0x100000,9Mi root=/dev/mtdblock0 memmap=9M\$100000

カーネルがそのメモリをそれ自体で使用しないようにするために、memmap引数も必要であることに注意してください。 9MBは、私のrootfsがどれほど大きい(または大きかった)かです。ブートローダーでは\ before $が必要ですが、あなたのものではないかもしれません。デバイスで物理メモリがどのように配置されているかわからないので、ここで選択したアドレスは任意です。そのため、自分にとって意味のあるアドレスを選択してください。以前にtftpなどを使用して、そのアドレスでrootfsをロードしたと思います

0
telent

rd_startおよびrd_size オプションで十分ですか?

ARMポートにはinitrdオプションの構文がある可能性があります

root=/dev/ram0 rw initrd=0x87000000,8M 
0
XTL