QEMU

format_list_bulleted Contenido keyboard_arrow_down
ImprimirCitar
Software gratuito de virtualización y emulación

QEMU (Quick Emulator) es un emulador gratuito y de código abierto. Emula el procesador de una computadora mediante traducción binaria dinámica y proporciona un conjunto de diferentes modelos de hardware y dispositivos para la máquina, lo que le permite ejecutar una variedad de sistemas operativos invitados. Puede interoperar con una máquina virtual basada en kernel (KVM) para ejecutar máquinas virtuales a una velocidad casi nativa. QEMU también puede realizar emulación de procesos a nivel de usuario, permitiendo que las aplicaciones compiladas para una arquitectura se ejecuten en otra.

QEMU admite la emulación de varias arquitecturas, incluidas x86, ARM, PowerPC, RISC-V y otras.

Licencias

QEMU fue escrito por Fabrice Bellard y es software gratuito, principalmente bajo la Licencia Pública General GNU (GPL para abreviar). Varias partes se publican bajo la licencia BSD, la Licencia pública general reducida (LGPL) de GNU u otras licencias compatibles con GPL.

Modos de funcionamiento

QEMU tiene múltiples modos de funcionamiento:

Emulación del modo de usuario
En este modo QEMU ejecuta programas únicos de Linux o Darwin/macOS que fueron compilados para un conjunto de instrucciones diferente. Las llamadas del sistema se tocan para el endianness y para los desajustes de 32/64 bit. La rápida compilación cruzada y el cross-debugging son los objetivos principales para la emulación de los modos de usuario.
Emulación del sistema
En este modo QEMU emula un sistema informático completo, incluyendo periféricos. Se puede utilizar para proporcionar alojamiento virtual de varios ordenadores virtuales en un solo ordenador. QEMU puede arrancar muchos sistemas operativos invitados, incluyendo Linux, Solaris, Microsoft Windows, DOS y BSD; soporta emular varios conjuntos de instrucciones, incluyendo x86, MIPS, 32-bit ARMv7, ARMv8, PowerPC, RISC-V, SPARC, ETRAX CRIS y MicroBlaze.
Soporte de hipervisor
En este modo QEMU actúa como Administrador de Máquinas Virtuales (VMM) o como back-end de emulación de dispositivos para máquinas virtuales que funcionan bajo un hipervisor. Lo más común es el KVM de Linux, pero el proyecto admite varios hipervisores incluyendo Xen, el HVF de Apple, el WHPX de Windows y el nvmm de NetBSD.

Características

QEMU puede guardar y restaurar el estado de la máquina virtual con todos los programas en ejecución. Los sistemas operativos invitados no necesitan parches para ejecutarse dentro de QEMU.

QEMU admite la emulación de varias arquitecturas, incluidas x86, MIPS64 (hasta la versión 6), SPARC (sun4m y sun4u), ARM (Integrator/CP y Versatile/PB), SuperH, PowerPC (PReP y Power Macintosh), ETRAX CRIS, MicroBlaze y RISC-V.

La máquina virtual puede interactuar con muchos tipos de hardware host físico, incluidos los discos duros, unidades de CD-ROM, tarjetas de red, interfaces de audio y dispositivos USB del usuario. Los dispositivos USB se pueden emular por completo o se pueden utilizar los dispositivos USB del host, aunque esto requiere privilegios de administrador y no funciona con algunos dispositivos.

Las imágenes de disco virtual se pueden almacenar en un formato especial (qcow o qcow2) que solo ocupa tanto espacio en disco como el que realmente utiliza el sistema operativo invitado. De esta manera, un disco emulado de 120 GB puede ocupar sólo unos pocos cientos de megabytes en el host. El formato QCOW2 también permite la creación de imágenes superpuestas que registran la diferencia con otro archivo de imagen base (sin modificar). Esto brinda la posibilidad de revertir el contenido del disco emulado a un estado anterior. Por ejemplo, una imagen base podría contener una instalación nueva de un sistema operativo que se sabe que funciona y se utilizan las imágenes superpuestas. Si el sistema invitado queda inutilizable (por ataque de virus, destrucción accidental del sistema, etc.), el usuario puede eliminar la superposición y utilizar una imagen de disco emulada anterior.

