devd automatic conversion of umass[0-9] to da[0-9]

Julian Stacey jhs at berklix.org
Wed May 6 22:09:50 UTC 2009


Andriy Gapon wrote:
> on 06/05/2009 18:27 Julian Stacey said the following:
> > Config below works for a number of memory sticks simultaneously;
> > But if one already has a dvd burner plugged in, 
> > then it fails as devd sees (in case of a first memory stick) a new umass1. 
> > Although /dev/da0* get created, devd tries to access non existant da1*.  
> > Any ideas how to improve this ? ( Using 7.1-RELEASE )
> 
> You could try to watch for cdev events (i.e. creation of daX device nodes) instead
> of driver events. But I am not sure if cdev events are in 7.1, they are definitely
> in 7.2:
> 
> notify 1000 {
>         match   "system"                "DEVFS";
>         match   "subsystem"             "CDEV";
>         match   "type"                  "CREATE";
>         match   "cdev"                  "^da[0-9]+$";
>         action  "echo 't120o3l32 b>c+f+16' > /dev/speaker";
> };

Thanks Andriy,
cdev seems to be in 7.1, 
but I switched to test on a 7.2-RELEASE host:
It did not work.

cdev is not set at attach time. only available later, as shown below:

With conf:
  ----------
  action  "sleep 2; \
         rm -f /devusb/kingston; touch /tmp/devd-debug/xx.$cdev ; \
         ln -s /dev/`echo $device-name|sed -e s/umass/da/`a     \
                /devusb/kingston; \
         fsck -y -t ufs /devusb/kingston; \
         mount -t ufs -o noatime /devusb/kingston /usb/kingston" ;
        };
  ----------

Devd output:
  Executing 'sleep 2; rm -f /devusb/kingston; touch /tmp/devd-debug/xx. ;
	 ln -s /dev/`echo umass0|sed -e s/umass/da/`a    /devusb/kingston;
	 fsck -y -t ufs /devusb/kingston;
	 mount -t ufs -o noatime /devusb/kingston /usb/kingston'
  ** /devusb/kingston
  ** Last Mounted on /usb/kingston
  ** Phase 1 - Check Blocks and Sizes
  ** Phase 2 - Check Pathnames
  ** Phase 3 - Check Connectivity
  ** Phase 4 - Check Reference Counts
  ** Phase 5 - Check Cyl groups
  2 files, 1 used, 242418 free (18 frags, 30300 blocks, 0.0% fragmentation)
  Popping table
  Processing event '!system=DEVFS subsystem=CDEV type=CREATE cdev=pass1'
  Pushing table
  setting system=DEVFS
  setting subsystem=CDEV
  setting type=CREATE
  setting cdev=pass1
  Processing notify event
  Popping table
  Processing event '!system=DEVFS subsystem=CDEV type=CREATE cdev=da0'

ls -l /tmp/devd-debug
  -rw-r--r--  1 root  wheel    0 May  6 22:52 xx.

Using your idea of alternate conf with notify instead of attach:

  notify 1000 {
         match   "system"                "DEVFS";
         match   "subsystem"             "CDEV";
         match   "type"                  "CREATE";
         match   "cdev"                  "^da[0-9]+$";
         action  "touch /tmp/devd-debug/xx.cdev.$cdev \
                /tmp/devd-debug/xx.vendor.$vendor" ;
        };
ls -l /tmp/devd-debug
  -rw-r--r--  1 root  wheel    0 May  6 23:56 xx.cdev.da0
  -rw-r--r--  1 root  wheel    0 May  6 23:56 xx.vendor.

In case of notigy, devd has the reverse of attach:
	$cdev is now set & available,
	$vendor is not available.

I want to have all of $vendor, $product $sernum etc _And_ $cdev
so I can automatically mount sticks to known paths
( sticks being inserted at random timing relative to each other,
& not doing anything dirty with eg which port connected ).

Anyone got ideas how to achieve this ?

Cheers,
Julian
-- 
Julian Stacey: BSDUnixLinux C Prog Admin SysEng Consult Munich www.berklix.com
  Mail plain ASCII text.  HTML & Base64 text are spam. www.asciiribbon.org


More information about the freebsd-usb mailing list