2012-07-01から1ヶ月間の記事一覧

BHyVeに新しい仮想デバイスを追加してみる

BHyVe Hackathon用にサンプルの仮想デバイスを書いてみた。 実行イメージ bhyve-tap0# cat /dev/bvtest Hello from BHyVe 仕組み inl(BVTEST_LEN_PORT)で文字列の長さを取得 outl(BVTEST_OFF_PORT, offset)で読み取りたい1文字のオフセットを設定 inl(BVTES…

Arch Linuxで/usr/src/linux;make installで自動的にinitramfs作ってgrub設定する

あおたくんの記事と同じような話だが、Arch Linuxには/sbin/installkernelが無いので作ってみる。 で、ググるとこのあたりにそれっぽいものがあるんだが、これinitramfs作ってくれなかったので、作ってくれるようにちょっと改良した。このあたりから取れます…

GSoC 2012 week8: doscmdというDOSエミュレータをBIOSエミュレーションライブラリに仕立て上げる

DOSアプリを動かすためのエミュレータという事で当然BIOSエミュレーションも入っているので、これをアプリケーションの形からばらしてライブラリに作り変えてる。 DOS関連の機能は要らないから削ったり。 まずは、int13h(ディスクアクセス)をエミュレーシ…

GSoC 2012 week7:この辺りのBIOSコールを実装した

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 AH=0Eh(VGAへの文字出力)のエミュレーション

まずはコンソール出力が無いと始まらないので、INT 10hから手を付ける事にした。 と言っても、結構色々な機能があるので、まずはFreeBSDのMBRで使われているAH=0Ehだけサポートしてみる。fbsdrun.c vmexit_hypercall(struct vmctx *ctx, struct vm_exit *vme…

VMCALLからの復帰

こんなコードを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…

GSoC 2012 week6:INT命令をハンドルしてみる

まずブートセクタをゲスト空間に読み込めるようにする。bhyvebiosload.c disk_fd = open(disk_image, O_RDONLY); if (read(disk_fd, &membase[0x7c00], 512) != 512) { perror("read "); return (1); } これに合わせて、ゲストのRIPは0x7c00から開始するよう…