QEMU puede emular tarjetas de red (de diferentes modelos) que comparten la conectividad del sistema host mediante la traducción de direcciones de red, lo que permite de manera efectiva que el invitado use la misma red que el host. Las tarjetas de red virtuales también pueden conectarse a tarjetas de red de otras instancias de QEMU o a interfaces TAP locales. La conectividad de red también se puede lograr conectando una interfaz TUN/TAP utilizada por QEMU con una interfaz Ethernet no virtual en el sistema operativo host utilizando las funciones de puente del sistema operativo host.

QEMU integra varios servicios para permitir que los sistemas anfitrión y huésped se comuniquen; por ejemplo, un servidor SMB integrado y redirección de puertos de red (para permitir conexiones entrantes a la máquina virtual). También puede arrancar kernels de Linux sin un gestor de arranque.

QEMU no depende de la presencia de métodos de salida gráfica en el sistema host. En cambio, puede permitir acceder a la pantalla del sistema operativo invitado a través de un servidor VNC integrado. También puede utilizar una línea serie emulada, sin pantalla alguna, con los sistemas operativos aplicables.

Es posible simular varias CPU ejecutando SMP.

QEMU no requiere derechos administrativos para ejecutarse a menos que se utilicen módulos de kernel adicionales para mejorar la velocidad (como KQEMU) o se utilicen ciertos modos de su modelo de conectividad de red.

Pequeño generador de código

El Tiny Code Generator (TCG) pretende eliminar la deficiencia de confiar en una versión particular de GCC o cualquier compilador, incorporando el compilador (generador de código) en otras tareas realizadas por QEMU a tiempo de ejecución. Toda la tarea de traducción consiste así en dos partes: bloques básicos del código de destino (TBser reescrito en TCG ops - una especie de notación intermedia independiente de la máquina, y posteriormente esta notación está siendo compilada para la arquitectura del anfitrión por TCG. Los pases de optimización opcional se realizan entre ellos, para un modo de compilador justo a tiempo (JIT).

TCG requiere un código dedicado escrito para admitir cada arquitectura en la que se ejecuta, de modo que el JIT sepa a qué traducir las operaciones de TCG. Si no hay ningún código JIT dedicado disponible para la arquitectura, TCG recurre a un modo de intérprete lento llamado TCG Interpreter (TCI). También requiere actualizar el código de destino para usar operaciones TCG en lugar de las antiguas operaciones dyngen.

A partir de la versión 0.10.0 de QEMU, TCG se envía con la versión estable de QEMU. Reemplaza al dyngen, que dependía de GCC 3.x para funcionar.

Acelerador

KQEMU era un módulo del kernel de Linux, también escrito por Fabrice Bellard, que aceleró notablemente la emulación de invitados x86 o x86-64 en plataformas con la misma arquitectura de CPU. Esto funcionó ejecutando código en modo de usuario (y opcionalmente algo de código de kernel) directamente en la CPU de la computadora host, y usando emulación de procesador y periférico solo para código en modo kernel y en modo real. KQEMU podría ejecutar código desde muchos sistemas operativos invitados incluso si la CPU del host no admitiera la virtualización asistida por hardware. KQEMU era inicialmente un producto de código cerrado disponible de forma gratuita, pero a partir de la versión 1.3.0pre10 (febrero de 2007), se le volvió a otorgar la licencia Pública General GNU. Las versiones de QEMU que comienzan con 0.12.0 (a partir de agosto de 2009) admiten una gran cantidad de memoria, lo que las hace incompatibles con KQEMU. Las versiones más recientes de QEMU han eliminado por completo la compatibilidad con KQEMU.

QVM86 era un reemplazo directo con licencia GNU GPLv2 para el entonces KQEMU de código cerrado. Los desarrolladores de QVM86 cesaron su desarrollo en enero de 2007.

La máquina virtual basada en kernel (KVM) se ha convertido principalmente en la solución de virtualización asistida por hardware basada en Linux para usar con QEMU a raíz de la falta de soporte para KQEMU y QVM86. QEMU también puede usar KVM en otras arquitecturas como ARM y MIPS.

El Administrador de ejecución acelerada de hardware de Intel (HAXM) es una alternativa de código abierto a KVM para la virtualización asistida por hardware basada en x86 en NetBSD, Linux, Windows y macOS utilizando Intel VT. A partir de 2013, Intel solicita principalmente su uso con QEMU para el desarrollo de Android. A partir de la versión 2.9.0, el QEMU oficial incluye soporte para HAXM, bajo el nombre hax.

QEMU también admite los siguientes aceleradores:

  • hvf, Apple Hypervisor.framework basado en Intel VT.
  • whpx, Plataforma Hypervisor de Microsoft basado en Intel VT o AMD-V.
  • tcgEl propio generador de códigos pequeños de QEMU. Este es el defecto.

Formatos de imagen de disco compatibles

QEMU admite los siguientes formatos de imagen de disco:

  • Formato de imagen de disco universal de macOS.dmgSólo lectura
  • Bochs – Solo lectura
  • Coágulo Linux – Solo lectura
  • Imagen del disco de paralelo (.hdd, .hdsSólo lectura
  • QEMU copy-on-write.qcow2, .qed, .qcow, .cow)
  • VirtualBox Virtual Disk Image (Foto VirtualBox).vdi)
  • Disco duro virtual de PC virtual.vhd)
  • Virtual VFAT
  • VMware Virtual Disk de la máquina.vmdk)
  • Imágenes crudas.img) que contienen contenido sector por sector de un disco
  • Imágenes CD/DVD.iso) que contienen contenido sector por sector de un disco óptico (por ejemplo, arranque de sistemas operativos en vivo)

