2012-01-01から1年間の記事一覧

VMware Fusion 5のvmware-vdiskmanagerは何処

ここ。 $ find /Applications/VMware\ Fusion.app -name vmware-vdiskmanager /Applications/VMware Fusion.app/Contents/Library/vmware-vdiskmanager 古いブログを参照したら/Library/Application Support/VMware Fusion/vmware-vdiskmanagerって書いてあ…

Instruction level tracer作った

VT-xなVMMはエミュレータと違って1命令毎にソフトウェアエミュレーションしている訳では無いので、単純に命令エミュレーションごとにデコード結果をprintfすればいいとかいう簡単な解は無いし、1命令実行ごとにVMExitする為の設定とかいうものも存在していな…

MacOS Xでアプリケーションを複数インスタンス立ち上げる

Mac

MacOS Xのアプリって基本的に/Applications/Hoge.appを何度も開いても関連付けられたファイルを何個開いても1インスタンスしか実行されない。それでいい場合がほとんどだとは思うんだけれど、Preview.appでPDFの資料眺めててふと複数ウインドウで違うページ…

Linuxでnetperfとかで負荷かけてる時に/proc/statとかを記録してグラフ化するツールあったらいいなと思ったので作った、という話

netperfで負荷かけている時にカーネルのstatistics情報取って色々とグラフ作るツールがあったらいいなぁ、と思ったので作った。今のところperf statで取れるようなCPUのキャッシュの情報とかが取れてないが…とりあえず netperfとかやってる間にログに数値を…

Building BHyVe Guest kernel HOWTO

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に新しい仮想デバイスを追加してみる

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から開始するよう…

GSoC 2012 week4&5:week3のバグを直して擬似BIOS動くようにした

これが動いていなかったので、直した。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…

Linux Kernelでイベントトレースしてみる

sched:sched_migrate_taskイベントにフィルタルール「comm==bash」を適用、トレースを有効化してtrace_pipeから標準出力にトレース結果を出力 cd /sys/kernel/debug/tracing/events/sched/sched_migrate_task echo "comm==bash" > filter echo 1 > enable cat…

Building BHyVe HOWTO

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…

BHyVe開発初心者が今すぐに読むべきたった5つのディレクトリ

usr.sbin/bhyve usr.sbin/bhyveload usr.sbin/vmmctl lib/libvmmapi sys/amd64/vmm

GSoC 2012 week3:疑似BIOSの雛形を実行してみる

これをゲスト環境で実行する為に、疑似BIOSをロードして、CPUをリアルモードで初期化し、unrestricted guest modeを有効にしてゲストを開始する一連の実装を行ってみる。 bhyvebiosloadコマンドを作る bhyveloadコマンドをforkしてbhyvebiosloadコマンドを作…

プログラム初心者にC言語のポインタを不本意ながら教える羽目になったなら、こう教えると良いよ

Just read objdump -d -S ./a.out. Or die.

LinuxConでLinuxカーネルへのBCubeの実装を行う話をしてきた

Implementing a layer 2 framework on linux network View more presentations from Takuya Asada

GSoC 2012 week2:擬似BIOSの雛形を作る

PC起動時のCPUの開始アドレスはいくつかな、と思ったのだがthe processor to always begin executing code at address "FFFF:0000"とか書いてあるので、リニアアドレスで言うと0xFFFF0からスタートするようだ。擬似BIOSを作るには、まずここにリアルモードで…

BHyVe対応CPUかどうか調べる

$ 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…

GSoC 2012 week1:VMCALL命令をtrapする

まぁVM床抜きについては以前にもその手の専門家なgo_vmが詳しく解説されているので、私が色々説明するまでも無いと思う(←説明放棄)。ってな訳でまぁコード書いてみましょう。 ゲストカーネル --- /usr/src-bhyve/sys/amd64/amd64/locore.S 2012-01-03 12:2…

Arch Linuxで任意のバージョンのカーネルをビルド&インストール

なんかArchのドキュメント見てもパッケージシステム使おうとしてるっぽくてよーわからんかったけど、そんな事せんでも普通にinitramfsが用意されてればブート出来るわけで。 tar xvjf linux-3.2.16.tar.bz2 cd linux-3.2.16 zcat /proc/config.gz > .config …

Arch LinuxをTimeCapsuleにする

昨日作ったiSCSIのやつは使い勝手がいまいちだったので、やっぱりnetatalkを入れて普通に自作TimeCapsuleを作ることにした。 まぁこのへん読めって話なんだが。 事前作業 yaourt -Sy netatalk dbus avahi /etc/fstab UUID=017e0151-f13c-4c1e-8eb7-21965d825…

Arch LinuxにiSCSIターゲットを、OS XにiSCSIイニシエータをセットアップし、Time Machineに使う

Arch Linux 基本的にやらなきゃいかんことは全部ここに書いてある: ISCSI Target - ArchWikiなので、ちょっとしたメモだけ。なんかpython2-setuptoolsが無いと途中でビルドが詰んだので先に入れる yaourt -Sy python2-setuptools yaourt -Sy targetcli-fb /…

第七回カーネル/VM探検隊 収支報告

収入 項目 単価 数量 合計 備考 事前チケット購入 3500 54 189000 コンビニ手数料追加徴収 315 16 5040 高校生分は除外 懇親会当日追加分 3500 3 10500 大学生、未成年懇親会料金 2500 4 10000 事前購入の未成年分除外 当日募集カンパ金あまり 2730 1 2730 …

今年もGoogle Summer of Codeに採択されました

今のところ百発百中だし楽勝ですねえー、一応説明すると、BHyVeにBIOS Emulationを実装するというproposalを書いてGoogle Summer of Codeに採択されたので、まぁぼちぼちやります。アイディア的にはこんな感じで。何でx86のそんなレガシーコードを今更?と言…

シリアルコンソール上でのkdbの有効化

ドキュメントがあんまりしっかりしてないのでここに書いておく。 ちなみにkdbというのは*BSDでいうddbである(説明になっていない。まず、カーネルの.configでこのあたりを有効にしてみる: CONFIG_KGDB_KDB=y CONFIG_KDB_KEYBOARD=y CONFIG_HAVE_ARCH_KGDB=…

関西でやったばっかりですけど、第七回 カーネル/VM探検隊やります!

詳細はこちら。