我将QEMU用作PetaLinux内核的仿真器(仅限终端机,带-nographic选项)。

在开始时,QEMU会初始化自身,一旦准备就绪,它将引导系统。通常,在此过程中,引导消息会打印在终端中。在这种情况下,一切正常,系统启动,并且可以登录并使用系统。
然后,实现另一个简单的外围设备,类似地对其进行初始化(将控制消息打印到输出),其余的继续进行。

当从外围设备实现(fork()后跟execvp())中产生一个子进程时,问题就会上升。 QEMU主进程(父进程)不再打印到终端输出,新进程(子进程)只能执行此操作。似乎父进程可能仍在执行但丢失了终端。没有它,将无法看到登录提示,因此基本上根本无法使用该系统。

是什么原因?

最佳答案

我找到了解决方案。问题是因为子进程正在使用SIGUSR1向父进程发出信号。显然,QEMU本身使用SIGUSR1,因此发生了处理程序冲突,也许它们都已被调用,并且父进程在某种程度上冻结了。将信号更改为SIGUSR2后,一切正常。希望不再与QEMU内部发生冲突。

关于linux - execvp后QEMU没有终端输出,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31610671/

10-14 14:18