BHyVe
一部のLinuxカーネルと一部のIntel CPUの組み合わせでは「Unknown WRMSR code 391, val 2000000f, cpu 0」「vm exit rdmsr 0xe8, cpu 0」などのエラーがでる。 これは、該当するMSRへのアクセスをBHyVeがハンドルせずに異常終了して済ませてしまっているため…
OpenBSDサポートはまだ実験段階で、カーネルを改変したバージョンの5.4しか動かない。 この問題を回避するために、改変版カーネルがインストールされたディスクイメージをダウンロードする。 # cd bhyve-script # cp vm0 openbsd3 これから作るVMの名前にvm0…
# cd bhyve-script # cp vm0 freebsd2 これから作るVMの名前にvm0をコピー(末尾は数値で、他のVMと重複しない値でなければならない) # vi freebsd2 NIC=“em0” をお使いのNIC名に VCPUS=“1”を任意のvCPU数に VMRAM=1024”を任意のメモリサイズに DEVSIZE=“2G…
# cd bhyve-script # cp vm0 centos1 これから作るVMの名前にvm0をコピー(末尾は数値で、他のVMと重複しない値でなければならない) # vi centos1 NIC=“em0” をお使いのNIC名に VCPUS=“1”を任意のvCPU数に VMRAM=1024”を任意のメモリサイズに VMOS=“freebsd…
# pkg install grub2-bhyve tmux # fetch http://bhyve.org/bhyve-script.tar # tar -xvf bhyve-script.tar # cd bhyve-script # cp vm0 ubuntu0 これから作るVMの名前にvm0をコピー(末尾は数値で、他のVMと重複しない値でなければならない) # vi ubuntu0 …
このブログエントリはカーネル/VM Advent Calendar 2013 25日目の記事です。前回、カーネル/VM探検隊で「バインディングさえあればスクリプト言語でもゲストOSローダを実装出来る」という話をちらっとしました(資料)。今回の記事では、ゲストOSロ…
このブログエントリはカーネル/VM Advent Calendar 2013 8日目の記事、および第九回カーネル/VM探検隊の発表の補足記事です。 発表資料と動画 このエントリだけでも理解できるように書いたつもりですが、はじめにこちらをみて頂いた方が分かりやすいかもし…
なんかBIOS emulationなかなか動かないし、取り敢えずLinux loader欲しいよね。という気持ちが高まりつつある今日この頃、皆様如何お過ごしでしょうか。で、作ってみるならなるべく既存のプログラムを流用して楽にやりたいわけだが、bhyveloadに一番似てるLi…
取り敢えず、BHyVe treeが-CURRENTへマージされるまでは残しときますね。 https://github.com/syuu1228/bhyve
VT-xなVMMはエミュレータと違って1命令毎にソフトウェアエミュレーションしている訳では無いので、単純に命令エミュレーションごとにデコード結果をprintfすればいいとかいう簡単な解は無いし、1命令実行ごとにVMExitする為の設定とかいうものも存在していな…
This is supplemental document of Building BHyVe HOWTO. build guest kernel and install guest kernel. cd /root/bhyve make buildkernel KERNCONF=BHYVE make installkernel KERNCONF=BHYVE DESTDIR=/root/bhyve-guest-1gb-v2
BHyVe Hackathon用にサンプルの仮想デバイスを書いてみた。 実行イメージ bhyve-tap0# cat /dev/bvtest Hello from BHyVe 仕組み inl(BVTEST_LEN_PORT)で文字列の長さを取得 outl(BVTEST_OFF_PORT, offset)で読み取りたい1文字のオフセットを設定 inl(BVTES…
DOSアプリを動かすためのエミュレータという事で当然BIOSエミュレーションも入っているので、これをアプリケーションの形からばらしてライブラリに作り変えてる。 DOS関連の機能は要らないから削ったり。 まずは、int13h(ディスクアクセス)をエミュレーシ…
int=10h Screen ah=0eh Write Character in TTY Mode int=13h Disk ah=00h Reset Disk Drives ah=02h Read Sectors ah=08h Get Drive Parameters ah=41h Extended Disk Drive (EDD) Installation Check ah=42h Extended Read Sectors int 16h Keyboard ah=00…
ちょっとINT 13h AH=02h(Disk Read)のリクエストをダンプして眺めてみたいって思って、こんなStubを作って試してみたら… static int int13_handler(struct vmctx *ctx, int vcpu, int intno) { uint64_t rax, rbx, rcx, rdx, es_base, rflags; uint32_t es_l…
こんなコードをusr.sbin/bhyve/fbsdrun.cへ足してみる: @@ -463,9 +463,10 @@ intr = (rip - 0x400) / 0x4; printf("intr=%"PRIu64"\n", intr); - return (VMEXIT_ABORT); - - return (VMEXIT_RESTART); + if (intr == 0x14) + return (VMEXIT_ABORT); + el…
まずブートセクタをゲスト空間に読み込めるようにする。bhyvebiosload.c disk_fd = open(disk_image, O_RDONLY); if (read(disk_fd, &membase[0x7c00], 512) != 512) { perror("read "); return (1); } これに合わせて、ゲストのRIPは0x7c00から開始するよう…
これが動いていなかったので、直した。IntelのマニュアルのVol3・section 9.1.1 "Processor State After Reset"とsection 26.3 ”CHECKING AND LOADING GUEST STATE”を読みながら、VMCSの初期値のつじつま合わせを。 int vm_setup_bios_registers(struct vmct…
Caution What I describing in this text is not so different with FreeBSD official manual, if you haven't read official manual you should read it first. Here's the link: 23.6. Rebuilding World Install FreeBSD 9.0/amd64. We won't use src or p…
usr.sbin/bhyve usr.sbin/bhyveload usr.sbin/vmmctl lib/libvmmapi sys/amd64/vmm
これをゲスト環境で実行する為に、疑似BIOSをロードして、CPUをリアルモードで初期化し、unrestricted guest modeを有効にしてゲストを開始する一連の実装を行ってみる。 bhyvebiosloadコマンドを作る bhyveloadコマンドをforkしてbhyvebiosloadコマンドを作…
PC起動時のCPUの開始アドレスはいくつかな、と思ったのだがthe processor to always begin executing code at address "FFFF:0000"とか書いてあるので、リニアアドレスで言うと0xFFFF0からスタートするようだ。擬似BIOSを作るには、まずここにリアルモードで…
$ dmesg|grep CPU: CPU: Intel(R) Pentium(R) CPU G6950 @ 2.80GHz (2793.04-MHz K8-class CPU) CPU: Intel(R) Pentium(R) CPU G6950 @ 2.80GHz (2793.05-MHz K8-class CPU) CPU: Intel(R) Pentium(R) CPU G6950 @ 2.80GHz (2793.04-MHz K8-class CPU) Intel…
まぁVM床抜きについては以前にもその手の専門家なgo_vmが詳しく解説されているので、私が色々説明するまでも無いと思う(←説明放棄)。ってな訳でまぁコード書いてみましょう。 ゲストカーネル --- /usr/src-bhyve/sys/amd64/amd64/locore.S 2012-01-03 12:2…
なんか関西方面のとても怖い勉強会に参加して、勇気を振り絞ってハイパーバイザーのゆるい話をさせて頂きました><;スライドはこちら(Intel VT, KVMの説明の一部で@oza_x86の資料を使わせて頂いています。oza_kvm先生有り難うございました): BHyVeって…
ユーザランド側 $ wc -l lib/libvmmapi/*.[ch] usr.sbin/bhyve*/*.[ch] usr.sbin/vmmctl/vmmctl.c 338 lib/libvmmapi/mptable.c 171 lib/libvmmapi/mptable.h 645 lib/libvmmapi/vmmapi.c 98 lib/libvmmapi/vmmapi.h 187 lib/libvmmapi/vmmapi_freebsd.c 68 …