Why this flash drive not detected in devd?
Sagara Wijetunga
sagara at tomahawk.com.sg
Sat Jul 11 11:54:25 UTC 2009
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
More information about the freebsd-questions
mailing list