Modelo de objetos QEMU

El modelo de objetos QEMU (QOM) proporciona un marco para registrar tipos que el usuario puede crear y crear instancias de objetos a partir de esos tipos.

QOM proporciona las siguientes características:

  • Sistema para tipos de registro dinámico
  • Apoyo a la coherencia de los tipos
  • Múltiple herencia de interfaces apátridas

Emulación paralela

Las soluciones de virtualización que utilizan QEMU pueden ejecutar múltiples CPU virtuales en paralelo. Para la emulación en modo de usuario, QEMU asigna subprocesos emulados a subprocesos host. Para una emulación completa del sistema, QEMU es capaz de ejecutar un subproceso de host para cada CPU virtual emulada (vCPU). Esto depende de que el invitado se haya actualizado para admitir la emulación de sistemas paralelos, actualmente ARM, Alpha, HP-PA, PowerPC, RISC-V, s390x, x86 y Xtensa. De lo contrario, se utiliza un solo subproceso para emular todas las CPUS virtuales (vCPUS) que ejecuta cada vCPU en forma de operación por turnos.

Integración

Caja Virtual

VirtualBox, lanzado por primera vez en enero de 2007, utilizaba algunos de los dispositivos de hardware virtuales de QEMU y tenía un recompilador dinámico integrado basado en QEMU. Al igual que con KQEMU, VirtualBox ejecuta casi todo el código invitado de forma nativa en el host a través de VMM (Virtual Machine Manager) y utiliza el recompilador sólo como mecanismo alternativo, por ejemplo, cuando el código invitado se ejecuta en modo real. Además, VirtualBox realizó muchos análisis de código y parches utilizando un desensamblador incorporado para minimizar la recompilación. VirtualBox es gratuito y de código abierto (disponible bajo GPL), excepto para ciertas funciones.

Xen-HVM

Xen, un monitor de máquina virtual, puede ejecutarse en modo HVM (máquina virtual de hardware), utilizando extensiones de virtualización de hardware Intel VT-x o AMD-V x86 y extensiones de virtualización ARM Cortex-A7 y Cortex-A15. Esto significa que, en lugar de dispositivos paravirtualizados, se expone al domU un conjunto real de hardware virtual para utilizar controladores de dispositivos reales con los que comunicarse.

QEMU incluye varios componentes: emuladores de CPU, dispositivos emulados, dispositivos genéricos, descripciones de máquinas, interfaz de usuario y un depurador. Los dispositivos emulados y los dispositivos genéricos en QEMU conforman sus modelos de dispositivos para virtualización de E/S. Incluyen un IDE PIIX3 (con algunas capacidades rudimentarias de PIIX4), Cirrus Logic o video emulado VGA simple, emulación de red RTL8139 o E1000 y soporte ACPI. Xen proporciona soporte APIC.

