如何在 RAM 中使用 rootfs 启动 Linux?

Ati*_*liz 19 linux embedded mips

rootfs 是一个 squashfs 映像,我的引导加载程序正在将它加载到 SDRAM 中的某个地址。我需要将哪些参数传递给内核,以便它可以从那里挂载 rootfs?Squashfs 支持是内置的,并且已经可以与

root=/dev/mtdblock2 rootfstype=squashfs  
Run Code Online (Sandbox Code Playgroud)

用于从闪存启动。

编辑:这是一个基于 MIPS 的嵌入式设备,使用自定义引导加载程序。通常情况下,bootloader 将压缩后的内核从 flash 中提取到 SDRAM 中,然后内核将 /dev/mtdblock2 作为 rootfs 挂载。我正在尝试改进引导加载程序,以便它可以将映像下载到其 RAM 并在不写入闪存的情况下启动。

我不知道如何让 Linux 在 RAM 中挂载一个文件系统映像作为 rootfs。

phe*_*mer 12

我会使用 initramfs。( http://www.kernel.org/doc/Documentation/filesystems/ramfs-rootfs-initramfs.txt )

许多 Linux 发行版在引导过程中使用 initramfs(不要与 initrd 混淆,它们是不同的),主要是为了能够在引导过程的早期启动用户空间程序。但是,您可以根据需要使用它。

initramfs 优于 initrd 的好处是 initramfs 使用 tmpfs 文件系统,而 initrd 使用 ram 块设备。这里的主要区别在于,对于 initrd,您必须为文件系统预先分配所有空间,即使您不打算使用所有空间。因此,如果您不使用文件系统空间,就会浪费内存,而内存在嵌入式设备上通常是一种稀缺资源。Tmpfs 是一个文件系统,它耗尽了 ram,但仅使用与文件系统上当前使用的 ram 一样多的 ram。因此,如果您从 tmpfs 中删除文件,该 ram 会立即释放。

现在通常 initramfs 是临时的,仅用于在引导过程中极早地运行某些程序。在这些程序运行后,控制权被移交给在物理磁盘上运行的真实文件系统。但是,您不必这样做。没有什么能阻止你无限期地用完 initramfs。