QEMU
QEMU is a generic open source processor and system emulator. It achieves good performance from using a .
Contents
Processor
QEMU is simulates a range of processors, most commonly a 24Kf MIPS32 processor for 32-bit emulation and a R4000 MIPS III processor for 64-bit emulation.
$ qemu-system-mips -cpu '?' MIPS '4Kc' MIPS '4Km' MIPS '4KEcR1' MIPS '4KEmR1' MIPS '4KEc' MIPS '4KEm' MIPS '24Kc' MIPS '24Kf' MIPS '34Kf'
$ qemu-system-mips64 -cpu '?' MIPS '4Kc' MIPS '4Km' MIPS '4KEcR1' MIPS '4KEmR1' MIPS '4KEc' MIPS '4KEm' MIPS '24Kc' MIPS '24Kf' MIPS '34Kf' MIPS 'R4000' MIPS 'VR5432' MIPS '5Kc' MIPS '5Kf' MIPS '20Kc' MIPS 'MIPS64R2-generic' MIPS 'Loongson-2E' MIPS 'Loongson-2F'
All processor emulations claim to have primary caches; however, the cache effects are not simulated and cacheops are treated as noops. This is a design decision to improve performance over accuracy. No benchmarking has been done; however, it is expected that the performance of the virtual MIPS system will be comparable to emulation of the other processors.
System architecture
QEMU 1.0 supports MIPS Malta architecture with CoreLV card, mips pseudo-board, ACER PICA-61 (a Jazz deriviative) and mipssim simulator.
$ qemu-system-mips -M ? Supported machines are: mips mips r4k platform mipssim MIPS MIPSsim platform malta MIPS Malta Core LV (default) magnum MIPS Magnum pica61 Acer Pica 61
Firmware
The QEMU distribution does not contain any firmware for MIPS. This is only a minor problem as unlike on a real system QEMU's virtual hardware is mostly initialized after a reset.
At least some existing firmware for MIPS Malta also works with QEMU, e.g. RedBoot.
There is also a port to QEMU.
MIPS pseudo board
This paragraph describes the architecture of the MIPS system (mips) that currently is being emulated by QEMU. As QEMU is still very much work in progress this is expected to change.
Memory map
QEMU emulates a simple machine with -like bus. ISA IO space mapped to the 0x14000000 (PHYS) and ISA memory at the 0x10000000 (PHYS, 16Mb in size). All peripherial devices are attached to this "bus" with the standard PC ISA addresses.
Interrupt controller
QEMU is emulating the standard builtin interrrupt controller including soft interrupts and the count/compare interrupt of R4000-class processors. Cascaded externally to that is a interrupt controller that is cascaded to the CPU's INT0.
Timer
In addition to the CPU builtin timer Linux support the (Programmable Interval Timer) which is cascaded to the PIC's interrupt 0 input.
Graphics card
QEMU is emulating a standard VGA graphics card however underlined, bold and blinking attributes are not supported.
Serial interface
QEMU is emulating a PC-style 8250-based serial interface.
Network interface
QEMU is emulating a single ISA NE2000 network card.
Disk interface
QEMU emulates a generic PC-style IDE interface.
Other peripherals
QEMU supports other peripherals however support for them has not been integrated or tested into the MIPS port.
Status
At this time the MIPS support still is in alpha stage. There is not much firmware for QEMU yet, so QEMU does the basic initialization as well as loading kernel and ramdisk itself. The Linux kernel has a special configuration to support the QEMU platform, no additional patches are needed.
Debian installer images with such a kernel are available for and . They are also available on the
A guide for installing Debian can be found .
Common Problems
MIPS BIOS not found on startup
[ralf@box qemu]$ qemu-system-mips -kernel /tftboot//vmlinux.bin -m 16 -nographic (qemu) mips_r4k_init: start mips_r4k_init: load BIOS '/usr/local/share/qemu/mips_bios.bin' size 131072 qemu: could not load MIPS bios '/usr/local/share/qemu/mips_bios.bin' [ralf@box qemu]$
There currently is no MIPS BIOS file for QEMU (see firmware). However if passed a -kernel argument qemu will not call the firmware at all, so this does no harm at all. Therefore, a command such as
dd if=/dev/zero of=/usr/local/share/qemu/mips_bios.bin bs=1024 count=128
will generate a firmware file that will do the job for now.
Since QEMU 0.8.1 this workaround is obsolete, a missing BIOS file triggers only a warning message.
Emulating MIPS with qemu is too hard ?
Use arm_now, a qemu wrapper:
[@chaignc]$ sudo pip3 install [@chaignc]$ arm_now start mips32el Welcome to Buildroot buildroot login: root # uname -m mips # gdb /bin/ls (gdb) start Temporary breakpoint 1, 0x00405434 in main () (gdb) x/i $pc => 0x405434 <main+12>: li a0,-1
MIPS HOST SUPPORT
In 2004, I successfully compiled QEMU on a SGI machine, using a patch found here:
I hope this patch could merge into the new qemu release. Thanks! -- Tinybit <tinybit at tom dot com>
See also
- The QEMU homepage at .
Credits
Originally authored by French wizzard , Jocelyn Mayer did add support for MIPS as a target, others are now trying to complete the project.
NewPP limit report Cached time: Cache expiry: 86400 Dynamic content: false CPU time usage: 0.021 seconds Real time usage: 0.069 seconds Preprocessor visited node count: 75/1000000 Preprocessor generated node count: 80/1000000 Post‐expand include size: 0/2097152 bytes Template argument size: 0/2097152 bytes Highest expansion depth: 2/40 Expensive parser function count: 0/100 Transclusion expansion time report (%,ms,calls,template) 100.00% -total Saved in parser cache with key wikidb:pcache:idhash:1210-0!*!0!!en!*!* and timestamp and revision id 29265