■
必要なものは最新のカーネルとビルドツールが必要になる。ゲストのUMLからホストOSのファイルシステムをアクセスできるhostfsを使用すると便利である。
$ make defconfig ARCH=um $ make gconfig ARCH=um # ここでUML-specific optionのHost Filesystemを有効にする。 $ make ARCH=um
次にUMLが使用するルートファイルシステムを用意する。自前で用意してもいいがhttp://uml.nagafix.co.uk/ここにディストリビューションごとのルートファイルシステムがあるので利用すると便利である。
ここではDebianのルートファイルシステムを使い、UMLの実行の仕方は次の様になる。
$ wget http://uml.nagafix.co.uk/Debian-4.0/Debian-4.0-x86-root_fs.bz2 $ bunzip2 Debian-4.0-x86-root_fs.bz2 $ cp /usr/src/uml/linux-2.6.22.6/vmlinux ./ $ ./vmlinux ubda=Debian-4.0-x86-root_fs mem=512M
実行するとUMLが利用できるはず、次にgdbを使いゲストOSであるUMLをデバッグを行う。
手順は次のように行う。
1. Emacsを立ち上げAlt-x gdbでgdbを立ち上げ
2. 立ち上げたgdbのプロセスIDをメモする。
$ ps -C gdb PID TTY TIME CMD 21701 pts/6 00:00:00 gdb
3. UMLの起動時の引数にgdb-pid=gdbのプロセスIDを指定し、UMLを実行する。
$ ./vmlinux ubda=Debian-4.0-x86-root_fs mem=512M gdb-pid=21701
4. UMLのプロセスIDをメモする。たくさん表示されるが最初の一つだけでいい。
$ ps -C vmlinux PID TTY TIME CMD 22610 pts/1 00:00:02 vmlinux 22616 pts/1 00:00:00 vmlinux 22617 pts/1 00:00:00 vmlinux 22618 pts/1 00:00:00 vmlinux 22619 pts/1 00:00:00 vmlinux 23190 pts/1 00:00:00 vmlinux 23200 pts/1 00:00:00 vmlinux 23232 pts/1 00:00:00 vmlinux 23277 pts/1 00:00:00 vmlinux 23281 pts/1 00:00:00 vmlinux
5. Emacsのgdbモードでattachの引数にUMLのプロセスIDを指定する。アッタチ後はいつもの様にnext, step実行でプログラムを実行することができる。デバッグを抜けたいならdettachを実行することにより、元の状態に戻る。
(gdb) attach 22610