首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在构建自己的initrd时填充/dev目录?

如何在构建自己的initrd时填充/dev目录?
EN

Unix & Linux用户
提问于 2012-10-23 20:31:42
回答 1查看 14.4K关注 0票数 11

我在努力学习关于initrd的东西。我遵循本教程从头开始构建自己的initrd,并在上面安装了busybox。然后我用isolinux做了一个.iso,这样我就可以在virtualbox中测试它了。效果很好!

我有来自busybox的基本命令,所以我想挂载一个文件系统。但是/dev目录几乎是空的(没有sda),除了我在遵循本教程时创建的一些文件。我了解了udev,我想这就是我需要的。不过,我不知道如何处理这件事。

我应该从udev获取最新的源代码,编译它并将它添加到我的initrd吗?然后在我的init脚本中调用/bin/udev或类似的东西?或者是否有其他/更好的方法来填充/dev目录?

编辑:一些额外的信息和更新,我已经做了。

  • 我在虚拟盒里测试所有的东西。我刚刚在虚拟盒中安装了ubuntu,从initrd中生成了一个.iso,然后从virtualbox中的iso启动。
  • 我使用了存在于debian上的vmlinuz和/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 initializedATA-6: VBOX HARDDISKDirect-Access ATA VBOX HARDDISK的内容。然而,在/dev中仍然没有硬盘设备。

我当前的/init/脚本如下:

代码语言:javascript
复制
#!/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

有没有人知道我做错了什么,我应该做什么?

EN

回答 1

Unix & Linux用户

发布于 2012-10-24 03:25:18

虽然吉尔斯的答案是正确的,但这是老派:-)。另一个注意事项(更多的是术语上的挑剔)是您链接到的指南是关于如何创建initramfs的说明,而不是initrd。两者相似,用途相同,但存储和加载图像的方式不同。

不管怎么说,你问题的答案其实真的很简单。

  1. 在内核中启用devtmpfs (CONFIG_DEVTMPFS=y)
  2. 在您的mount -t devtmpfs none /dev脚本中首先运行init

就这样。devtmpfs将像udev一样填充/dev。您甚至不需要预先填充/dev (在initramfs映像中),使用nullzeroconsole等基础知识。

票数 13
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/52713

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档