filesystems -/dev/ttyS0 无法在 Qemu 中打开

标签 filesystems arm qemu buildroot

我正在使用 QEMU 1.1.0,使用 ARM Cortex-A9 模拟 Versatile Express 板。我已经按照以下说明成功启动了简单的“Hello World”示例:

http://balau82.wordpress.com/2012/03/31/compile-linux-kernel-3-2-for-arm-and-emulate-with-qemu/

但现在我想自己创建文件系统。

我决定使用 buildroot,版本 2012.05。我已经将它配置为为 ARM Cortex-A9 目标创建工具链、内核和文件系统镜像。

内核版本为 3.3.7,对于我选择为 cpio 的文件系统,未压缩。调用 qemu-system-arm 的 initrd 参数指向

/output/images/rootfs.cpio

当我启动 QEMU 内核引导时,我收到以下消息:

初始化随机数生成器...完成。

正在启动网络...

无法打开/dev/ttyS0: 没有这样的设备或地址

无法打开/dev/ttyS0: 没有这样的设备或地址

无法打开/dev/ttyS0: 没有这样的设备或地址

...

我所能做的就是终止 QEMU。

我已经像这样检查了 rootfs.cpio 的内容:

cpio -t < rootfs.cpio

并看到有/dev/ttyS0。

我在配置文件系统时错过了什么吗?或者我应该在

/输出/目标

以某种方式在那里创 build 备(Buildroot 不这样做),然后重建文件系统?

我是 Buildroot 的新手,因此非常欢迎任何提示或建议。

最佳答案

提取 rootfs 并输入 ls -all /dev/ttyS0并检查它是 majorminor数字。因为如果您的主编号不是必需的,那么它不会调用相应的内核功能,在这种情况下,它只会是一个垃圾字符设备。

您还可以发布整个日志文件吗(复制所有这些 dmesg 并将它们发布在某处并在此处提供链接。)

如果您确定/dev/ttyS0 存在,请执行以下步骤:

  • 提取(使用 cpio 解压)rootfs
  • 找出内核正在使用哪个 init 文件作为父进程。如果幸运的话,它将位于根目录中。命名 initinitrc
  • 打开 init文件在您喜欢的编辑器中。
  • 开始几行你的 init 会像

    ::重生:/sbin/getty -L 38400 tty1
    ::重生:/sbin/getty -L 38400 tty2
    ::重生:/sbin/getty -L 38400 tty3
    ::重生:/sbin/getty -L 38400 tty4
  • 添加 ::respawn:/sbin/ls -all /dev并保存文件。 (我们添加了 list 命令来查看/dev 目录中有什么)
  • 重新启动系统并检查 dmesg。看看 /dev/ttyS0真的不见了?
  • 关于filesystems -/dev/ttyS0 无法在 Qemu 中打开,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11363124/

    相关文章:

    c# - 如何在 C# 中获取当前用户的桌面路径?

    linux - 在低内存嵌入式系统中使用Busybox有什么意义?

    linux - ARM 交叉编译 Expect

    qemu - UEFI 使用 ExitBootServices 的简单示例(使用 gnu-efi)

    memory-management - 如何在 KVM 内存中固定访客页面?

    javascript - 如何覆盖 Chrome 应用程序中的文件?

    java - 这两个java.io.File线程安全问题是否被规避了?

    docker - 我可以设置 arm64 docker 镜像,但无法运行任何内容

    c - fuse filesystem不能改变getattr函数中struct stat *stbuf的值?

    c - STM32F4 - 我可以在中断例程中使用延迟吗?