我使用QEMU作为PetaLinux内核的模拟器(仅限终端,-nographic
选项)。
在开始时,QEMU会自行初始化,一旦准备好,它就会启动系统。通常,在此过程中,引导消息将在终端中打印。在这种情况下,一切正常,系统启动,人们可以登录并使用系统。 然后,实现另一个简单的外围设备,类似地初始化(向输出打印控制消息),其余的以相同的方式进行。
当从外围设备实施中产生子进程(fork()
后跟execvp()
)时,问题就会出现。主QEMU进程(父进程)不再打印到终端输出,新进程(子进程)只能执行此操作。似乎父进程可能仍在执行但丢失了终端。没有它就看不到登录提示,所以基本上根本不能使用系统。
是什么原因?
答案 0 :(得分:0)
我找到了解决方案。问题是因为子进程正在使用SIGUSR1
向父进程发送一些事件。显然,QEMU本身使用SIGUSR1
,因此处理程序发生了冲突,可能两者都被调用了,而且父进程在某种程度上是冻结的。将信号更改为SIGUSR2
后,一切正常。希望不再与QEMU内部相撞。