我在努力学习关于initrd的东西。我遵循本教程从头开始构建自己的initrd,并在上面安装了busybox。然后我用isolinux做了一个.iso,这样我就可以在virtualbox中测试它了。效果很好!
我有来自busybox的基本命令,所以我想挂载一个文件系统。但是/dev目录几乎是空的(没有sda),除了我在遵循本教程时创建的一些文件。我了解了udev,我想这就是我需要的。不过,我不知道如何处理这件事。
我应该从udev获取最新的源代码,编译它并将它添加到我的initrd吗?然后在我的init脚本中调用/bin/udev或类似的东西?或者是否有其他/更好的方法来填充/dev目录?
编辑:一些额外的信息和更新,我已经做了。
/lib/modules,并将它们复制到我的initrd中,这是我按照前面链接的教程创建的。CONFIG_DEVTMPFS=y/dev中,比如tty0-tty 63和其他设备,但是没有sda/hda。lspci -k,以检查哪些模块正在使用。SATA Controller说它使用ahci作为模块。modprobe -v ahci时,它会抱怨“未知符号: ata_some_stuff",但之后它会返回一些类似于SCSI Subsystem initialized、ATA-6: VBOX HARDDISK和Direct-Access ATA VBOX HARDDISK的内容。然而,在/dev中仍然没有硬盘设备。我当前的/init/脚本如下:
#!/bin/ash
mount -t devtmpfs none /dev
mount -t proc /proc /proc
mount -t sysfs none /sys
modprobe -v ahci
echo "Hello world"
exec /bin/ash --login有没有人知道我做错了什么,我应该做什么?
发布于 2012-10-24 03:25:18
虽然吉尔斯的答案是正确的,但这是老派:-)。另一个注意事项(更多的是术语上的挑剔)是您链接到的指南是关于如何创建initramfs的说明,而不是initrd。两者相似,用途相同,但存储和加载图像的方式不同。
不管怎么说,你问题的答案其实真的很简单。
devtmpfs (CONFIG_DEVTMPFS=y)mount -t devtmpfs none /dev脚本中首先运行init。就这样。devtmpfs将像udev一样填充/dev。您甚至不需要预先填充/dev (在initramfs映像中),使用null、zero或console等基础知识。
https://unix.stackexchange.com/questions/52713
复制相似问题