poll(2)ing or select(2)ing /dev/usb0

Hans Petter Selasky hselasky at c2i.net
Wed May 25 09:37:33 GMT 2005


On Tuesday 24 May 2005 22:52, Dirk GOUDERS wrote:
>  > You cannot read data from /dev/usbN, only ioctls are possible on those
>  > devices.
>  >
>  > See "/sys/dev/usb/usb.c" (usbpoll), if you got the source code
>  > installed.
>
> Ah yes, thank you, now I understand why my programs behave like they do.
>
> To me, it looks as if the manual page usb(4) is a little bit misleading:
>
> <excerpt>
> USB CONTROLLER INTERFACE
>      Use the following to get access to the USB specific structures and
>      defines.
>
>      The /dev/usbN can be opened and a few operations can be performed on
> it. The poll(2) system call will say that I/O is possible on the controller
> device when a USB device has been connected or disconnected to the bus.
>
>      The following ioctl(2) commands are supported on the controller
> device: </excerpt>
>
> I understood the text in the following way:
>
> "If you want to know if a device has been connected/disconnected, then
>  call poll(2) on /dev/usbN and if poll(2) says that descriptors are
>  ready, perform one of the ioctl(2) command to find out what exactly
>  happened."
>
>
> Well, do I understand it right, that the only way to use poll(2) to
> come to know if a device has been connected/disconnected to/from the
> bus is to poll(2) /dev/usb (the event interface)?  

right

> And therefore on a 
> machine that runs usbd(8), no other process can use poll(2), to come to
> know about such events, but has to do it somehow else?

If you want to do something special then you might want to modify 
"/usr/src/usr.sbin/usbd/usbd.c", if you got the sources installed.

If you just want to start a program when a device has been attached or 
detached, there is "/etc/devd.conf" (or "/etc/usbd.conf", which is 
depreceated). These configuration files do almost the same.

I'm not sure exactly when, but in FreeBSD-6-current, USB product and vendor 
ID's get printed to "pnpinfo" (sysctl -a | grep pnpinfo), and can be matched 
in "/etc/devd.conf". If there is no "pnpinfo" for your USB devices, then you 
might have to use "/etc/usbd.conf" until further, though that file will be 
replaced by "/etc/devd.conf".

--HPS


More information about the freebsd-usb mailing list