FreeBSD
http://www.slideshare.net/syuu1228/intel-nuc の続きの話です。CURRENTにマージされたbug fixはMFCって言って、stableへマージされて次のRELEASEに含まれる仕組みになってるっぽいんですが、このパッチも無事取り込まれたようで、次のRELEASE(10.1, 9.3か…
Intel Baytrail-M NUC(DN2820FYKH) causes kernel panic due to its broken ACPI table: http://www.freebsd.org/cgi/query-pr.cgi?pr=187966This install image includes patched kernel for the machine, you are able to install FreeBSD-10 on the machi…
これの続き。Linuxでは僕の書いたpatchと同じ感じでreservedが来たらtriggerならlevel、polarityならlowを返すようにしています。 http://lxr.linux.no/linux+v3.13.5/arch/x86/kernel/acpi/boot.c#L1094ですので、このパッチをマージして貰うという事で良い…
bhyve用にこれ買ってみたんですよ、これ。まぁ新しいハードだし地雷だろうなと思ってたんだけど、面白そうにおもっちゃってつい人柱っちゃったんですよ。はい。したらもういきなりドハマリして。 FreeBSDが入っている2.5インチHDDを繋いでもレガシーブートモ…
一部の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 8日目の記事、および第九回カーネル/VM探検隊の発表の補足記事です。 発表資料と動画 このエントリだけでも理解できるように書いたつもりですが、はじめにこちらをみて頂いた方が分かりやすいかもし…
前にTLで話題になってたけど記憶からほぼ飛んでいたのでブログに書いとく。/bin/shがbashになってたりすると困るからFreeBSDで試したけど別にLinuxでもOSXでもそんなに変わらないはず。 標準シェルがbashの状態で/bin/[(別のOSでは/usr/bin/[かもしれない)…
こちら。こんな感じにRubyスクリプトでNICを設定できるぜいえーい eth = Netif.new("eth0") eth.up eth.mtu = 1000 eth.set_addr("172.0.0.1", "255.255.255.0") puts "addr:#{eth.addr}" puts "netmask:#{eth.netmask}" puts "broadaddr:#{eth.broadaddr}" …
前回の記事の続き。 FreeBSD-CURRENTのISOはシリアルコンソール用になっていないため、余計な作業が増えて面倒くさい。 よく読まずに作業を飛ばすとログイン手段をすべて失う事になるので注意されたい。また、このOSは--location引数でのセットアップには対…
ペーパーはこちら スライドはこちら 実装できてないものについて話すという非常にアレな発表でしたが、生暖かく受け入れて頂けました。 まぁ、あの場にハイパーバイザー実装のプロみたいな人がたっぷりいたらもっといたぶられてた
この記事に対して、さとうせんせいから”intr_event_bind() の本質的な部分は ie->ie_assign_cpu() を呼んでいるとこで、IRQ-CPU の binding は、そのハンドラ経由で呼ばれる PIC を操作する MD なコードでやっているはずですよ。(CPU単位の統計をとる機能が…
ぼくは10GbEの割り込み周り(MSI-Xによりコア毎に独立したIRQを持つ)とかに興味を持っていたので、以前からこれがかなり気になってたんだが、まずはこれを見て欲しい。 Linux IRQ毎に各CPUの割り込み回数が取れるよね。 $ cat /proc/interrupts CPU0 CPU1 C…
多分objdumpとか他のツール使っても出来ると思うけど、udis86に付属のudcliでもこんな感じに簡単にディスアセンブル出来る。 $ udcli -16 -att -v intel -o 7c00 -c 512 freebsd.img 0000000000007c00 eb3c jmp 0x7c3e 0000000000007c02 0000 add %al, (%bx,…
なんかASUS U24Eを買ったらUSB 3.0ポートが付いてきて、FreeBSD-CURRENTで認識出来たのでUSB 3.0対応ケースを買って2.5 inch SATA HDDを突っ込んで軽く試してみた。 USB 2.0のポート root@u24e:~ # usbconfig list ugen0.1: <EHCI root HUB Intel> at usbus0, cfg=0 md=HOST spd=H</ehci>…
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…
まずはコンソール出力が無いと始まらないので、INT 10hから手を付ける事にした。 と言っても、結構色々な機能があるので、まずはFreeBSDのMBRで使われているAH=0Ehだけサポートしてみる。fbsdrun.c vmexit_hypercall(struct vmctx *ctx, struct vm_exit *vme…
こんなコードを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コマンドを作…