Hi Andreas,
Thanks for asking, I figure it is time to start organising some of my notes.
This is what I've got so far, perhaps you'll find something in them?
*****************************************************************************************************************
Using PCI devices in a driver domain (a privileged domU?)
====================================================================
The examples below use the following domains.
wench: dom0 on P3/650 on Asus P2BVM, 512MB RAM
"Production" Xen Server
brutus: dom0 on P2/350 on Asus P2B, 192MB ECC RAM
"Development" Xen Server
BluetoothProxy: domU on wench (in use)
XenFirewall: domU on brutus (WIP)
These notes are mostly to clean up my own documentation, and they
_hopefully_ contain
all the information I need to repeat the process.
It is not necessarily HOWTO CREATE DRIVER DOMAINS, but how I got mine to
work.
1. Hide the device from the hypervisor (dom0)
EXAMPLE A: brutus
-----------------------------
This machine has a hidden USB Host Controller, and two network cards,
(the second) one being hidden from brutus.
It has a custom initrd as the root is on LVM.
brutus:~# lspci
0000:00:00.0 Host bridge: Intel Corp. 440BX/ZX/DX - 82443BX/ZX/DX Host
bridge (rev 03)
0000:00:01.0 PCI bridge: Intel Corp. 440BX/ZX/DX - 82443BX/ZX/DX AGP
bridge (rev 03)
0000:00:04.0 ISA bridge: Intel Corp. 82371AB/EB/MB PIIX4 ISA (rev 02)
0000:00:04.1 IDE interface: Intel Corp. 82371AB/EB/MB PIIX4 IDE (rev 01)
0000:00:04.3 Bridge: Intel Corp. 82371AB/EB/MB PIIX4 ACPI (rev 02)
0000:00:0b.0 Ethernet controller: 3Com Corporation 3c905B 100BaseTX
[Cyclone] (rev 30)
0000:01:00.0 VGA compatible controller: Silicon Integrated Systems [SiS]
86C326 5598/6326 (rev 0b)
brutus:~# tail /boot/grub/menu.lst
title Debian Xen
root (hd0,0)
kernel /xen-2.0-testing.gz dom0_mem=81920 root=/dev/ram0
lvm2root=/dev/mapper/vg0-root physdev_dom0_hide=(00:0c.0)(00:04:2) ro
console=tty0 noreboot
module /vmlinuz-2.6.11.12-xen0 root=/dev/mapper/vg0-root
console=tty0 ro noreboot
module /initrd.img-2.6.11.12-xen0
savedefault
boot
EXAMPLE B: wench
------------------------------
This machine has a hidden USB host controller
wench:~# lspci
0000:00:00.0 Host bridge: Intel Corporation 440BX/ZX/DX - 82443BX/ZX/DX
Host bridge (rev 03)
0000:00:01.0 PCI bridge: Intel Corporation 440BX/ZX/DX - 82443BX/ZX/DX
AGP bridge (rev 03)
0000:00:06.0 Multimedia audio controller: ESS Technology ES1969 Solo-1
Audiodrive (rev 01)
0000:00:07.0 ISA bridge: Intel Corporation 82371AB/EB/MB PIIX4 ISA (rev 02)
0000:00:07.1 IDE interface: Intel Corporation 82371AB/EB/MB PIIX4 IDE
(rev 01)
0000:00:07.3 Bridge: Intel Corporation 82371AB/EB/MB PIIX4 ACPI (rev 02)
0000:00:0b.0 Ethernet controller: 3Com Corporation 3c905B 100BaseTX
[Cyclone] (rev 64)
0000:01:00.0 VGA compatible controller: ATI Technologies Inc 3D Rage IIC
AGP (rev 7a)
wench:~# tail /boot/grub/menu.lst
title Xen 2 - Kernel 2.6.11.12
root (hd0,0)
#kernel /xen-2.0-testing.gz dom0_mem=131072 root=/dev/hda3 ro
console=tty0
kernel /xen-2.0-testing.gz dom0_mem=131072 root=/dev/hda3 ro
console=tty0 physdev_dom0_hide=(00:07.2)
# Marcus appends phys_hide option so BluetoothProxy domU
can have USB Host Controller
module /vmlinuz-2.6.11.12-xen0 root=/dev/hda3 ro console=tty0
savedefault
boot
====================================================================
2. Configure kernel (& modules) for the driver domain
EXAMPLE A: Firewall on brutus
----------------------------------------------
brutus:~# egrep "XEN|PCI|NET|VORTEX"
/boot/config-2.6.11.12-XenFirewall | grep -v "#"
CONFIG_XEN=y
CONFIG_ARCH_XEN=y
CONFIG_XEN_PRIVILEGED_GUEST=y
CONFIG_XEN_PHYSDEV_ACCESS=y
CONFIG_XEN_BLKDEV_BACKEND=y
CONFIG_XEN_NETDEV_BACKEND=y
CONFIG_XEN_BLKDEV_FRONTEND=y
CONFIG_XEN_NETDEV_FRONTEND=y
CONFIG_XEN_WRITABLE_PAGETABLES=y
CONFIG_XEN_SCRUB_PAGES=y
CONFIG_XENARCH="i386"
CONFIG_PCI=y
CONFIG_PCI_DIRECT=y
CONFIG_PCI_LEGACY_PROC=y
CONFIG_PCI_NAMES=y
CONFIG_HOTPLUG_PCI=m
CONFIG_HOTPLUG_PCI_FAKE=m
CONFIG_NET=y
CONFIG_INET=y
CONFIG_NET_IPIP=m
CONFIG_NET_IPGRE=m
CONFIG_INET_TUNNEL=m
CONFIG_NETFILTER=y
CONFIG_BRIDGE_NETFILTER=y
CONFIG_IP_NF_TARGET_NETMAP=m
CONFIG_NET_SCHED=y
CONFIG_NET_SCH_CLK_JIFFIES=y
CONFIG_NET_SCH_CBQ=m
CONFIG_NET_SCH_HTB=m
CONFIG_NET_SCH_HFSC=m
CONFIG_NET_SCH_PRIO=m
CONFIG_NET_SCH_RED=m
CONFIG_NET_SCH_SFQ=m
CONFIG_NET_SCH_TEQL=m
CONFIG_NET_SCH_TBF=m
CONFIG_NET_SCH_GRED=m
CONFIG_NET_SCH_DSMARK=m
CONFIG_NET_SCH_NETEM=m
CONFIG_NET_SCH_INGRESS=m
CONFIG_NET_QOS=y
CONFIG_NET_ESTIMATOR=y
CONFIG_NET_CLS=y
CONFIG_NET_CLS_TCINDEX=m
CONFIG_NET_CLS_ROUTE4=m
CONFIG_NET_CLS_ROUTE=y
CONFIG_NET_CLS_FW=m
CONFIG_NET_CLS_U32=m
CONFIG_NET_CLS_IND=y
CONFIG_NET_CLS_RSVP=m
CONFIG_NET_CLS_RSVP6=m
CONFIG_NET_CLS_ACT=y
CONFIG_NET_ACT_POLICE=m
CONFIG_NET_ACT_GACT=m
CONFIG_NET_ACT_MIRRED=m
CONFIG_NET_ACT_IPT=m
CONFIG_NET_ACT_PEDIT=m
CONFIG_NETDEVICES=y
CONFIG_NET_ETHERNET=y
CONFIG_NET_VENDOR_3COM=y
CONFIG_VORTEX=m
CONFIG_NET_PCI=y
CONFIG_SECURITY_NETWORK=y
EXAMPLE B: BluetoothProxy on wench
----------------------------------------------
wench:~# egrep "XEN|PCI|USB|HCI|BT|VID"
/boot/config-2.6.11.12-BluetoothProxy | grep -v "#"
CONFIG_XEN=y
CONFIG_ARCH_XEN=y
CONFIG_XEN_PRIVILEGED_GUEST=y
CONFIG_XEN_PHYSDEV_ACCESS=y
CONFIG_XEN_BLKDEV_BACKEND=y
CONFIG_XEN_BLKDEV_FRONTEND=y
CONFIG_XEN_NETDEV_FRONTEND=y
CONFIG_XEN_WRITABLE_PAGETABLES=y
CONFIG_XEN_SCRUB_PAGES=y
CONFIG_XENARCH="i386"
CONFIG_PCI=y
CONFIG_PCI_DIRECT=y
CONFIG_PCI_LEGACY_PROC=y
CONFIG_PCI_NAMES=y
CONFIG_HOTPLUG_PCI=m
CONFIG_HOTPLUG_PCI_FAKE=m
CONFIG_BT=m
CONFIG_BT_L2CAP=m
CONFIG_BT_SCO=m
CONFIG_BT_RFCOMM=m
CONFIG_BT_RFCOMM_TTY=y
CONFIG_BT_BNEP=m
CONFIG_BT_BNEP_MC_FILTER=y
CONFIG_BT_BNEP_PROTO_FILTER=y
CONFIG_BT_HIDP=m
CONFIG_BT_HCIUSB=m
CONFIG_BT_HCIUSB_SCO=y
CONFIG_BT_HCIVHCI=m
CONFIG_VIDEO_DEV=m
CONFIG_USB=m
CONFIG_USB_DEVICEFS=y
CONFIG_USB_ARCH_HAS_HCD=y
CONFIG_USB_ARCH_HAS_OHCI=y
CONFIG_USB_UHCI_HCD=m
CONFIG_USB_STV680=m
====================================================================
3. Configuration of driver domain
wench:~# grep = /etc/xen/BluetoothProxy
#============================================================================
kernel = "/boot/vmlinuz-2.6.11.12-BluetoothProxy"
pci = ['00,7,2']
memory = 80
name = "BluetoothProxy"
disk = [ 'phy:/dev/vg0/BluetoothProxy,/dev/hda3,w']
root = "/dev/hda3 ro"
extra = "4"
restart = 'onreboot'
#============================================================================
====================================================================
4. Confirming results
EXAMPLE A: firewall on brutus
---------------------------------------------
tba
EXAMPLE B: BluetoothProxy on wench
----------------------------------------------------------
BluetoothProxy:~# lspci
0000:00:04.2 USB Controller: Intel Corp. 82371AB/EB/MB PIIX4 USB (rev 01)
(Yep, that's ALL it comes up with!:))
BluetoothProxy:~# lsmod
Module Size Used by
stv680 26060 0
ipt_MASQUERADE 2624 0
iptable_nat 19836 1 ipt_MASQUERADE
ip_conntrack 39224 2 ipt_MASQUERADE,iptable_nat
ip_tables 19904 2 ipt_MASQUERADE,iptable_nat
rfcomm 35132 0
bnep 12256 2
crc32 3808 1 bnep
l2cap 22340 9 rfcomm,bnep
videodev 7360 1 stv680
hci_usb 13928 2
bluetooth 44164 8 rfcomm,bnep,l2cap,hci_usb
uhci_hcd 30416 0
usbcore 107672 4 stv680,hci_usb,uhci_hcd
BluetoothProxy:~# lsusb
Bus 001 Device 004: ID 0553:0202 STMicroelectronics Imaging Division
(VLSI Vision) Aiptek PenCam 1
Bus 001 Device 003: ID 0db0:1967 Micro Star International Bluetooth Dongle
Bus 001 Device 001: ID 0000:0000
Using iPaq to connect to BluetoothProxy NAP service, we see:
BluetoothProxy:~# tail /var/log/syslog
Aug 2 20:31:08 localhost hcid[1739]: link_key_request
(sba=00:10:DC:E9:71:7C, dba=00:04:3E:A3:C7:73)
Aug 2 20:31:08 localhost pand[9838]: New connection from
00:04:3E:A3:C7:73 bnep0
Testing the camera with pencam2 (must remember to null out stv680 in
modules)
This is the look you give when it all just works:
http://marcusbrutus.cust.internode.on.net/Computers/Me/snapshot002
====================================================================
5. References
5.1 Driver Domain Configuration
The Xen Users' Manual, chapter 7.3
http://www.cl.cam.ac.uk/Research/SRG/netos/xen/readmes/user/user.html#SECTION03230000000000000000
Flat Format: Include a list of PCI device addresses of the format:
pci = ['x,y,z', ...]
where each element in the list is a string specifying the components of
the PCI device address, separated by commas. The components (x, y and z)
of the list may be formatted as either decimal or hexadecimal.
*****************************************************************************************************************
Andreas Seuss wrote:
> Hi Marcus,
>
> I read your mail on the Xen Users mailing list. What I try to achieve
> is to share a pci network interface card. I compiled a kernel
> according to your config shown below except that I used the NIC
> modules. I run xen-3.0 (devel). When I include the pci = ['00,08,00']
> statement into my config file I get the following error when trying to
> create the domain:
>
> Error: Error creating domain: global name 'bus' is not defined
>
> I also set the 'physdev_dom0_hide=(00:08.0)' in the menu list. Tried
> it on the kernel line and on the module line (not both on the same
> time;-))
> but it does not seem to work. I can still see all pci devices. Maybe
> xou could paste the respective line from your menu.lst?
The hide stanza goes in the kernel line.
Can you confirm the PCI ID with lspci in dom0?
>
> Which documentation did you use? The user manual? It contains only
> sparse information on that topic I think. Thanks in advance.
Yes, the user manual :) (see References above).
Not as verbose as my attempt, huh? :)
> Andreas.
>
>
> Marcus Brown wrote:
>
>> Heh,
>> ipaq turned off, bluez-utils not installed, no IRQ for USB... etc
>> sorry to trouble the list :) ... thanks for reading!!
>>
>> ie. PCI + USB working afaik (not fully tested but looks ok)
>>
>> M.
>>
>> Marcus Brown wrote:
>>
>>
>>
>>> OK, PCI export working now.
>>>
>>> Except that I still can't configure the bnep0 interface.
>>> Hot plugging seems to work, but dmesg gives:
>>> SIOCSIFADDR: No such device
>>> bnep0: ERROR while getting interface flags: No such device
>>> SIOCSIFNETMASK: No such device
>>> bnep0: ERROR while getting interface flags: No such device
>>> Failed to bring up bnep0.
>>>
>>> # lspci
>>> 0000:00:07.2 USB Controller: Intel Corp. 82371AB/EB/MB PIIX4 USB
>>> (rev 01)
>>> # lsusb
>>> Bus 001 Device 002: ID 0db0:1967 Micro Star International Bluetooth
>>> Dongle
>>> Bus 001 Device 001: ID 0000:0000
>>> # lsmod
>>> Module Size Used by
>>> bnep 12256 0
>>> crc32 3808 1 bnep
>>> l2cap 22340 1 bnep
>>> videodev 7360 0
>>> hci_usb 13928 0
>>> bluetooth 44164 3 bnep,l2cap,hci_usb
>>> uhci_hcd 30416 0
>>> usbcore 107672 3 hci_usb,uhci_hcd
>>>
>>> Any suggestions?
>>>
>>> (Yes, I talk to myself in the blue room too !! :))
>>>
>>> Marcus Brown wrote:
>>>
>>>
>>>
>>>
>>>
>>>> Dear, oh dear!!
>>>>
>>>> pci = ['00,07,2'] in domU config!!!
>>>> (I'm going blind, I think)
>>>>
>>>> doh!
>>>>
>>>> lol
>>>>
>>>> Marcus Brown wrote:
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>> Hi all.
>>>>>
>>>>> I've been attempting to export the USB Host Controller to a domU,
>>>>> so that I can use a USB Bluetooth adapter (and possibly a USB
>>>>> camera).
>>>>> I've been using xen-testing on Debian (dom0 is sid, domU is sarge)
>>>>>
>>>>> I've managed to get the domU to boot using a few of the following
>>>>> settings:
>>>>>
>>>>> The kernel line in grub's menu.lst now includes:
>>>>> physdev_dom0_hide=(00:07.2)
>>>>> The domU kernel config has:
>>>>> XEN --->
>>>>> [*] Physical device access
>>>>> [*] Block-device backend driver
>>>>> [ ] Network-device backend driver
>>>>> X86 Processor Configuration --->
>>>>> Bus options (PCI, PCMCIA, EISA, MCA, ISA) --->
>>>>> [*] PCI support
>>>>> [*] Legacy /proc/pci interface
>>>>> [*] PCI device name database
>>>>> Device Drivers --->
>>>>> Networking support --->
>>>>> <M> Bluetooth subsystem support --->
>>>>> --- Bluetooth subsystem support
>>>>> <M> L2CAP protocol support
>>>>> <M> SCO links support
>>>>> <M> RFCOMM protocol support
>>>>> [*] RFCOMM TTY support
>>>>> <M> BNEP protocol support
>>>>> [*] Multicast filter support
>>>>> [*] Protocol filter support
>>>>> <M> HIDP protocol support
>>>>> Bluetooth device drivers --->
>>>>> <M> HCI USB driver
>>>>> [*] SCO (voice) support
>>>>> <M> HCI VHCI (Virtual HCI device) driver
>>>>> Device Drivers --->
>>>>> Multimedia devices --->
>>>>> <M> Video For Linux
>>>>> USB support --->
>>>>> <M> Support for Host-side USB
>>>>> [*] USB device filesystem
>>>>> <M> UHCI HCD (most Intel and VIA) support
>>>>> <M> USB STV680 (Pencam) Camera support
>>>>>
>>>>> After booting the domU, the USB modules can be loaded manually,
>>>>> however, there are no PCI devices found, or USB devices listed.
>>>>>
>>>>> I have come to the conclusion (from the xen-users manual) that my
>>>>> xend-config.sxp is in error. I've tried appending:
>>>>> (backend (blkif))
>>>>> (device (pci (bus 00) (dev 07) (func 2)))
>>>>>
>>>>> (this could explain why I now get errors from 'xm list -v' now:))
>>>>>
>>>>> but during boot of the domU I still get the following:
>>>>> Starting hotplug subsystem:
>>>>> pci
>>>>> cat: /sys/bus/pci/devices/*/class: No such file or directory
>>>>> cat: /sys/bus/pci/devices/*/vendor: No such file or directory
>>>>> cat: /sys/bus/pci/devices/*/device: No such file or directory
>>>>> cat: /sys/bus/pci/devices/*/subsystem_vendor: No such file or
>>>>> directory
>>>>> cat: /sys/bus/pci/devices/*/subsystem_device: No such file or
>>>>> directory
>>>>> Bad PCI agent invocation
>>>>>
>>>>> Can anyone see something obviously wrong here?
>>>>> The users manual talks about placing these options
>>>>> "somewhere within the vm element of its configuration"
>>>>> but I'm unable to find information on how to do this.
>>>>>
>>>>> Thanks for any pointers,
>>>>>
>>>>> Marcus.
>>>>>
>>>>> _______________________________________________
>>>>> Xen-users mailing list
>>>>> Xen-users@xxxxxxxxxxxxxxxxxxx
>>>>> http://lists.xensource.com/xen-users
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>
>>>> _______________________________________________
>>>> Xen-users mailing list
>>>> Xen-users@xxxxxxxxxxxxxxxxxxx
>>>> http://lists.xensource.com/xen-users
>>>>
>>>>
>>>>
>>>>
>>>
>>> _______________________________________________
>>> Xen-users mailing list
>>> Xen-users@xxxxxxxxxxxxxxxxxxx
>>> http://lists.xensource.com/xen-users
>>>
>>>
>>>
>>
>>
>> _______________________________________________
>> Xen-users mailing list
>> Xen-users@xxxxxxxxxxxxxxxxxxx
>> http://lists.xensource.com/xen-users
>>
>>
>
_______________________________________________
Xen-users mailing list
Xen-users@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-users
|