我在 QEMU 下运行 Ubuntu 20.04 的 ARM64 版本。约 50% 的时间里,启动过程会报告以下情况:
[ TIME ] Timed out waiting for device /dev/ttyAMA0.
[DEPEND] Dependency failed for Serial Getty on ttyAMA0.
这意味着 QEMU 终端中没有登录提示。然后需要 SSH 访问才能手动启动守护进程:
$ sudo systemctl start [email protected]
我该如何解决这个问题?在哪里/如何设置更长的超时值?
非常感谢。
[新增] 查看https://github.com/g40/qemu-arm64获取一整套脚本来重现该问题
答案建议这里对于 Centos 不起作用。
系统详细信息如下。
$ sudo systemctl show [email protected] | grep ^Tim
TimeoutStartUSec=1min 30s
TimeoutStopUSec=1min 30s
TimeoutAbortUSec=1min 30s
TimeoutCleanUSec=infinity
$ lsb_release -a && uname -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 20.04.3 LTS
Release: 20.04
Codename: focal
Linux miniarm64 5.4.0-96-generic #109-Ubuntu SMP Wed Jan 12 18:07:25 UTC 2022 aarch64 aarch64 aarch64 GNU/Linux
$ qemu-system-aarch64 --version
QEMU emulator version 4.2.1 (Debian 1:4.2-3ubuntu6.19)
Copyright (c) 2003-2019 Fabrice Bellard and the QEMU Project developers
答案1
下午好,我自己也遇到过类似的问题。事实上,systemd 没有等待设备初始化完成,因此取消了 ttyAMA0 上 getty 的初始化。因此,首先我们需要配置设备本身,而不是 getty。一般来说,这个问题很容易解决,首先我想参考官方 systemd 文档:
设备单元以其控制的 /sys/ 和 /dev/ 路径命名。例如:设备 /dev/sda5 在 systemd 中显示为 dev-sda5.device。
如你所见,你需要为特定设备(ttyAMA0)创建一个配置;对于我的发行版,我创建了一个文件/usr/lib/systemd/system/dev-ttyAMA0.device内容如下:
[Unit]
Description=Serial device ttyAMA0
DefaultDependencies=no
Before=sysinit.target
JobTimeoutSec=infinity
我希望我的解决方案能够帮助你。