WARNING - OLD ARCHIVES

This is an archived copy of the Xen.org mailing list, which we have preserved to ensure that existing links to archives are not broken. The live archive, which contains the latest emails, can be found at http://lists.xen.org/
   
 
 
Xen 
 
Home Products Support Community News
 
   
 

xen-users

Re: [Xen-users] using USB Host Controller in domU

To: Andreas Seuss <seuss@xxxxxxxxxx>
Subject: Re: [Xen-users] using USB Host Controller in domU
From: Marcus Brown <marcusbrutus@xxxxxxxxxxxxxxxx>
Date: Tue, 02 Aug 2005 21:22:13 +1000
Cc: xen-users@xxxxxxxxxxxxxxxxxxx
Delivery-date: Tue, 02 Aug 2005 11:20:51 +0000
Envelope-to: www-data@xxxxxxxxxxxxxxxxxxx
In-reply-to: <42EF2751.9040702@xxxxxxxxxx>
List-help: <mailto:xen-users-request@lists.xensource.com?subject=help>
List-id: Xen user discussion <xen-users.lists.xensource.com>
List-post: <mailto:xen-users@lists.xensource.com>
List-subscribe: <http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-users>, <mailto:xen-users-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-users>, <mailto:xen-users-request@lists.xensource.com?subject=unsubscribe>
References: <42E5B788.3020006@xxxxxxxxxxxxxxxx> <42E5B9B1.2020100@xxxxxxxxxxxxxxxx> <42E5BC82.9050204@xxxxxxxxxxxxxxxx> <42E5D603.3040507@xxxxxxxxxxxxxxxx> <42EF2751.9040702@xxxxxxxxxx>
Sender: xen-users-bounces@xxxxxxxxxxxxxxxxxxx
User-agent: Debian Thunderbird 1.0.2 (X11/20050602)
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

<Prev in Thread] Current Thread [Next in Thread>