diff options
author | Johannes Stoelp <johannes.stoelp@gmail.com> | 2022-04-17 00:00:05 +0200 |
---|---|---|
committer | Johannes Stoelp <johannes.stoelp@gmail.com> | 2022-04-17 00:00:05 +0200 |
commit | 9bdc2b4fec2f5d11c9648916f362206d31ab6e0d (patch) | |
tree | fa06a961c280a0a40167efcf42f5c09ec4c59f45 /content | |
parent | 0730e22f17dbbdcc8559d743494b20d5ca782b35 (diff) | |
download | blog-9bdc2b4fec2f5d11c9648916f362206d31ab6e0d.tar.gz blog-9bdc2b4fec2f5d11c9648916f362206d31ab6e0d.zip |
virtio: add script and make target to build ext2 device
Diffstat (limited to 'content')
-rw-r--r-- | content/2021-12-02-toying-with-virtio.md | 15 | ||||
-rw-r--r-- | content/2021-12-02-toying-with-virtio/Makefile | 7 | ||||
-rwxr-xr-x | content/2021-12-02-toying-with-virtio/build_ext2.sh | 7 |
3 files changed, 19 insertions, 10 deletions
diff --git a/content/2021-12-02-toying-with-virtio.md b/content/2021-12-02-toying-with-virtio.md index a46fb2a..56c34de 100644 --- a/content/2021-12-02-toying-with-virtio.md +++ b/content/2021-12-02-toying-with-virtio.md @@ -132,11 +132,7 @@ Next we are creating the ext2 filesystem image. This we'll do by creating an `128M` blob and format it with ext2 afterwards. Then we can mount the image via a `loop` device and populate the filesystem. ```sh -dd if=/dev/zero of=rootfs.ext2 bs=1M count=128 -mkfs.ext2 rootfs.ext2 -mount -t ext2 -o loop rootfs.ext2 /mnt -echo world > /mnt/hello -umount /mnt +{{ include_range(path="content/2021-12-02-toying-with-virtio/build_ext2.sh", start=3, end=7) }} ``` Before booting the guest we will attach the virtio block device to the VM. @@ -145,7 +141,7 @@ Therefore we add the `-drive` configuration to our previous qemu invocation. ```sh qemu-system-x86_64 \ ... - -drive if=virtio,file=rootfs.ext2,format=raw + -drive if=virtio,file=fs.ext2,format=raw ``` The `-drive` option is a shortcut for a `-device (front-end) / -blockdev @@ -339,6 +335,7 @@ following files: - [Makefile][makefile] - [build_initramfs.sh][build-initramfs] - [build_kernel.sh][build-kernel] +- [build_ext2.sh][build-ext2] Then run the following steps to build everything. The prefix `[H]` and `[C]` indicate whether this command is run on the host or inside the container @@ -355,9 +352,8 @@ respectively. # Build kernel and initramfs. [C]: make -# Create the rootfs.ext2 disk image as described in the virtio blk -# section above, or remove the drive from the qemu command line -# in the make `run` target. +# Build ext2 fs as virtio blkdev backend. +[H]: make ext2 # Start qemu guest. [H]: make run @@ -365,6 +361,7 @@ respectively. [build-initramfs]: https://git.memzero.de/johannst/blog/src/branch/main/content/2021-12-02-toying-with-virtio/build_initramfs.sh [build-kernel]: https://git.memzero.de/johannst/blog/src/branch/main/content/2021-12-02-toying-with-virtio/build_kernel.sh +[build-ext2]: https://git.memzero.de/johannst/blog/src/branch/main/content/2021-12-02-toying-with-virtio/build_ext2.sh [makefile]: https://git.memzero.de/johannst/blog/src/branch/main/content/2021-12-02-toying-with-virtio/Makefile [dockerfile]: https://git.memzero.de/johannst/blog/src/branch/main/content/2021-12-02-toying-with-virtio/Dockerfile [initramfs]: https://www.kernel.org/doc/Documentation/filesystems/ramfs-rootfs-initramfs.txt diff --git a/content/2021-12-02-toying-with-virtio/Makefile b/content/2021-12-02-toying-with-virtio/Makefile index 4009862..d4286af 100644 --- a/content/2021-12-02-toying-with-virtio/Makefile +++ b/content/2021-12-02-toying-with-virtio/Makefile @@ -6,6 +6,7 @@ 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:" @@ -27,6 +28,9 @@ kernel: init: ./build_initramfs.sh +ext2: + ./build_ext2.sh + run: qemu-system-x86_64 \ -nographic \ @@ -38,7 +42,7 @@ run: -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=rootfs.ext2 \ + -drive format=raw,if=virtio,file=blk.ext2 \ -nic user,model=virtio-net-pci vcon: @@ -48,6 +52,7 @@ 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 . diff --git a/content/2021-12-02-toying-with-virtio/build_ext2.sh b/content/2021-12-02-toying-with-virtio/build_ext2.sh new file mode 100755 index 0000000..6e6bff8 --- /dev/null +++ b/content/2021-12-02-toying-with-virtio/build_ext2.sh @@ -0,0 +1,7 @@ +#!/bin/bash + +dd if=/dev/zero of=blk.ext2 bs=1M count=128 +mkfs.ext2 blk.ext2 +sudo mount -t ext2 -o loop blk.ext2 /mnt +echo world | sudo tee /mnt/hello +sudo umount /mnt |