From 4cf27f5081eb9e9ec2ac41af06d7b1bd3c8022c9 Mon Sep 17 00:00:00 2001 From: Louis Solofrizzo Date: Wed, 24 Apr 2019 08:31:17 +0200 Subject: [PATCH] build: New makefiles and stdio example Signed-off-by: Louis Solofrizzo --- unikernel-demo/.gitignore | 3 +++ unikernel-demo/Makefile | 17 +++++++++++++++ unikernel-demo/README.md | 29 +++++++++++++++++++++++--- unikernel-demo/fs1/Makefile | 9 -------- unikernel-demo/fs1/stdio/Makefile | 3 +++ unikernel-demo/fs1/stdio/main.c | 26 +++++++++++++++++++++++ unikernel-demo/fs1/unistd/Makefile | 3 +++ unikernel-demo/fs1/{ => unistd}/main.c | 0 8 files changed, 78 insertions(+), 12 deletions(-) create mode 100644 unikernel-demo/.gitignore create mode 100644 unikernel-demo/Makefile delete mode 100644 unikernel-demo/fs1/Makefile create mode 100644 unikernel-demo/fs1/stdio/Makefile create mode 100644 unikernel-demo/fs1/stdio/main.c create mode 100644 unikernel-demo/fs1/unistd/Makefile rename unikernel-demo/fs1/{ => unistd}/main.c (100%) diff --git a/unikernel-demo/.gitignore b/unikernel-demo/.gitignore new file mode 100644 index 00000000..31d45ec5 --- /dev/null +++ b/unikernel-demo/.gitignore @@ -0,0 +1,3 @@ +*.cmd +*.img +*.o diff --git a/unikernel-demo/Makefile b/unikernel-demo/Makefile new file mode 100644 index 00000000..395f9324 --- /dev/null +++ b/unikernel-demo/Makefile @@ -0,0 +1,17 @@ +all: + $(MAKE) -C ../../../whiterose/ UKL=$(CURDIR) bzImage + +../../disk.img: + qemu-img create ../../disk.img 0g + mkfs.ext2 ../../disk.img + mkdir tmp_mnt + sudo mount -o loop ../../disk.img tmp_mnt + sudo debootstrap --arch amd64 jessie tmp_mnt + sudo umount tmp_mnt + rmdir tmp_mnt + +qemu: ../../disk.img + qemu-system-x86_64 -enable-kvm -s -m 1G -nographic -cpu host\ + -kernel ../../../whiterose/arch/x86/boot/bzImage\ + -append "console=ttyS0 ukl quiet root=/dev/sda"\ + -hda ../../disk.img diff --git a/unikernel-demo/README.md b/unikernel-demo/README.md index fffdaf9f..0f5e9dfe 100644 --- a/unikernel-demo/README.md +++ b/unikernel-demo/README.md @@ -2,11 +2,34 @@ ### setup +##### Requirements +- qemu +- debootstrap + +##### Clone & Configure the kernel ``` -mkdir unikernel && cd unikernel git clone https://github.com/ne02ptzero/whiterose -(cd whiterose && make defconfig) +cd whiterose && make defconfig +``` + +It will apply the default of the linux kernel, with UKL support. If you're +trying to run this on exotic hardware, now is a good time to change the +configuration. As long as you keep `CONFIG_UKL_LINUX` to `true`, you should be +fine. + +##### Clone && Running the examples +``` git clone https://github.com/jzck/unikernel-demo cd unikernel-demo -make && make run +``` + +Each example come with a Makefile. For example, if you want to run the unistd +example, simply do: +``` +make -C fs1/unistd all qemu +``` + +Or stdio: +``` +make -C fs1/stdio all qemu ``` diff --git a/unikernel-demo/fs1/Makefile b/unikernel-demo/fs1/Makefile deleted file mode 100644 index 37dc06db..00000000 --- a/unikernel-demo/fs1/Makefile +++ /dev/null @@ -1,9 +0,0 @@ -export ukl-obj-m := main.o - -all: - $(MAKE) -C ../../whiterose/ UKL=$(PWD) bzImage - -qemu: - qemu-system-x86_64 -enable-kvm -s -m 1G -nographic -cpu host\ - -kernel ../whiterose/arch/x86/boot/bzImage\ - -append "console=ttyS0 ukl quiet"\ diff --git a/unikernel-demo/fs1/stdio/Makefile b/unikernel-demo/fs1/stdio/Makefile new file mode 100644 index 00000000..ecd636b7 --- /dev/null +++ b/unikernel-demo/fs1/stdio/Makefile @@ -0,0 +1,3 @@ +export ukl-obj-m := main.o + +include ../../Makefile diff --git a/unikernel-demo/fs1/stdio/main.c b/unikernel-demo/fs1/stdio/main.c new file mode 100644 index 00000000..cee94583 --- /dev/null +++ b/unikernel-demo/fs1/stdio/main.c @@ -0,0 +1,26 @@ +#include + +#include +#include + +#ifndef USERSPACE +#define main ukl_main +#endif + +int main(void) { + FILE *f = fopen("/etc/passwd", "r"); + ssize_t ret; + char buf[256] = { 0 }; + + if (f == NULL) + { + fputs("Cannot open /etc/passwd\n", stderr); + return 1; + } + + while ((ret = fread(buf, 1, sizeof(buf), f))) + fwrite(buf, ret, 1, stdout); + + fclose(f); + return 0; +} diff --git a/unikernel-demo/fs1/unistd/Makefile b/unikernel-demo/fs1/unistd/Makefile new file mode 100644 index 00000000..ecd636b7 --- /dev/null +++ b/unikernel-demo/fs1/unistd/Makefile @@ -0,0 +1,3 @@ +export ukl-obj-m := main.o + +include ../../Makefile diff --git a/unikernel-demo/fs1/main.c b/unikernel-demo/fs1/unistd/main.c similarity index 100% rename from unikernel-demo/fs1/main.c rename to unikernel-demo/fs1/unistd/main.c