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