Hatena::Diary

日々反省 Twitter

2010-12-12 KVMでPT2

PT2をPCIパススルーしてKVMのWindowsXPゲストで使う

もうだいぶの前ことなんだけど、忘れないうちにメモ。

必要なもの

  • VT-d Enableなマシン
  • PT2
  • SCR3310-NTTCom

カードリーダーはWindowsで使えればなんでもいいと思う。

BonCasProxyとかでもいいんじゃないかな。


ホスト(Fedora 14)でロードされている不要なドライバをアンロードする。

ゲストで使うPCIデバイスにホスト側でドライバがロードされているとゲスト側で認識できてもうまく動作しません。

最近のカーネルだとDVB版のPT2ドライバカーネルに統合されてます。

ゲストで使うには邪魔なのでrmmodします。


ここで注意点がひとつ。

PT2はPCIのカードなので最近のマザーだとPCIe-PCIブリッジの下にぶら下がっています。

私の使っているマザーだと以下のような感じ。

lspci -tv
 -[0000:00]-+-00.0  Intel Corporation 82Q35 Express DRAM Controller
            +-02.0  Intel Corporation 82Q35 Express Integrated Graphics Controller
            +-1a.0  Intel Corporation 82801I (ICH9 Family) USB UHCI Controller #4
            +-1a.1  Intel Corporation 82801I (ICH9 Family) USB UHCI Controller #5
            +-1a.7  Intel Corporation 82801I (ICH9 Family) USB2 EHCI Controller #2
            +-1b.0  Intel Corporation 82801I (ICH9 Family) HD Audio Controller
            +-1c.0-[05]----00.0  Adaptec AAC-RAID
            +-1c.4-[0d]----00.0  Intel Corporation 82573V Gigabit Ethernet Controller (Copper)
            +-1c.5-[0f]----00.0  Intel Corporation 82573L Gigabit Ethernet Controller
            +-1d.0  Intel Corporation 82801I (ICH9 Family) USB UHCI Controller #1
            +-1d.1  Intel Corporation 82801I (ICH9 Family) USB UHCI Controller #2
            +-1d.2  Intel Corporation 82801I (ICH9 Family) USB UHCI Controller #3
            +-1d.3  Intel Corporation 82801I (ICH9 Family) USB UHCI Controller #6
            +-1d.7  Intel Corporation 82801I (ICH9 Family) USB2 EHCI Controller #1
            +-1e.0-[11]--+-08.0  Integrated Technology Express, Inc. IT8213 IDE Controller
            |            \-09.0  Xilinx Corporation Device 222a
            +-1f.0  Intel Corporation 82801IR (ICH9R) LPC Interface Controller
            +-1f.2  Intel Corporation 82801IR/IO/IH (ICH9R/DO/DH) 6 port SATA AHCI Controller
            +-1f.3  Intel Corporation 82801I (ICH9 Family) SMBus Controller
            \-1f.6  Intel Corporation 82801I (ICH9 Family) Thermal Subsystem

"Xilinx Corporation Device 222a"がPT2です。11:09.0がゲスト起動時に指定するIDです。

ツリー形式で見るとIT8213というIDEコントローラが同じブリッジにぶら下がっているのがわかります。

こいつのドライバもアンロードしてやらないと使えません。


で、何をアンロードするかを見ます。

lspci -vv -s 11:08.0
11:08.0 IDE interface: Integrated Technology Express, Inc. IT8213 IDE Controller (prog-if 85 [Master SecO PriO])
        Subsystem: Integrated Technology Express, Inc. IT8213 IDE Controller
        Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx-
        Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=medium >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-</pp>
        Latency: 64 (2000ns min, 2000ns max)
        Interrupt: pin A routed to IRQ 11
        Region 0: I/O ports at 4020 [size=8]
        Region 1: I/O ports at 4014 [size=4]
        Region 2: I/O ports at 4018 [size=8]
        Region 3: I/O ports at 4010 [size=4]
        Region 4: I/O ports at 4000 [size=16]
        Capabilities: [80] Power Management version 2
                Flags: PMEClk- DSI- D1- D2- AuxCurrent=0mA PME(D0-,D1-,D2-,D3hot-,D3cold-)
                Status: D0 NoSoftRst- PME-Enable- DSel=0 DScale=0 PME-
        Kernel modules: ata_generic, pata_acpi, pata_it8213

