内核不会在initrd上调用/ init脚本

时间:2015-05-08 04:40:45

标签: linux kernel initrd

大家。我正在研究我的第一个嵌入式Linux,我希望有一个漂亮的bootsplash。我已经决定使用initrd尽早启动它,但看起来内核没有调用/ init脚本。它安装我的ram磁盘并继续执行通常的启动顺序。

<5>RAMDISK: squashfs filesystem found at block 0
<5>RAMDISK: Loading 16643KiB [1 disk] into ram disk... 
<6>VFS: Mounted root (squashfs filesystem) readonly on device 1:0.
<6>kjournald starting.  Commit interval 5 seconds
<6>EXT3-fs (mmcblk0p1): using internal journal
<6>EXT3-fs (mmcblk0p1): mounted filesystem with ordered data mode
<6>VFS: Mounted root (ext3 filesystem) on device 179:1.
<5>Trying to move old root to /initrd ... okay
<6>devtmpfs: mounted
<6>Freeing init memory: 180K
<30>udevd[79]: starting version 182

我试过没有成功的各种调试,我知道测试脚本是否被调用。我一点也没有错。登录后,我可以看到ram磁盘安装在/ initrd,就像它应该的那样。

我正在使用带有community提供的驱动程序和内核(3.4)的Cubieboard 2。我知道这是一个旧版本,但它是目前为止对sunxi SoC提供最佳支持的版本。我也使用Linaro提供的文件系统(rootfs和initramfs)作为基础。

有人可以帮助我吗?

谢谢。

3 个答案:

答案 0 :(得分:1)

简短的回答:我认为,您需要使用/linuxrc/sbin/init而不是/init。 或者,最好使用initramfs代替initrd。

长答案。

/init用于initramfs,而您似乎正在使用initrd(因为将ramdisk和squashfs映像加载到其中)。

有三种方法可以获取早期用户空间并挂载根文件系统:2个使用initrd和1个使用initramfs

  1. initrd是一个文件系统映像(ext [234],squashfs等),由内核复制到ramdisk(/ dev / ram *)中。
    • (已过时),内核装入ramdisk,调用/linuxrc/linuxrc加载所需的模块,写入/proc/sys/kernel/real-root-dev并退出。然后内核挂载真实根并调用真实/sbin/init
    • 内核安装ramdisk,调用/sbin/init/sbin/init挂载真实根,调用pivot_root,执行真实/sbin/init
  2. initramfs是一个cpio存档,由内核提取到tmpfs中。 内核调用/init,它负责挂载真实的根目录并执行真实的/sbin/init(可能通过switch_root实用程序来清理tmpfs)。

此外,您可以检查Gentoo wiki Initramfs page以获得更多信息。

答案 1 :(得分:0)

/ etc / inittab怎么样?你在这个文件中初始化控制台了吗?也许tty init错过了。你能表现出来吗?

答案 2 :(得分:0)

Shell二进制文件应该是静态的。否则,/ lib应该出现在RAMFS上。