[LinuxBIOS] LinuxBIOS+FILO hangs on qemu

Ed Swierk eswierk at arastra.com
Mon Sep 4 20:22:46 CEST 2006


Hello,

I'm trying to boot Linux on qemu (0.8.2) with LinuxBIOSv2 (svn 2394)
and FILO (0.5). I built filo.elf, ran buildtarget emulation/qemu-i386,
changed Config.lb to use filo.elf as the payload, and built LinuxBIOS.
I then copied the resulting qemu-bios.rom to bios.bin, and started
qemu with the -L option to use this bios.bin, and -nographic to use
the serial console.

When I try to boot a 2.6 bzImage kernel (using diskboot.img from
Fedora), FILO gets as far as "Jumping to entry point..." and then
hangs:

-----
> qemu -L ~ -hda diskboot.img -m 256 -nographic -no-kqemu -d in_asm,exec
(qemu)

LinuxBIOS-1.1.8-FILO Mon Sep  4 10:07:27 PDT 2006 starting...
Copying LinuxBIOS to ram.
Jumping to LinuxBIOS.
LinuxBIOS-1.1.8-FILO Mon Sep  4 11:01:19 PDT 2006 booting...
Enumerating buses...
Finding PCI configuration type.
PCI: Using configuration type 1
PCI_DOMAIN: 0000 enabled
PCI: pci_scan_bus for bus 0
PCI: 00:00.0 [8086/1237] enabled
PCI: 00:01.0 [8086/7000] enabled
PCI: 00:01.1 [8086/7010] enabled
PCI: 00:01.3 [8086/7113] enabled
PCI: 00:02.0 [1013/00b8] enabled
PCI: 00:03.0 [10ec/8029] enabled
PCI: pci_scan_bus returning with max=00
done
Allocating resources...
Reading resources...
Done reading resources.
Setting resources...
PCI: 00:01.1 20 <- [0x0000001400 - 0x000000140f] io
PCI: 00:02.0 10 <- [0x00fc000000 - 0x00fdffffff] prefmem
PCI: 00:02.0 14 <- [0x00fe000000 - 0x00fe000fff] mem
PCI: 00:03.0 10 <- [0x0000001000 - 0x00000010ff] io
Done setting resources.
Done allocating resources.
Enabling resources...
PCI: 00:00.0 subsystem <- 00/00
PCI: 00:00.0 cmd <- 140
PCI: 00:01.0 subsystem <- 00/00
PCI: 00:01.0 cmd <- 147
PCI: 00:01.1 cmd <- 141
PCI: 00:01.3 cmd <- 140
PCI: 00:02.0 cmd <- 143
PCI: 00:03.0 cmd <- 141
done.
Initializing devices...
Root Device init
PCI: 00:00.0 init
PCI: 00:01.0 init
PCI: 00:01.1 init
PCI: 00:01.3 init
PCI: 00:02.0 init
PCI: 00:03.0 init
Devices initialized
Moving GDT to 0x500...ok
Wrote linuxbios table at: 00000530 - 00000b74  checksum 841b

Welcome to elfboot, the open sourced starter.
January 2002, Eric Biederman.
Version 1.3

