我看到了几个答案,其中提示在内存中创建分区,将 SD 卡的内容复制到该分区,然后从该内存分区启动操作系统(linux)。
我会使用什么引导加载程序来完成这样的事情?在哪里可以找到有关设置它的文档?
答案1
根本不涉及引导加载程序,此任务通常由 Linux 内核在通过位于 SD 卡上的引导加载程序从 SD 卡加载到内存后执行。
从内存“启动”的现代方式要求您编写一个自定义的 initramfs 脚本来检测 Linux 启动的介质(因为引导加载程序不提供如此有用的信息,尽管其中一些肯定可以检测它们启动的介质),以只读模式“打开”它的文件系统,tmpfs
为未来的根文件系统分配空间,然后将所有内容从媒体复制到其中,然后只需切换根目录并/sbin/init
从那里执行。
你可以找到一个很好的例子这里- 一个脚本,用于检测从哪里找到要复制的媒体,并且您需要创建 initramfs 映像,通常是手动创建,请参阅这个脚本一些关键说明。
如果您不知道 initramfs 是如何工作的,您应该首先查看好的信息,考虑阅读文档/文件系统/ramfs-rootfs-initramfs.txt也Linux 从头开始 - 关于 initramfs,并谷歌“linux initramfs”。
答案2
您可以查看像 GRML 这样的实时发行版,它支持在启动时将其整个 squashfs 复制到 RAM(使用参数grml2ram
),并且可以轻松定制(请参阅 参考资料grml-live
);或者您可以将系统布局为 initramfs 并让引导加载程序将其与内核一起加载。
不太优雅的是,您可以坚持使用库存 initramfs 并向其中添加一个脚本,将 sdcard 的内容加载到内存中,然后将其用作 rootfs。