Xen-HVM tiene emulación de dispositivos basada en el proyecto QEMU para proporcionar virtualización de E/S a las máquinas virtuales. El hardware se emula a través de un "modelo de dispositivo" demonio ejecutándose como backend en dom0. A diferencia de otros modos de ejecución de QEMU (traducción dinámica o KVM), las CPU virtuales se administran completamente en el hipervisor, que se encarga de detenerlas mientras QEMU emula los accesos de E/S asignados en memoria.

KVM

KVM (Kernel-based Virtual Machine) es un módulo del kernel de FreeBSD y Linux que permite a un programa de espacio de usuario acceder a las funciones de virtualización de hardware de varios procesadores, con lo que QEMU es capaz de ofrecer virtualización para x86, PowerPC y S/. 390 invitados. Cuando la arquitectura de destino es la misma que la arquitectura del host, QEMU puede hacer uso de características particulares de KVM, como la aceleración.

Escritorio Win4Lin Pro

A principios de 2005, Win4Lin presentó Win4Lin Pro Desktop, basado en una versión 'adaptada' versión de QEMU y KQEMU y aloja versiones NT de Windows. En junio de 2006, Win4Lin lanzó Win4Lin Virtual Desktop Server basado en el mismo código base. Win4Lin Virtual Desktop Server sirve sesiones de Microsoft Windows para clientes ligeros desde un servidor Linux.

En septiembre de 2006, Win4Lin anunció un cambio del nombre de la empresa a Virtual Bridges con el lanzamiento de Win4BSD Pro Desktop, una adaptación del producto a FreeBSD y PC-BSD. El soporte de Solaris siguió en mayo de 2007 con el lanzamiento de Win4Solaris Pro Desktop y Win4Solaris Virtual Desktop Server.

SerialICE

SerialICE es una herramienta de depuración de firmware basada en QEMU que ejecuta el firmware del sistema dentro de QEMU mientras accede al hardware real a través de una conexión en serie a un sistema host. Esto se puede utilizar como un reemplazo económico para los emuladores de hardware en circuito (ICE).

WinUAE

WinUAE introdujo soporte para las placas CyberStorm PPC y Blizzard 603e utilizando el núcleo QEMU PPC en la versión 3.0.0.

Unicornio

Unicorn es un marco de emulación de CPU basado en el software "TCG" Emulador de CPU. A diferencia de QEMU, Unicorn se centra solo en la CPU: no se proporciona ninguna emulación de ningún periférico y el código binario sin formato (fuera del contexto de un archivo ejecutable o una imagen del sistema) se puede ejecutar directamente. Unicorn es seguro para subprocesos y tiene múltiples enlaces e interfaces de instrumentación.

Emulador de PC Limbo X86

Limbo es una máquina virtual X86 y ARM64 para Android basada en QEMU. Es una de las pocas piezas de software de máquina virtual disponibles para Android capaz de emular Microsoft Windows, aunque fue diseñada para emular Linux y DOS. A diferencia de otros emuladores basados en QEMU, no requiere que los usuarios escriban comandos para su uso, sino que tiene una interfaz de usuario para establecer la configuración de la máquina virtual.

Es más popular en los países en desarrollo de Asia, como India, Malasia y Tailandia, en YouTube debido a la popularidad del sistema operativo Android. Limbo se eliminó de Google Play Store por razones desconocidas entre febrero de 2019 y diciembre de 2020, aunque todavía se puede instalar desde el sitio web de los desarrolladores con una instalación APK (paquete de Android). Limbo es conocido por tener una calidad de audio entrecortada y lenta, y no se han encontrado soluciones conocidas hasta 2023. Limbo generalmente tiene una popularidad desconocida en comparación con otros programas de máquinas virtuales, lo que dificulta mucho la resolución de problemas.

Es necesario instalar una aplicación especial conocida como "Hacker's Keyboard" para utilizar muchas funciones del teclado que un teclado básico de Android no puede realizar en Limbo X86, como Ctrl, Alt, Supr y las teclas de función. Se recomienda instalar Hacker's Keyboard con un archivo APK debido a que Google Play Store indica que no es compatible con las versiones más recientes de Android; sin embargo, con un archivo APK puede instalar Hacker's Keyboard en versiones más recientes de Android. .

