A simple x86 firmware that can boot Linux. Most of QEMU's 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-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. * until QEMU 2.7+, in fw_cfg. qboot uses the DMA interface which is pretty much instantaneous. 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): $ meson build && ninja -C build The result will be a 64K file named bios.bin under the build/ directory. Usage ===== $ qemu-kvm -bios bios.bin \ -kernel /boot/vmlinuz-4.0.3-300.fc22.x86_64 \ -serial mon:stdio -append 'console=ttyS0,115200,8n1' TODO ==== * Add the possibility to configure out PIC and PCI bridge initialization