我目前正在启动 RISC-V qemu 会话,如下所示:
/usr/bin/qemu-system-riscv64 -machine virt -m 4G -smp cpus=2 -nographic \
-bios /usr/lib/riscv64-linux-gnu/opensbi/generic/fw_jump.bin \
-kernel /usr/lib/u-boot/qemu-riscv64_smode/u-boot.bin \
-netdev user,id=net0 \
-device virtio-net-device,netdev=net0 \
-drive file=qemu_disk.bin,format=raw,if=virtio \
-device virtio-rng-pci \
-vga virtio \
-no-reboot
特别是-vga virtio
要让它在启动时使用完整的终端宽度,如下所示:
但是,如果我从 qemu VM 中打开 nano 或 gdb 等应用程序,它会停止使用封闭终端窗口的整个宽度,如下所示:
我如何告诉 QEMU 表现得好像它有更多空间,以便 nano 和 gdb 等应用程序在启动时识别到这一点?
(注意:我随后发现我可以安装“调整大小”工具,并手动运行它,但我想知道是否有办法让 qemu 自动处理这个问题。)
答案1
回答“为什么”:
nano
和gdb
使用相同的信息stty
显示,因为这通常就足够了。
第一个屏幕截图仅显示不尝试使用终端特征的程序的输出,而第二个屏幕截图显示了尝试 - 并且缺乏底层配置信息 - 因此您得到默认值(看起来像 25x80)。
如果你仔细观察,qemu
不自己的控制台,无法获得好的信息。例如,它实际上可能是通过伪终端连接的。这在其他程序中很容易看到。这是我正在使用的示例屏幕。这斯蒂程序给出了正确的大小,但让我假装它是不同的大小。这就是(相反)调整大小作用:使用终端的转义序列计算正确的大小并更新使用的设置斯蒂。
如果 qemu 没有内置解决方法,请使用调整大小(或类似的东西)就是解决方案。