大家。我正在研究我的第一个嵌入式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)作为基础。
有人可以帮助我吗?
谢谢。
答案 0 :(得分:1)
简短的回答:我认为,您需要使用/linuxrc
或/sbin/init
而不是/init
。
或者,最好使用initramfs代替initrd。
长答案。
/init
用于initramfs,而您似乎正在使用initrd(因为将ramdisk和squashfs映像加载到其中)。
有三种方法可以获取早期用户空间并挂载根文件系统:2个使用initrd和1个使用initramfs。
/linuxrc
; /linuxrc
加载所需的模块,写入/proc/sys/kernel/real-root-dev
并退出。然后内核挂载真实根并调用真实/sbin/init
/sbin/init
; /sbin/init
挂载真实根,调用pivot_root
,执行真实/sbin/init
/init
,它负责挂载真实的根目录并执行真实的/sbin/init
(可能通过switch_root
实用程序来清理tmpfs)。此外,您可以检查Gentoo wiki Initramfs page以获得更多信息。
答案 1 :(得分:0)
/ etc / inittab怎么样?你在这个文件中初始化控制台了吗?也许tty init错过了。你能表现出来吗?
答案 2 :(得分:0)
Shell二进制文件应该是静态的。否则,/ lib应该出现在RAMFS上。