Skip to content
/ qboot Public
forked from bonzini/qboot

Minimal x86 firmware for booting Linux kernels

License

Notifications You must be signed in to change notification settings

louisyoo/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.

Compile qboot
=============

Clone the source:

    $ git clone https://github.com/bonzini/qboot.git

Compile the qboot firmware (you may need to install the relevant build
time dependancies):

    $ make

The result will be a 64K file named bios.bin.

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 8128k -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
====

* SMBIOS tables
* Multiboot loading from pflash

About

Minimal x86 firmware for booting Linux kernels

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • C 92.3%
  • Assembly 4.2%
  • C++ 1.9%
  • Makefile 1.6%