rom_stream: 0xfffe0000 - 0xfffeffff
Found ELF candiate at offset 0
New segment addr 0x100000 size 0x236e0 offset 0xc0 filesize 0x9748
(cleaned up) New segment addr 0x100000 size 0x236e0 offset 0xc0 filesize 0x9748
New segment addr 0x1236e0 size 0x48 offset 0x9820 filesize 0x48
(cleaned up) New segment addr 0x1236e0 size 0x48 offset 0x9820 filesize 0x48
Dropping non PT_LOAD segment
Dropping non PT_LOAD segment
Loading Segment: addr: 0x0000000000100000 memsz: 0x00000000000236e0
filesz: 0x0000000000009748
Clearing Segment: addr: 0x0000000000109748 memsz: 0x0000000000019f98
Loading Segment: addr: 0x00000000001236e0 memsz: 0x0000000000000048
filesz: 0x0000000000000048
Jumping to boot code at 0x106924
FILO version 0.5 (eswierk at bianchi.arastra.com) Mon Sep  4 11:00:39 PDT 2006
collect_sys_info: boot eax = 0xe1fb007
collect_sys_info: boot ebx = 0x3ff77a0
collect_sys_info: boot arg = 0x3ff77a0
malloc_diag: alloc: 0 bytes (0 blocks), free: 16376 bytes (1 blocks)
malloc_diag: alloc: 24 bytes (1 blocks), free: 16352 bytes (1 blocks)
collect_elfboot_info: Bootloader: elfboot
collect_elfboot_info: Version: 1.3
malloc_diag: alloc: 40 bytes (2 blocks), free: 16336 bytes (1 blocks)
collect_linuxbios_info: Searching for LinuxBIOS tables...
find_lb_table: Found canidate at: 00000530
find_lb_table: header checksum o.k.
find_lb_table: table checksum o.k.
find_lb_table: record count o.k.
collect_linuxbios_info: Found LinuxBIOS table at: 00000530
malloc_diag: alloc: 128 bytes (3 blocks), free: 16248 bytes (1 blocks)
convert_memmap: 0x00000000000000 0x00000000000bdc 16
convert_memmap: 0x00000000000bdc 0x0000000009f424 1
convert_memmap: 0x000000000c0000 0x00000000030000 1
convert_memmap: 0x000000000f0000 0x00000003f10000 1
convert_memmap: 0x000000000f0000 0x00000000000000 16
collect_sys_info: 0000000000000bdc-00000000000a0000
collect_sys_info: 00000000000c0000-00000000000f0000
collect_sys_info: 00000000000f0000-0000000004000000
collect_sys_info: RAM 64 MB
relocate: Current location: 0x100000-0x123727
relocate: Relocating to 0x3fdc8d0-0x3fffff7... ok
setup_timers: CPU 797 MHz
pci_init: Scanning PCI: found 6 devices
malloc_diag: alloc: 208 bytes (4 blocks), free: 16168 bytes (1 blocks)
pci_init: 00:00.0 8086:1237 0600 00
pci_init: 00:01.0 8086:7000 0601 00
pci_init: 00:01.1 8086:7010 0101 80
pci_init: 00:01.3 8086:7113 0680 00
pci_init: 00:02.0 1013:00b8 0300 00
pci_init: 00:03.0 10ec:8029 0200 00
Press <Enter> for default boot, or <Esc> for boot prompt... timed out
boot: hda1:/vmlinuz root=/dev/hda1 console=tty0 console=ttyS0,115200
malloc_diag: alloc: 280 bytes (5 blocks), free: 16096 bytes (1 blocks)
malloc_diag: alloc: 296 bytes (6 blocks), free: 16080 bytes (1 blocks)
file_open: dev=hda1, path=/vmlinuz
find_ide_controller: found PCI IDE controller 8086:7010 prog_if=0x80
find_ide_controller: primary channel: compatibility mode
find_ide_controller: cmd_base=0x1f0 ctrl_base=0x3f4
ide_software_reset: Waiting for ide0 to become ready for reset... ok
init_drive: Testing for hda
init_drive: Probing for hda
init_drive: LBA mode, sectors=16384
init_drive: LBA48 mode, sectors=16384
init_drive: Init device params... ok
hda: LBA48 8192KB: QEMU HARDDISK
devopen: Partition 1 start 3020518592 length 506638
Disk read error dev=1 drive=0 sector=3020518592
devread: read sector failed
Disk read error dev=1 drive=0 sector=3020518594
devread: read sector failed
Disk read error dev=1 drive=0 sector=3020518720
devread: read sector failed
Disk read error dev=1 drive=0 sector=3020518608
devread: read sector failed
Disk read error dev=1 drive=0 sector=3020518656
devread: read sector failed
Unknown filesystem type
malloc_diag: alloc: 280 bytes (5 blocks), free: 16096 bytes (1 blocks)
malloc_diag: alloc: 208 bytes (4 blocks), free: 16168 bytes (1 blocks)
boot: hda:/vmlinuz console=ttyS0
malloc_diag: alloc: 248 bytes (5 blocks), free: 16128 bytes (1 blocks)
malloc_diag: alloc: 264 bytes (6 blocks), free: 16112 bytes (1 blocks)
file_open: dev=hda, path=/vmlinuz
Mounted fat
malloc_diag: alloc: 248 bytes (5 blocks), free: 16128 bytes (1 blocks)
elf_load: Not a bootable ELF image
malloc_diag: alloc: 264 bytes (6 blocks), free: 16112 bytes (1 blocks)
file_open: dev=hda, path=/vmlinuz
devopen: already open
malloc_diag: alloc: 248 bytes (5 blocks), free: 16128 bytes (1 blocks)
Found Linux version 2.6.15-1.2054_FC5
(bhcompile at hs20-bc1-2.build.redhat.com) #1 Tue Mar 14 15:48:03 EST
2006 (protocol 0x204) (loadflags 0x1) bzImage.
init_linux_params: Setting up paramters at 0x90000
set_memory_size: 0000000000000bdc - 00000000000a0000
set_memory_size: 00000000000c0000 - 00000000000f0000
set_memory_size: 00000000000f0000 - 0000000004000000
set_memory_size: ramtop=0x4000000
set_memory_size: ext_mem_k=64512, alt_mem_k=64512
parse_command_line: original command line: "console=ttyS0"
parse_command_line: kernel command line at 0x91000
parse_command_line: kernel command line (13 bytes): "console=ttyS0"
load_linux_kernel: offset=0x2000 addr=0x100000 size=0x16d7f5
Loading kernel... ok
start_linux: eip=0x100000
Jumping to entry point...
-----

At this point, even qemu becomes unresponsive, so it's hard to figure
out exactly what it's doing while running in a tight loop. The last
entry in the qemu debug log file is the "Load new stack segment with
new GDT" movl instruction in __switch_context:

-----
0x03fe3213:  pop    %ebx
0x03fe3214:  sub    $0x106943,%ebx
0x03fe321a:  cli
0x03fe321b:  mov    %esp,%esi
0x03fe321d:  sub    %ebx,%esi
0x03fe321f:  xchg   %esi,0x109700(%ebx)
0x03fe3225:  add    %ebx,%esi
0x03fe3227:  movzwl (%esi),%edx
0x03fe322a:  mov    0x14(%esi),%eax
0x03fe322d:  lgdtl  0x2(%esi)
0x03fe3231:  mov    %edx,%ss
-----

I've also tried an older qemu (0.7.2), an older LinuxBIOS (svn 2302)
and an older kernel (2.4.something from Fedora Core 1), all with the
same result.

Any suggestions would be appreciated.

--Ed




More information about the coreboot mailing list