ata_generic, pata_acpi, pata_it8213が該当のドライバになるのでこいつらもrmmodしてやります。

ここは使っているマザーによりけりなので該当するものをアンロードしてやってください。


しかし起動時に毎回読まれてしまうものなので毎度rmmodするのも面倒ですしblacklistに追加。

/etc/modprobe.d/blacklist.conf

blacklist pata_it8213

blacklist pata_acpi

blacklist ata_generic

blacklist earth-pt1

ただし、この手のIDEコントローラーのドライバはinitrdに含まれているのでinitrdを作り直してやらないと起動時に毎回読まれてしまいます。

ちなみにblacklistに追加した後であればカーネルの更新時には勝手にinitrdからは削除してくれます。


以上でPT2の準備は終わり。

ICカードリーダーの準備

まずpcscdが動いていたら止めます。

/etc/init.d/pcscd stop

chkconfig pcscd off

これをやっておかないとゲスト起動時にホスト側でpcscdのエラーが大量に吐かれて/varがものすごい勢いで埋まります。


USBデバイスの確認

lsusb
Bus 008 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 007 Device 003: ID 04e6:511a SCM Microsystems, Inc.
Bus 007 Device 002: ID 046d:c041 Logitech, Inc. G5 Laser Mouse
Bus 007 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 006 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 005 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 004 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 003 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

"SCM Microsystems, Inc."がSCR3310-NTTComです。

04e6:511aがゲスト起動時に指定するIDになります。


ゲスト起動

/usr/bin/qemu-kvm -enable-kvm -rtc base=localtime -name recpt2 -cpu qemu32 -smp 1,sockets=1,cores=1,threads=1 -m 1024 -drive file=/kvmfs/recpt2/recpt2.raw,if=none,id=drive-virtio-disk0,format=raw,cache=none,boot=on -device virtio-blk-pci,bus=pci.0,addr=0x6,drive=drive-virtio-disk0,id=virtio-disk0 -drive file=/kvmfs/recpt2/recdata.raw,if=none,id=drive-virtio-disk1,format=raw,cache=none -device virtio-blk-pci,bus=pci.0,addr=0x8,drive=drive-virtio-disk1,id=virtio-disk1 -device virtio-net-pci,vlan=20,id=net0,mac=52:54:00:ff:00:01,bus=pci.0,addr=0x3 -net tap,vlan=20,ifname=tap01,name=hostnet0,vhost=on -device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x4 -drive if=none,media=cdrom,id=drive-ide0-1-0,readonly=on,format=raw -device ide-drive,bus=ide.1,unit=0,drive=drive-ide0-1-0,id=ide0-1-0 -k ja -chardev pty,id=serial0 -device isa-serial,chardev=serial0 -vga qxl -spice port=5901,disable-ticketing -device virtio-serial,bus=pci.0,addr=0x7 -device spicevmc,subtype=vdagent -device AC97,id=sound0,bus=pci.0,addr=0x5 -boot c -daemonize -chardev socket,id=monitor,host=127.0.0.1,port=4001,server,nowait -mon chardev=monitor,mode=readline -pidfile /var/run/qemu/recpt2.pid -pcidevice host=11:09.0,name=pci-pt2 -usbdevice host:04e6:511a

相変わらず長ったらしいですが大事なのは以下

-pcidevice host=11:09.0,name=pci-pt2

-usbdevice host:04e6:511a

これでゲストでPT2とICカードリーダーが使えるようになります。

f:id:asimofu:20101212203150p:image

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証

トラックバック - http://d.hatena.ne.jp/asimofu/20101212/1292153566
おとなり日記