VER := 5.15.6 all: kernel init help: @echo "Build targets:" @echo "* init - Build busybox based initramfs." @echo "* kernel - Build minimal linux kernel." @echo " ext2 - Build minimal ext2 fs as virtio blkdev backend (uses sudo)." @echo " clean - Cleanup downloads & builds." @echo "" @echo "Run targets:" @echo " run - Boot into the initramfs (qemu)." @echo " vcon - Attach to guest virtio console." @echo " This needs an already running guest VM and must be" @echo " executed in the same domain as the 'run' target" @echo " (docker or host)." @echo " Login as 'root' user, no passwd required." @echo "" @echo "Docker targets:" @echo " docker - Build and start the docker container." @echo " attach - Start an additional bash in the container." @echo " This needs an already running container." kernel: ./build_kernel.sh init: ./build_initramfs.sh ext2: ./build_ext2.sh run: qemu-system-x86_64 \ -nographic \ -cpu host \ -enable-kvm \ -kernel ./linux-$(VER)/arch/x86/boot/bzImage \ -append "earlyprintk=ttyS0 console=ttyS0 root=/dev/ram0 ro" \ -initrd ./initramfs.cpio.gz \ -device virtio-serial-pci \ -device virtconsole,chardev=vcon,name=console.0 \ -chardev socket,id=vcon,ipv4=on,host=localhost,port=2222,server,telnet=on,wait=off \ -drive format=raw,if=virtio,file=blk.ext2 \ -nic user,model=virtio-net-pci vcon: telnet -4 localhost 2222 clean: $(RM) initramfs.cpio.gz $(RM) -r busybox-* $(RM) -r linux-$(VER)* $(RM) blk.ext2 docker: DOCKER_BUILDKIT=1 docker build --build-arg UID=$(shell id -u) -t virtio-dev . docker run --name virtio -it --rm -v $(PWD):/develop --device /dev/kvm virtio-dev attach: docker exec -it virtio bash