The 'qemuprep'/'qemuprep-altivec' BSPs are variants of 'motorola_powerpc' that can run under QEMU. They are *not* binary compatible with other variants of 'motorola_powerpc' (nor with each other). Most significant differences to real hardware: - 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. 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. The Ethernet address specified in the RTEMS network interface configuration and the Qemu command line must match, otherwise uni-cast frames are not received. It is best to use a NULL pointer in the RTEMS network interface configuration for the Ethernet address, so that the default from Qemu is used. Make sure that your firewall settings allow communication between different Qemu instances and your host. 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. Have fun. Till Straumann, 2011/07/18