Plataformas de hardware emuladas

X86

Puede emular la arquitectura i386 y x86_64. Además de la CPU (que también es configurable y puede emular varios modelos de CPU Intel, incluidos (a partir del 3 de marzo de 2018) Sandy Bridge, Ivy Bridge, Haswell, Broadwell y Skylake), se emulan los siguientes dispositivos:

  • unidad CD/DVD-ROM usando una imagen ISO
  • Floppy unidad de disco
  • Controlador ATA o controlador Serial ATA AHCI
  • Tarjeta gráfica: Cirrus CLGD 5446 PCI VGA- tarjeta gráfica Standard-VGA con Bochs-VBE, Red Hat QXL VGA
  • Tarjeta de red: Realtek 8139C+ PCI, NE2000 PCI, NE2000 ISA, PCnet, E1000 (PCI Intel Gigabit Ethernet) y E1000E (PCIe Intel Gigabit Ethernet)
  • Interfaz de disco NVMe
  • Puerto de serie
  • Puerto paralelo
  • Altavoz de PC
  • chipsets i440FX/PIIX3 o Q35/ICH9
  • PS/2 ratón y teclado
  • Controlador SCSI: LSI MegaRAID SAS 1078, LSI53C895A, NCR53C9x como se encuentra en los controladores AMD PCscsi y Tekram DC-390
  • Tarjeta de sonido: Sound Blaster 16, AudioPCI ES1370,ICH AC'97, Gravis Ultrasound, e Intel HD Audio
  • temporizador de reloj (Intel 6300 ESB PCI, o iB700 ISA)
  • Controladores USB 1.x/2.x/3.x (UHCI, EHCI, xHCI)
  • Dispositivos USB: Audio, Bluetooth dongle, HID (keyboard/mouse/tablet), MTP, interfaz serie, lector de tarjetas inteligentes de CAC, almacenamiento (transferencia solo de batería y SCSI conectado con USB), tableta Wacom
  • Paravirtualized Virt Dispositivos IO: dispositivo bloque, tarjeta de red, controlador SCSI, dispositivo de vídeo, interfaz serie, controlador de globos, controlador de sistema de archivos 9pfs
  • Paravirtualized Dispositivos Xen: dispositivo bloque, tarjeta de red, consola, dispositivo de tracción y entrada

La implementación de BIOS utilizada por QEMU a partir de la versión 0.12 es SeaBIOS. La implementación del BIOS VGA proviene de Plex86/Bochs. El firmware UEFI para QEMU es OVMF.

PowerPC

PowerMac

QEMU emula los siguientes periféricos PowerMac:

  • Puente UniNorth PCI
  • PCI-VGA-compatible tarjeta gráfica que mapea la VESA Bochs Extensiones
  • Dos interfaces PMAC-IDE con disco duro y soporte CD-ROM.
  • adaptador PCI NE2000
  • RAM no volátil
  • VIA-CUDA con teclado y ratón ADB.

OpenBIOS se utiliza como firmware.

PREPARACIÓN

QEMU emula los siguientes periféricos PREP:

  • Puente PCI
  • Tarjeta gráfica compatible con PCI VGA con VESA Bochs Extensiones
  • Dos interfaces IDE con disco duro y soporte CD-ROM
  • Floppy unidad de disco
  • Adaptador de red NE2000
  • Interfaz de serie
  • PREP RAM no volátil
  • PC-compatible teclado y ratón

En el objetivo PREP, se utiliza Open Hack'Ware, un BIOS compatible con Open-Firmware.

Sistema IBM p

QEMU puede emular la interfaz paravirtual sPAPR con los siguientes periféricos:

  • Puente PCI, para el acceso a dispositivos virtio, gráficos compatibles con VGA, USB, etc.
  • Adaptador de red I/O virtual, controlador SCSI e interfaz serie
  • SPAPR RAM no volátil

En el objetivo sPAPR, se utiliza otro BIOS compatible con firmware abierto, llamado SLOF.

