[OpenBIOS] couple of problem while compiling and running openfirmware on qemu
Gleb Natapov
gleb at redhat.com
Mon Nov 1 13:04:11 CET 2010
Hello,
I tried to compile openfirmware for qemu like described here
http://www.openfirmware.info/Building_OFW_for_QEMU. But after running
make in cpu/x86/pc/emu/build on 64bit host I get linkage error:
ld -T inflate.ld inflate.lo -o inflate.o
ld: i386 architecture of input file `inflate.lo' is incompatible with i386:x86-64 output
After applying this patch:
Index: cpu/x86/Linux/Makefile
===================================================================
--- cpu/x86/Linux/Makefile (revision 1996)
+++ cpu/x86/Linux/Makefile (working copy)
@@ -34,7 +34,7 @@
${CC} -c -m32 -Wall -fno-stack-protector -ffreestanding -D_FORTIFY_SOURCE=0 -DNEED_BCOPY -O3 -fpic $< -o $@
inflate.o: inflate.lo
- ${LD} -T inflate.ld $< -o $@
+ ${LD} -melf_i386 -T inflate.ld $< -o $@
../build/inflate.bin: inflate.o
objcopy -O binary $< $@
====
compilation goes a little bit further but now it stops with:
./build emuofw.rom
--- Rebuilding ohci.fc
--- Cmd: ${HOSTDIR}/forth ${HOSTDIR}/../build/builder.dic ../ohci.bth
${BP}/dev/usb2/hcd/ohci/ohci.fth:25: my-w@ ?
don't know much forth so just commented every line that gave me an
error:
Index: dev/usb2/hcd/ohci/ohci.fth
===================================================================
--- dev/usb2/hcd/ohci/ohci.fth (revision 1996)
+++ dev/usb2/hcd/ohci/ohci.fth (working copy)
@@ -22,12 +22,12 @@
0 value ohci-reg
: map-regs ( -- )
- 4 my-w@ h# 16 or 4 my-w!
- 0 0 my-space h# 0200.0010 + 1000 map-in to ohci-reg
+\ 4 my-w@ h# 16 or 4 my-w!
+\ 0 0 my-space h# 0200.0010 + 1000 map-in to ohci-reg
;
: unmap-regs ( -- )
- ohci-reg 1000 map-out 0 to ohci-reg
+\ ohci-reg 1000 map-out 0 to ohci-reg
;
: ohci-reg@ ( idx -- data ) ohci-reg + rl@ ;
========
After that compilation finally succeeded.
Produced rom image runs fine on qemu, but fails on qemu-kvm with error:
BUG: kvm_dirty_pages_log_change: invalid parameters 0000000010000000-0000000010ffffff
Looking into it it seams like openfirmware configure cirrus framebuffer to be
at address 0x10000000, but later it configures nic memory BAR with the
same address (during device enumeration perhaps). Later it deconfigures
nic again. Qemu somehow handles this fine, but qemu-kvm doesn't. This
shouldn't work on real HW too FWIW.
--
Gleb.
More information about the OpenBIOS
mailing list