我将QEMU用作PetaLinux内核的仿真器(仅限终端机,带-nographic
选项)。
在开始时,QEMU会初始化自身,一旦准备就绪,它将引导系统。通常,在此过程中,引导消息会打印在终端中。在这种情况下,一切正常,系统启动,并且可以登录并使用系统。
然后,实现另一个简单的外围设备,类似地对其进行初始化(将控制消息打印到输出),其余的继续进行。
当从外围设备实现(fork()
后跟execvp()
)中产生一个子进程时,问题就会上升。 QEMU主进程(父进程)不再打印到终端输出,新进程(子进程)只能执行此操作。似乎父进程可能仍在执行但丢失了终端。没有它,将无法看到登录提示,因此基本上根本无法使用该系统。
是什么原因?
最佳答案
我找到了解决方案。问题是因为子进程正在使用SIGUSR1
向父进程发出信号。显然,QEMU本身使用SIGUSR1
,因此发生了处理程序冲突,也许它们都已被调用,并且父进程在某种程度上冻结了。将信号更改为SIGUSR2
后,一切正常。希望不再与QEMU内部发生冲突。
关于linux - execvp后QEMU没有终端输出,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31610671/