= Qemuprep = [[TOC(Developer/Simulators/QEMU/Preparation, depth=2)]] = BSP Supporting QEMU's PReP Emulation = As of rtems-4.11 two variants of the 'motorola_powerpc' BSP family are available: * qemuprep * qemuprep-altivec The most significant differences between the emulation and real PREP hardware are * no OpenPIC, just a 8259 PIC (even though qemu implements an openpic at least to some extent it is not configured into the prep platform as of qemu-0.14.1). * no VME (absense of the VME controller is detected by the BSP) * the only network chip supported by both, qemu and vanilla RTEMS is the ISA NE2000 controller. Note that the default interrupt line settings used by RTEMS and QEMU differ: RTEMS uses 5 and QEMU 9. This can be addressed by passing a RTEMS commandline option --ne2k-irq=9. Other controllers (i8559, e1000, pcnet) implemented by qemu can also be used but require unbundled RTEMS drivers (libbsdport). Note that the bundled 'if_fxp' has not been ported to PPC and works on x86 only. * unlike a real motorola board you can run qemu emulating a 7400 CPU which features altivec. I.e., you can use this BSP (altivec-enabled variant) to test altivec-enabled code. = Compatibility = qemu had quite a few bugs related to the PREP platform. Version 0.12.4, for example, required patches. 0.14.1 seems to have fixed the show-stoppers. Hence, you need at least qemu-0.14.1 for this BSP; it should work without the need for patching QEMU. = BIOS = Qemu requires you to use a BIOS/firmware. The one that came with qemu 0.12.4 didn't work for me so I created a minimal dummy that provides enough functionality for the RTEMS bootloader to work. = BSP Variants = You can compile the BSP for either a 604 CPU or a 7400 (altivec-enabled). Note that you cannot run the altivec-enabled BSP variant on a CPU w/o altivec/SIMD hardware. The non-altivec variant is called 'qemuprep' and the altivec-enabled one 'qemuprep-altivec'. Hence, you can configure RTEMS: {{{ 604/non-altivec variant only: configure --target=powerpc-rtems --enable-rtemsbsp=qemuprep 7400/altivec variant only: configure --target=powerpc-rtems --enable-rtemsbsp=qemuprep-altivec both variants: configure --target=powerpc-rtems --enable-rtemsbsp='qemuprep qemuprep-altivec' }}} = Building QEMU = In case you have no pre-built qemu-0.14.1 you can compile it yourself: {{{ cd qemu-0.14.1 configure --target-list=ppc-softmmu make }}} = Running QEMU = A number of command-line options are important (BTW: make sure you run the PPC/PREP emulator and not a natively installed i386/PC emulating 'qemu') {{{ -M prep --- select machine type: prep -cpu 604 --- select 604 CPU for non-altivec variant -cpu 7400 --- select 7400 CPU for altivec variant NOTE: the 7455 and 7457 emulations are buggy as of qemu-0.14.1 and they won't work. -bios /powerpc-rtems/qemuprep/qemu_fakerom.bin -bios /powerpc-rtems/qemuprep-altivec/qemu_fakerom.bin --- select proprietary dummy 'BIOS' -nographic --- redirect serial/IO to console where qemu is run -kernel --- path to your RTEMS executable (.ralf file, e.g., 'hello.ralf') -no-reboot --- terminate after one run -append --- RTEMS kernel comand line (use e.g., to modify ne2000 driver interrupt line) }}} = Networking = (We assume your RTEMS application is correctly configured and built for networking using the ne2k adapter [other adapters can be used with unbundled/libbsdport drivers]) I use networking with a 'tap' interface on the host machine and can then communicate with the emulated target in any desired way. On (linux) host: {{{ # create a 'permanent' tap device that can be used by myself # (as non-root user). sudo tunctl -u `id -u` # configure tap0 interface sudo ifconfig tap0 10.1.1.1 netmask 255.255.255.0 up # provide a suitable dhcpd config file (for the emulated # platform to boot: IP address etc. # # execute dhcp on host sudo dhcpd -d tap0 }}} Start emulated prep platform: {{{ ppc-softmmu/qemu-system-ppc \ -M prep \ -cpu 7400 \ -bios /powerpc-rtems/qemuprep-altivec/lib/qemu_fakerom.bin \ -kernel /my_app.ralf \ -append --ne2k-irq=9 \ -nographic \ -no-reboot \ -net nic,model=ne2k_isa \ -net tap,vlan=0,ifname=tap0,script=no,downscript=no }}} Again: if you use the non-altivec BSP variant, use -cpu 604 and if you use the altivec-enabled variant then you MUST use -cpu 7400. = References = 1. [wiki:Developer/Simulators/QEMU] 1. http://wiki.qemu.org/Features/PRePCleanup 1. http://www.nongnu.org/qemu/ QEMU