BRAZO

ARM32

QEMU arrancado en el puerto ARM de Fedora 8

QEMU emula el conjunto de instrucciones ARMv7 (y hasta ARMv5TEJ) con la extensión NEON. Emula sistemas completos como placa Integrator/CP, placa base Versatile, placa base de emulación RealView, PDA basadas en XScale, PDA Palm Tungsten|E, tabletas de Internet Nokia N800 y Nokia N810, etc. QEMU también impulsa el emulador de Android que forma parte del SDK de Android. (La mayoría de las implementaciones actuales de Android están basadas en ARM). A partir de la versión 2.0.0 de su Bada SDK, Samsung ha elegido QEMU para ayudar en el desarrollo de aplicaciones 'Wave' dispositivos.

En 1.5.0 y 1.6.0 se emulan Samsung Exynos 4210 (Cortex-A9 de doble núcleo) y Versatile Express ARM Cortex-A9 ARM Cortex-A15. En 1.6.0, se emulan las instrucciones de 32 bits de la arquitectura ARMv8 (AArch64), pero no se admiten instrucciones de 64 bits.


Se modela el SoC Zynq basado en Xilinx Cortex A9, con los siguientes elementos:

  • Zynq-7000 ARM Cortex-A9 CPU
  • Zynq-7000 ARM Cortex-A9 MPCore
  • Triple contador de tiempo
  • DDR Controlador de memoria
  • Controlador de DMA (PL330)
  • Controlador de memoria estático (NAND/NOR Flash)
  • SD/SDIO Peripheral Controller (SDHCI)
  • Controlador Ethernet Zynq Gigabit
  • Controlador USB (EHCI - Solo soporte de host)
  • Zynq UART Controlador
  • Controladores SPI y QSPI
  • I2C Controlador

ARM64

SPARC

QEMU es compatible con arquitecturas SPARC de 32 y 64 bits.

Cuando el firmware de JavaStation (sun4m-Architecture) pasó a ser la versión 0.8.1 Proll, un reemplazo de PROM utilizado en la versión 0.8.2 fue reemplazado por OpenBIOS.

SPARC32

QEMU emula los siguientes periféricos sun4m/sun4c/sun4d:

  • IOMMU o IO-UNITs
  • TCX Buffer de marco (tarjeta gráfica)
  • Lance (Am7990) Ethernet
  • RAM no volátil M48T02/M48T08
  • Esclavo I/O: temporizadores, controladores interrumpidos, puertos serie Zilog, teclado y lógica de potencia/reset
  • Controlador ESP SCSI con disco duro y soporte CD-ROM
  • Floppy drive (no en SS-600MP)
  • Dispositivo de sonido CS4231 (sólo en SS-5, no funciona todavía)

SPARC64

Emulación de Sun4u (máquina tipo PC UltraSPARC), Sun4v (máquina tipo PC T1) o máquina Niagara genérica (T1) con los siguientes periféricos:

  • UltraSparc IIi APB PCI Bridge
  • Tarjeta compatible con PCI VGA con VESA Bochs Extensiones
  • PS/2 ratón y teclado
  • RAM no volátil M48T59
  • Puertos serie compatibles con PC
  • 2 interfaces PCI IDE con soporte disco duro y CD-ROM
  • Disquete

MicroBlaze

Periféricos compatibles:

  • MicroBlaze con/sin MMU, incluyendo
  • Periféricos del controlador AXI Timer y Interrupt
  • Controlador externo de memoria AXI
  • AXI DMA Controlador
  • Xilinx AXI Ethernet
  • AXI Lite Ethernet
  • AXI UART 16650 y UARTLite
  • Controlador de SPI AXI

CelosíaMico32

Periféricos compatibles: Del SoC Milkymist

  • UART
  • VGA
  • Tarjeta de memoria
  • Ethernet
  • pfu
  • timer

CRIS

OpenRISC

Otros

Existen árboles externos que respaldan los siguientes objetivos:

  • Zilog Z80 emular un ZX Spectrum 48K
  • HP PA-RISC
Más resultados...
Tamaño del texto:
undoredo
format_boldformat_italicformat_underlinedstrikethrough_ssuperscriptsubscriptlink
save