Dear x86 hardware and low-level software developers and enthusiasts!
coresystems GmbH is glad to release a new version of our "Integrated Circuit Emulator over Serial", short SerialICE.
SerialICE (http://www.serialice.com) is a BIOS/Firmware debugging tool. It allows you to run and observe BIOS images (such as coreboot®: http://www.coreboot.org/) written for real hardware in Qemu (http://www.qemu.org) for debugging purposes. Thanks to Qemu's compelling feature set, it's also possible to debug this BIOS code with GNU GDB.
SerialICE consists of three parts:
- a serial console "rom shell" compiled with romcc, with minimal footprint. - a patch to Qemu 0.11.0, which adds a new "SerialICE" machine. - a LUA script that contains filters, loggers and other SerialICE specific configuration and adaption
SerialICE can be downloaded from http://www.serialice.com/.
With "qemu -m serialice -serialice /dev/ttyS0 -L path-to-your-bios.bin-dir -hda /dev/zero" you can run an arbitrary BIOS binary written for your target hardware in Qemu, thus logging all IO and memory accesses. Those operations will additionally be transmitted to the target system's shell and are executed there, while their results are submitted back to Qemu.
Operations sent to the target: - memory reads/writes (some of them) - IO reads/writes - MSR reads/writes - CPUID calls (the bios code path might rely on this)
Note: The code is still quite experimental and only supports a few number of mainboard out of the box, but it was already useful in some debugging scenarios we had and was able to reveil information that would normally only be available with a hardware debugger of the price of a new car. Don't expect SerialICE to completely replace a ICE/JTAG/ITP device, but it might just work for your case, as it did for us.
The ROM code needs minimal board/chipset specific setup in order to establish serial communication with Qemu. See mainboard/* for a few examples. This release contains setup code for 7 mainboards. Also, some hardware accesses have to be caught in the LUA code (scripts/serialice.lua) in order to prevent the system from locking up (ie. when the BIOS is disabling the serial console).
Among the new features: - Completely scriptable filtering and logging with LUA and bitlib. - Kconfig/Kbuild support (make menuconfig) - New mainboards supported: Intel D945GCLF, ASUS M2V-MX SE, MSI MS6178, Thomson IP1000, Dell PowerEdge s1850, RCA RM4100 - Patch against latest Qemu version 0.11.0. - Support for compiling with XMMSTACK and ROMCC. - Many bugs fixed: serial communication, data corruption by signed/unsigned casts, ...
Known issues: - microcode updates from within emulated ROM code will fail. - some rarely used calls of cpuid and rdmsr/wrmsr might not give the correct information
Special thanks go to Daniel Liu, Rudolf Marek, Ron Minnich, Joe Smith, Uwe Hermann and Mark Marshall for their bug fixes and contributions to this release.
See http://www.serialice.com/ for more information.
Comments and patches are of course very welcome!