Skip to content

DarknessBeforeDawn/qboot

 
 

Repository files navigation

A simple x86 firmware that can boot Linux.

Most of QEMU's 500-700 ms startup time is spent:

* in the dynamic linker.  This can be reduced by 150 ms simply by
  compiling a stripped down QEMU:

    ./configure --disable-libssh2 --disable-tcmalloc --disable-glusterfs \
        --disable-seccomp --disable-{bzip2,snappy,lzo} --disable-usb-redir \
        --disable-libusb --disable-smartcard-nss --disable-libnfs  \
        --disable-libiscsi --disable-rbd  --disable-spice --disable-attr \
        --disable-cap-ng --disable-linux-aio --disable-uuid --disable-brlapi \
        --disable-vnc-{jpeg,tls,sasl,png,ws} --disable-rdma --disable-bluez \
        --disable-fdt --disable-curl --disable-curses --disable-sdl \
        --disable-gtk  --disable-tpm --disable-vte --disable-vnc  \
        --disable-xen --disable-opengl --target-list=x86_64-softmmu

* in the BIOS.  qboot saves another 150 ms.

* in fw_cfg.  This is fixed by putting kernel and initrd in a CoreBoot cbfs
  image, and doing a memory copy from NVDIMM or flash instead of using fw_cfg.
  Right now only flash is supported. 350 ms are saved, bringing the startup
  time down to 60 ms.

Usage
=====

fw_cfg based example:

    $ qemu-kvm -bios bios.bin \
      -kernel /boot/vmlinuz-4.0.3-300.fc22.x86_64 \
      -serial mon:stdio -append 'console=ttyS0,115200,8n1'

cbfs-based example (pflash isn't the definitive interface though):

    $ dd if=/dev/zero of=boot.bin bs=4096 count=1
    $ cbfstool cbfs.rom create -s 8m -B boot.bin  -m x86 -o 0x1000
    $ cbfstool cbfs.rom add -f /boot/vmlinuz-4.0.3-300.fc22.x86_64 -n vmlinuz -t raw
    $ echo 'console=ttyS0,115200,8n1' > cmdline
    $ cbfstool cbfs.rom add -f cmdline -n cmdline -t raw
    $ qemu-kvm -drive if=pflash,file=bios.bin,readonly=on \
        -drive if=pflash,file=cbfs.rom,readonly=on \
        -serial mon:stdio

TODO
====

* ACPI tables
* SMBIOS tables
* Multiboot loading

About

Minimal x86 firmware for booting Linux kernels

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • C 90.1%
  • Assembly 5.4%
  • C++ 2.5%
  • Makefile 2.0%