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