昨晩の qemu な話を受けて確認してみた

受けて、っても記録も途中までの上、記憶も無いので色々確認しつつ。
とりあえず素で configure 実行して Makefile を吐きだしてみた。

$ ./configure

Makefile が出てますが

$ ls Makefile*
Makefile  Makefile.hw  Makefile.target  Makefile.user
$

なんとなく微妙。ただ、Makefile.target には以下な記述がありますね。

# Hardware support
obj-i386-y = ide/core.o ide/qdev.o ide/isa.o ide/pci.o ide/piix.o
obj-i386-y += pckbd.o $(sound-obj-y) dma.o
obj-i386-y += vga.o vga-pci.o vga-isa.o
obj-i386-y += fdc.o mc146818rtc.o serial.o i8259.o i8254.o pcspk.o pc.o
obj-i386-y += cirrus_vga.o apic.o ioapic.o parallel.o acpi.o piix_pci.o
obj-i386-y += usb-uhci.o vmmouse.o vmport.o vmware_vga.o hpet.o
obj-i386-y += device-hotplug.o pci-hotplug.o smbios.o wdt_ib700.o
obj-i386-y += ne2000-isa.o

これが正にデバイスを云々な箇所なのか。あるいは hw ディレクトリの中を見てみたら serial.c というファイルがある。ファイル先頭のコメントが以下なカンジ。

/*
 * QEMU 16550A UART emulation
 *

メモと照らし合わせてみるに、昨日はどうもこれを追加したのではないかと類推。obj-i386-y には serial.o なオブジェクトファイルは追加されてないですし。

target-list

どうも configure 実行時に target-list なオプションを追加しないとアレなのかどうか。あら、i386-softmmu というディレクトリの中身を見てたらデバイスなオブジェクトファイルやら Makefile.target と ln なアレとかがありますね。
でびあんなソースを取得してみます。

$ apt-get source qemu-system

何故か qemu_linaro* というナニがあります。debian/rules 見たところでは --target-list なナニは以下らしい。

$ find|xargs grep 'target-list'
./rules:                    --target-list="x86_64-softmmu i386-softmmu x86_64-linux-user i386-linux-user" \
$

うーん、ちょっとこのあたり継続して確認入れてみます。ちなみに手元の端末に入ってる qemu-system パケジは以下をカバーしている模様。

/usr/bin/qemu-system-cris
/usr/bin/qemu-system-mips64
/usr/bin/qemu-system-mipsel
/usr/bin/qemu-system-sparc
/usr/bin/qemu-system-sparc64
/usr/bin/qemu-system-sh4
/usr/bin/qemu-system-ppc64
/usr/bin/qemu-system-ppc
/usr/bin/qemu-system-m68k
/usr/bin/qemu-system-arm
/usr/bin/qemu-system-ppcemb
/usr/bin/qemu-system-sh4eb
/usr/bin/qemu-system-microblaze
/usr/bin/qemu-system-mips64el
/usr/bin/qemu-system-mips

それにしても昨晩のソレは単純に UART な仮想デバイスを追加する、というナニだったんですが、そもそも仮想デバイス自体を作っちゃえ的ソレを思うとはるか彼方、なカンジがしてます。
例えば hw/i8259.c あたりを読んでみる、とかアレかもしれませんね。
とりあえずこちらはこの程度でおさめておいて simh のソースを取得して割り込みやらトラップ云々の挙動な定義を確認してみます。

最後に

昨晩のメモを以下に列挙しときます。

  • 色々話をします。0.12.1 のソースを見ます。深いところまではツッコマないです。
  • CPU エミュレーションの部分
  • システムのエミュなのでデバイスを付けないとアレ。全体で云々てのが重要。
  • ハード追加にフォーカスします。
  • hw というフォルダがある。分かりやすいのは uart かな。RS232C
  • てきとーにハードウェアをいっこ作ってみましょうね。

ここで切れているのが非常に悲しくもありorz