Date: Sat, 11 Jul 2009 03:36:09 -0500 From: "Sagara Wijetunga" <sagara@tomahawk.com.sg> To: Roland Smith <rsmith@xs4all.nl> Cc: freebsd-questions@freebsd.org Subject: Re: Why this flash drive not detected in devd? Message-ID: <20090711083609.32515.qmail@us1.tomahawkonline.net> In-Reply-To: <20090710184945.GA4323@slackbox.xs4all.nl> References: <4A560B28.6080705@tomahawk.com.sg> <20090709165927.GB63043@slackbox.xs4all.nl> <20090710014128.13958.qmail@us1.tomahawkonline.net> <20090710184945.GA4323@slackbox.xs4all.nl>
next in thread | previous in thread | raw e-mail | index | archive | help
Roland Smith writes: > On Thu, Jul 09, 2009 at 08:41:28PM -0500, Sagara Wijetunga wrote: >> Roland Smith writes: >> >> On Thu, Jul 09, 2009 at 11:22:16PM +0800, Sagara Wijetunga wrote: >> >> Hi FreeBSD community >> >> This is FreeBSD 7.2 on i386. >> >> sysctl -a | grep dev.umass >> dev.umass.1.%desc: Imation Flash Drive, class 0/0, rev 2.00/1.03, addr 3 >> dev.umass.1.%driver: umass >> dev.umass.1.%location: port=6 interface=0 >> dev.umass.1.%pnpinfo: vendor=0x0718 product=0x0081 devclass=0x00 devsubclass=0x00 >> release=0x0103 sernum="14925B00" intclass=0x08 intsubclass=0x06 >> dev.umass.1.%parent: uhub4 >> >> Following added to /etc/devd.conf: >> 1. Imation Flash Drive, class 0/0, rev 2.00/1.03, addr 3 >> attach 200 { >> match "vendor" "0x0718"; >> match "product" "0x0081"; >> match "serial" "14925B00"; >> action "touch /tmp/Imation-Flash-Drive-detected"; >> }; >> >> Could I know why the flash drive is not detected on attach? >> >> The USB subsystem isn't currently equipped to notify devd (technically, >> the devctl_notify function isn't used in the USB stack). So the only >> notification you'll get is when devfs creates a device. Since there is >> no predictable link between a USB device and a disk device, info from >> the USB stack would be less then usefull. >> >> You can check this by reading from /dev/devctrl (when devd is not >> running, since this device can only be opened by one program at a time) >> just after you plugged in the device. For my usb thumbdrive I get: >> >> cat /dev/devctl >> !system=DEVFS subsystem=CDEV type=CREATE cdev=pass2 >> !system=DEVFS subsystem=CDEV type=CREATE cdev=da0 >> !system=DEVFS subsystem=CDEV type=CREATE cdev=da0s1 >> !system=DEVFS subsystem=CDEV type=CREATE cdev=msdosfs/RFS1 >> >> While sysctl gives: >> >> dev.umass.0.%desc: vendor 0x3538 USB Mass Storage Device, class 0/0, rev 2.00/1.00, addr 2 >> dev.umass.0.%driver: umass >> dev.umass.0.%location: port=4 interface=0 >> dev.umass.0.%pnpinfo: vendor=0x3538 product=0x0042 devclass=0x00 devsubclass=0x00 release=0x0100 >> sernum="000000000004E1" intclass=0x08 intsubclass=0x06 >> dev.umass.0.%parent: uhub4 >> >> So for now, you'll have to match on the creation of da* devices, or >> labels if you use those. >> >> Roland, thanks for the reply. >> >> Here is my side info on FreeBSD 7.2: >> cat /dev/devctl >> ? at port=6 vendor=0x0718 product=0x0081 devclass=0x00 devsubclass=0x00 release=0x0103 >> sernum="14925B00" on uhub4 > > The "?" means "Unknown device detected". See devctl(4). This is _not_ > noticed be devd, I think > >> +umass1 vendor=0x0718 product=0x0081 devclass=0x00 devsubclass=0x00 release=0x0103 >> sernum="14925B00" intclass=0x08 intsubclass=0x06 at port=6 interface=0 vendor=0x0718 >> product=0x0081 devclass=0x00 devsubclass=0x00 release=0x0103 sernum="14925B00" intclass=0x08 >> intsubclass=0x06 on uhub4 > > Note that while "+" denotes a device creation event, it is for umass1, > not for a disk device. > >> !system=DEVFS subsystem=CDEV type=CREATE cdev=pass4 >> !system=DEVFS subsystem=CDEV type=CREATE cdev=da4 >> !system=DEVFS subsystem=CDEV type=CREATE cdev=da4s1 >> !system=DEVFS subsystem=CDEV type=CREATE cdev=msdosfs/ >> >> I have few questions: >> 1. Above shows info we need available under '?' and '+' lines. What >> we need is vendor, product and sernum. Can these be accessed in >> addition to cdev? > > Not currently. The hooks into the USB subsystem are missing. > > But even if they were there, that info is not very usefull in > itself. You also need to know the disk device number that the USB drive > gets! If there were hooks in the USB system, you would get _multiple_ > events in devd: > > 1) USB device plugged in. (serial no etc...) > 2) pass device created by devfs > 3) da devices created by devfs > 4) msdodfs/ devices created by devfs. > > So you would need to remember the first event until the device creation > happens. Devd itself has no facilities for that. Sure, you can cobble > something together with tempoeary files etc., but that would be fragile. > > And as I've said before, there is no one-on-one link between a USB > device that gets plugged in and the disk device that is assigned to it! > >> 2. Is this issue been fixed in FreeBSD 8.0? > > I don't know. The USB stack was rewritten for 8.0. Ask on the -current > or -hackers list. > >> 3. Can you or someone think of a patch against FreeBSD 7.2 to provide >> vendor, product and sernum in addition to cdev? It's very big help >> someone could extend to us to release Tomahawk Desktop > > As I explained above, this would not accomplish what you want. > > Again, maybe you should check out sysutils/hal. > I prefer to handle mounting through an automounter even without KDE running. Could I know which program print following lines to the /dev/devctl: !system=DEVFS subsystem=CDEV type=CREATE cdev=pass4 !system=DEVFS subsystem=CDEV type=CREATE cdev=da4 !system=DEVFS subsystem=CDEV type=CREATE cdev=da4s1 !system=DEVFS subsystem=CDEV type=CREATE cdev=msdosfs/ Is there a way in FreeBSD 7.2 to know what devices (eg. da0, da1, etc) are attached to a given USB driver (umass0, umass1, etc)? Regards Sagara
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20090711083609.32515.qmail>