livaの雑記帳

livaの雑記帳

OSとか作ってみたい

Rump Kernelを実機で動かす

Unikernelをまだ動かしてなかったので、動かす。

↓これ通りにやれば良い。

Tutorial: Building Rumprun Unikernels · rumpkernel/wiki Wiki · GitHub

 

$ git clone http://repo.rumpkernel.org/rumprun
$ cd rumprun
$ git submodule update --init
$ ./build-rr.sh hw

 

helloer.cを作る。

#include <stdio.h>

#include <unistd.h>

 

int main() {

  printf("test1");

  sleep(2);

  printf("test2");

  return 0;

}

 

$ ./rumprun/bin/x86_64-rumprun-netbsd-gcc -o helloer-rumprun helloer.c

 

$./rumprun/bin/rumprun-bake hw_generic helloer-rumprun.bin helloer-rumprun

 

これでアプリケーションとかFSとかが全部1つになった、elfバイナリができるので、後はこれをmultibootで起動するだけ。

 

multibootが起動できれば何でも良いけど、GRUB2以外の選択肢は無いだろうなぁ。

ともかく、普通にディスクイメージ作って、GRUB2インストールして、ディスクイメージをマウントして、/boot以下とかにhelloer-rumprun.binを置けば良い。

たぶんgrub.cfgの最小構成はこんな感じ。

menuentry "unikernel" {

  multiboot /boot/helloer-rumprun.bin

}

 

f:id:liva_h:20170718215534j:plain

 

とりあえずtest1test2って出てるから、動いてるっぽいですね。

とても簡単に動いた。

 

7/21追記:

qemuで動かしたければ、

./rumprun/bin/rumprun qemu -i -g '-curses' helloer-rumprun.bin

とかやればよろし。GUI環境なら、 -g '-curses'も不要。