【问题标题】:/dev/ttyS0 can't be opened in Qemu/dev/ttyS0 无法在 Qemu 中打开
【发布时间】:2012-07-06 23:12:20
【问题描述】:

我正在使用 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

看到有/dev/ttyS0。

我在配置文件系统时是否遗漏了什么?或者我应该在

中使用文件系统

/输出/目标

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

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

【问题讨论】:

    标签: filesystems arm qemu buildroot


    【解决方案1】:

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

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

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

    • 提取(使用 cpio 解压)rootfs

    • 找出内核使用哪个初始化文件作为父进程。如果幸运的话,它将位于根目录中。命名为initinitrc

    • 在您喜欢的编辑器中打开init 文件。
    • 从你的 init 开始几行就像

      ::respawn:/sbin/getty -L 38400 tty1
      ::respawn:/sbin/getty -L 38400 tty2
      ::respawn:/sbin/getty -L 38400 tty3
      ::respawn:/sbin/getty -L 38400 tty4

    • 添加::respawn:/sbin/ls -all /dev 并保存文件。 (我们添加了 list 命令来查看 /dev 目录里面有什么)

    • 重新启动系统并检查 dmesg。看看/dev/ttyS0是不是真的不见了?

    【讨论】:

    • 如果/dev 目录中没有tty 我该怎么办?
    猜你喜欢
    • 1970-01-01
    • 2021-09-12
    • 2015-06-09
    • 2018-08-10
    • 1970-01-01
    • 2019-05-14
    • 1970-01-01
    • 1970-01-01
    • 2014-05-14
    相关资源
    最近更新 更多