在没有rootfs的情况下使用Bare initramfs

时间:2016-05-10 07:22:06

标签: linux

我正在尝试使用initramfs作为Linux内核启动的文件系统。 我希望我的文件系统最小,所以我只使用没有rootfs的initramfs。现在一旦内核启动它从initramfs执行/ init,我尝试在init中挂载proc和sysfs,如下所示。

#!/bin/busybox sh
echo "Mounting Proc and Sysfs"
# Mount the /proc and /sys filesystems.
mount -t proc none /proc
mount -t sysfs none /sys

我还需要添加以获取initramfs的命令提示符。当我执行上面的init命令时,我得到了以下错误。

New FileSystem
Mounting Proc and Sysfs
This script just
[    4.524724] sh (116) used greatest stack depth: 13832 bytes left mounts and boots the rootfs, nothing else!
[    4.537448] Kernel panic - not syncing: Attempted to kill init! exitcode=0x00000000
[    4.537448]
[     4.537453] CPU: 0 PID: 1 Comm: init Not tainted 4.1.17-ltsi-rt18 #4

1 个答案:

答案 0 :(得分:0)

您的问题是您的shell脚本(又名" init")退出。内核不会超过PID 1退出的点。常规初始化序列通过使用excest(即initramfs调用中的init除了切换到根文件系统中的init,等等)来解决这个问题。

我建议在init的末尾添加对/ bin / sh(bash,zsh等)的调用,然后调用shutdown(这样如果shell退出,系统会停止)。这将为您提供一个可用的shell。

此外,由于您似乎已经在使用busybox,因此它具有非常有用的init实现。您可以使用它来启动实际的init序列,实际的shell具有实际的TTY控制。