| 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 |