
rootfsは私のブートローダがSDRAMのアドレスにロードするsquashfsイメージです。そこからrootfsをマウントできるように、カーネルにどのパラメータを渡す必要がありますか? Squashfsのサポートが組み込まれており、すでに次のように動作します。
root=/dev/mtdblock2 rootfstype=squashfs
フラッシュメモリから起動する場合。
編集:これはカスタムブートローダを使用するMIPSベースの組み込みデバイスです。通常、ブートローダは圧縮カーネルをフラッシュからSDRAMに抽出し、カーネルは/ dev / mtdblock2をrootfsとしてマウントします。イメージをRAMにダウンロードし、フラッシュに書き込むことなく起動できるように、ブートローダを改善しようとしています。
LinuxでファイルシステムイメージをRAMにrootfsとしてマウントする方法を知りません。
答え1
initramfsを使いましょう。 (http://www.kernel.org/doc/Documentation/filesystems/ramfs-rootfs-initramfs.txt)
多くのLinuxディストリビューションは、起動プロセス中に主に起動プロセスの最初にユーザースペースプログラムを起動できるようにinitramfs(initrdとは異なります)を使用します。ただし、必要に応じて使用できます。
initrdと比較してinitramfsの利点は、initramfsがtmpfsファイルシステムを使用し、initrdがRAMブロックデバイスを使用することです。ここで最大の違いは、initrdを使用すると、ファイルシステムのすべてのスペースを使用する予定がない場合でも、事前に割り当てる必要があることです。そのため、ファイルシステムスペースを使用しないとメモリが浪費されます。 TmpfsはRAMを使用しますが、現在のファイルシステムで使用されているRAMの量だけを使用するファイルシステムです。したがって、tmpfsからファイルを削除すると、メモリはすぐに解放されます。
現在、通常 initramfs は一時的であり、起動プロセスの初期に一部のプログラムを実行するためにのみ使用されます。これらのプログラムが実行された後、物理ディスク上で実行されている物理ファイルシステムに制御が転送されます。しかし、必ずしもそうする必要はありません。 initramfsが無限に使い果たされるのを防ぐ方法はありません。
答え2
はいrd_startとrd_sizeオプションは十分ですか?
そうだARMポートにはinitrdオプション構文があります。:
root=/dev/ram0 rw initrd=0x87000000,8M
答え3
私はこのphram
ドライバをこの目的に使用します。これは物理メモリを使用して MTD デバイスをエミュレートします。つまり、後で実際のフラッシュメモリに書き込むテスト/開発にまったく同じrootfsイメージを使用できることを意味します。カーネルコマンドラインに必要な魔法は次のとおりです。
phram.phram=rootfs,0x100000,9Mi root=/dev/mtdblock0 memmap=9M\$100000
memmap
カーネルが独自にメモリを使用しようとしないようにするには、パラメータも必要です。 9MBは私のrootfsのサイズです。私のブートローダには$の前に\が必要ですが、あなたのブートローダには必要ないかもしれません。選択したアドレスは、お使いのデバイスに物理メモリがどのように配置されているかわからないため、ランダムなので、適切なアドレスを選択してください。私はあなたが以前にそのアドレスからrootfsをロードするためにtftpまたは他のものを使用したと仮定します。
- https://cateee.net/lkddb/web-lkddb/MTD_PHRAM.html カーネル構成オプションの説明
- https://ww.telent.net/2018/1/2/gehen_sie_bitte_mit_hier_ist_nix_zu_sehen 私がこれを行った方法の詳細については、私のもの装備