Ahora, algún dispositivo pcie tiene una cpu, por ejemplo: DPU.
Quiero usar qemu para emular este dispositivo.
¿Qemu puede admitir este requisito?
El marco de emulación de QEMU no admite dispositivos que tengan CPU totalmente programables que puedan ejecutar código arbitrario proporcionado por invitados de la misma manera que las CPU emuladas del sistema principal. (El principal obstáculo es que todas las CPU del sistema deben tener la misma arquitectura, por ejemplo, todas x86 o todas Arm).
Para los dispositivos que tienen una CPU como parte de su implementación, pero donde esa CPU generalmente ejecuta un firmware fijo que expone una interfaz más limitada al código invitado, un modelo de dispositivo QEMU puede proporcionar una emulación directa de esa interfaz limitada, que suele ser más eficiente. de todas formas.
En teoría, podría escribir un dispositivo que hiciera una emulación puramente interpretada de una CPU integrada, utilizando las funciones de QEMU como temporizadores y devoluciones de llamada de la mitad inferior para interpretar una pequeña parte de las instrucciones de vez en cuando. Sin embargo, no conozco ningún ejemplo de alguien que haya escrito un dispositivo como ese. Sería bastante trabajo y la velocidad de la emulación resultante no sería muy rápida.
Esto se puede hacer elevando dos instancias de QEMU, una construida con la arquitectura del sistema host y la otra con la arquitectura secundaria, y conectándolas a través de alguna interfaz.
Esto lo ha hecho Xilinx al iniciar dos procesos QEMU separados con alguna comunicación entre procesos entre ellos, y Neuroblade ha creado QEMU en la arquitectura nios2 como una biblioteca compartida y luego lo ha cargado desde un proceso QEMU que modela la arquitectura del host (en este caso, la interfaz se puede modelar simplemente mediante llamadas directas a funciones).
Relacionada: