Como utilizar dispositivos de almacenamiento USB mass-storage en Linux 2.6


Atencion: este articulo esta en desarrollo y por su naturaleza de alpha es factible que presente bugs, sientanse libres de hacermelos saber.

autor: Cristian Ricardo Elias <[email protected]>

Tabla de contenidos
1-Introduccion
1.1-�Porque?

   
1.2-Finalidad
2-Requisitos
2.1-Requisitos generales

   
2.2-Requisitos de configuracion del kernel
3-Probando nodos
3.1-
Probando montaje de sistema de ficheros USB
    
3.2-Probando estadisticas necesarias en /proc
    
3.3-Probando el dispositivo
4-Montaje de dispositivos USB
     4.1-USB keys, USB pendrives, Flash-sticks, USB disks, etc.
          4.1.2-Particion unica
          4.1.3-Multiples particiones
          4.1.4-Montando dispositivos
          4.2-Montaje de Camaras digitales
5-Automontaje de dispositivos
6-�vos sos Dios?

1-Introduccion
Ya no necesitamos mas sistemas operativos comerciales para utilizar nuestros dispositivos usb. Ahora podemos utilizarlos y explotarlos al maximo en este sublime sistema operativo.

1.1-Porque?  --->
Porque este pibe me esta diciendo que hacer?
Bueno, sinceramente no se...,pero creo que por dos motivos principales:
1) Me parece que es hora de acabar con el mito de:
"Uh... si tenes Linux no te va a andar" y esta parece una buena forma de empezar.
2) Estoy aburrido, es sabado por la noche y hay nada en la TV

1.1-Finalidad  --->
Este articulo tiene como finalidad guiar al usuario con un vocabulario tecnico amistoso para hacer funcionar sus dispositivos de almacenamiento USB ( Memory Sticks como los que usan las camaras digitales, discos USB, pen drives o llaveros USB, etc  ) en Linux 2.6.

2-Requisitos  --->
Antes de ponernos a full con nuestros "juguetes"  USB tenemos que preparar nuestro sistema para

2.1-Requisitos generales  --->
*Dreamweb.com.ar aconseja utilizar una distribucion de Linux reciente con nucleo 2.6 por default. Yo personalmente recomiendo Gentoo.

*Un nucleo de la serie 2.6, Dreamweb.com.ar recomienda el nucleo 2.6.10 ya que no presenta ningun bug con respecto a los modulos competentes a este articulo

*devfs o udev. Dreamweb.com.ar recomienda utilizar udev por multiples motivos, entre los mas basicos e importantes:
+Udev es realmente peque�o, no tiene que estar corriendo todo el tiempo.
+Udev permite escribir reglas para personalizar los nombres de los dispositivos de manera permanente y  asi evitar  problemas y ganar comodidad.
+Udev solo muestra y crea los nodos para los dispositivos de acuerdo a nuestro sistema. Esto hace que el directorio /dev no contenga cientos de nodos innecesarios.
+Crea/borra archivos de dispositivo dinamicamente.
+Udev envia mensajes de tipo D-BUS para que otros programas sepan que dispositivos son creados y cuales removidos.

*hotplug-2004_01_05 o superior, Dreamweb.com.ar recomienda hotplug-2004_09_23
*libusb-0.1.8
*sysfs (viene por default en linux 2.6)
*sysfsutils-0.4.0 o superior, Dreamweb.com.ar recomienda sysfsutils-0.4.0
*udev-016 o superior, Dreamweb.com.ar recomienda udev-0.45

2.2-Requisitos de configuracion del kernel  --->
#Antes que nada soporte hotplug ( CONFIG_HOTPLUG=y )

#Soporte SCSI como modulo (scsi_mod), soporte de estadisticas SCSI en
/proc/scsi/ y soporte de disco SCSI como modulo (sd_mod).

    Device Drivers  --->
    SCSI device support  --->
<M> SCSI device support
[*]   legacy /proc/scsi/ support
<M>   SCSI disk support

#Soporte USB como modulo (usbcore); soporte de estadisticas USB en
/proc/bus/usb/devices/ y montaje USB en /proc/bus/usb/; y modulos de controladores USB 2.0 Alta velocidad EHCI, OHCI y UHCI [solo el UHCI es estrictamente necesario]; modulo USB Mass Storage (usb_storage) para poder utilizar SCSI en dispositivos USB.

    Device Drivers  --->
    USB support  --->
<M> Support for Host-side USB
[*]   USB device filesystem
<M> EHCI HCD (USB 2.0) support
<M> OHCI HCD support
<M> UHCI HCD (most Intel and VIA) support
<M> USB Mass Storage support

#Soporte para el sistema de ficheros ext2; soporte para sistema de ficheros MSDOS (msdos); soporte para sistema de ficheros "Virtual Fat" (vfat); systema de ficheros
/proc montado en /proc.

    File systems  --->
<*> Second extended fs support
    DOS/FAT/NT Filesystems  --->
<M> MSDOS fs support
<M> VFAT (Windows-95) fs support
    Pseudo filesystems  --->
[*] /proc file system support

3-Probando nodos  --->
El memory stick va a ser tomado como un dispositivo USB mass storage visto como un disco SCSI removible. En
/dev sera nombrado (sd?). Cuando varios dispositivos de esta naturaleza estan enchufados son nombrados /dev/sda, /dev/sdb, /dev/sdc, /dev/sdd, etc.
Por ejemplo cuando conectamos un memory stick y luego conectamos otro, el primero sera nombrado /dev/sda y el segundo
/dev/sdb. Al conectarlos las estadisticas estan en /proc/scsi/usb-storage/* (siendo * el numero de memory sticks enchufados o la cantidad de veces que se han enchufado)
Teniendo en cuenta que el stick va a ser nombrado
/dev/sda pasaremos a comprobar la existencia de estos nodos con:
#
ls /dev/sd*

En caso de que estos nodos no existan y el ls nos tire un:
No such file or directory
Tendremos que crearlos manualmente:

#
mknod /dev/sda b 8 0
#
mknod /dev/sda1 b 8 1
(solo crearemos esos pues son los que necesitaremos para montar nuestro stick)

3.1-Probando montaje de sistema de ficheros USB  --->
Debemos montar este sistema de ficheros dinamicamente generado en
/proc/bus/usb/, antes de montarlo veamos si es necesario tipeando:
#
mount | grep usb

si en la salida de ese comando vemos algo como:
none on /proc/bus/usb type usbfs (rw)
significa que ya esta montado y no debemos hacerlo.
Si no aparece nada debemos montarlo manualmente, antes de hacerlo comprobaremos la existencia del punto de montaje con:
#
ls /proc/bus/usb

si el ls nos tira un:
ls: /proc/bus/usb/: No such file or directory
es porque el directorio no existe. en ese caso lo creamos con:
#
mkdir -p /proc/bus/usb/

y pasamos a montarlo con:
#
mount -t usbfs none /proc/bus/usb

3.2-Probando estadisticas necesarias en /proc  --->
Como en el paso anterior ya aseguramos la existencia de
/proc/bus/usb, solo nos queda probar /proc/scsi:
#
ls /proc/scsi

Si este existe, estan listos para el siguiente paso. De lo contrario deberan revisar la configuracion del nucleo porque les falta seleccionar
    Device Drivers  --->
    SCSI device support  --->
[*]   legacy /proc/scsi/ support

3.3-Probando el dispositivo --->
Si por ejemplo tienen una camara digital, conectenla a la pc y enciendanla; luego tipeen:
#
udevinfo -a -p /sys/block/sda/sda1
deberian ver algo como:

udevinfo starts with the device the node belongs to and then walks up the
device chain, to print for every device found, all possibly useful attributes
in the udev key format.
Only attributes within one device section may be used together in one rule,
to match the device for which the node will be created.

  looking at class device '/sys/block/sda/sda1':
    SYSFS{dev}="8:1"
    SYSFS{size}="31591"
    SYSFS{start}="25"
    SYSFS{stat}="       0        0        0        0"

follow the class device's "device"
  looking at the device chain at '/sys/devices/pci0000:00/0000:00:1d.1/usb2/2-1/2-1:1.0/host12/target12:0:0/12:0:0:0':
    BUS="scsi"
    ID="12:0:0:0"
    SYSFS{detach_state}="0"
    SYSFS{device_blocked}="0"
    SYSFS{max_sectors}="240"
    SYSFS{model}="Sony DSC        "
    SYSFS{queue_depth}="1"
    SYSFS{rev}="5.00"
    SYSFS{scsi_level}="3"
    SYSFS{state}="running"
    SYSFS{timeout}="30"
    SYSFS{type}="0"
    SYSFS{vendor}="Sony    "

  looking at the device chain at '/sys/devices/pci0000:00/0000:00:1d.1/usb2/2-1/2-1:1.0/host12/target12:0:0':
    BUS=""
    ID="target12:0:0"
    SYSFS{detach_state}="0"

  looking at the device chain at '/sys/devices/pci0000:00/0000:00:1d.1/usb2/2-1/2-1:1.0/host12':
    BUS=""
    ID="host12"
    SYSFS{detach_state}="0"

  looking at the device chain at '/sys/devices/pci0000:00/0000:00:1d.1/usb2/2-1/2-1:1.0':
    BUS="usb"
    ID="2-1:1.0"
    SYSFS{bAlternateSetting}=" 0"
    SYSFS{bInterfaceClass}="08"
    SYSFS{bInterfaceNumber}="00"
    SYSFS{bInterfaceProtocol}="01"
    SYSFS{bInterfaceSubClass}="ff"
    SYSFS{bNumEndpoints}="03"
    SYSFS{detach_state}="0"

  looking at the device chain at '/sys/devices/pci0000:00/0000:00:1d.1/usb2/2-1':
    BUS="usb"
    ID="2-1"
    SYSFS{bConfigurationValue}="1"
    SYSFS{bDeviceClass}="00"
    SYSFS{bDeviceProtocol}="00"
    SYSFS{bDeviceSubClass}="00"
    SYSFS{bMaxPower}="  2mA"
    SYSFS{bNumConfigurations}="1"
    SYSFS{bNumInterfaces}=" 1"
    SYSFS{bcdDevice}="0500"
    SYSFS{bmAttributes}="c0"
    SYSFS{detach_state}="0"
    SYSFS{devnum}="10"
    SYSFS{idProduct}="0010"
    SYSFS{idVendor}="054c"
    SYSFS{manufacturer}="Sony"
    SYSFS{maxchild}="0"
    SYSFS{product}="Sony DSC"
    SYSFS{speed}="12"
    SYSFS{version}=" 2.00"

  looking at the device chain at '/sys/devices/pci0000:00/0000:00:1d.1/usb2':
    BUS="usb"
    ID="usb2"
    SYSFS{bConfigurationValue}="1"
    SYSFS{bDeviceClass}="09"
    SYSFS{bDeviceProtocol}="00"
    SYSFS{bDeviceSubClass}="00"
    SYSFS{bMaxPower}="  0mA"
    SYSFS{bNumConfigurations}="1"
    SYSFS{bNumInterfaces}=" 1"
    SYSFS{bcdDevice}="0206"
    SYSFS{bmAttributes}="c0"
    SYSFS{detach_state}="0"
    SYSFS{devnum}="1"
    SYSFS{idProduct}="0000"
    SYSFS{idVendor}="0000"
    SYSFS{manufacturer}="Linux 2.6.10 uhci_hcd"
    SYSFS{maxchild}="2"
    SYSFS{product}="Intel Corp. 82801DB/DBL/DBM (ICH4/ICH4-L/ICH4-M) USB UHCI Controller #2"
    SYSFS{serial}="0000:00:1d.1"
    SYSFS{speed}="12"
    SYSFS{version}=" 1.10"

  looking at the device chain at '/sys/devices/pci0000:00/0000:00:1d.1':
    BUS="pci"
    ID="0000:00:1d.1"
    SYSFS{class}="0x0c0300"
    SYSFS{detach_state}="0"
    SYSFS{device}="0x24c4"
    SYSFS{irq}="19"
    SYSFS{local_cpus}="1"
    SYSFS{subsystem_device}="0x8089"
    SYSFS{subsystem_vendor}="0x1043"
    SYSFS{vendor}="0x8086"

  looking at the device chain at '/sys/devices/pci0000:00':
    BUS=""
    ID="pci0000:00"
    SYSFS{detach_state}="0"

Ahora tipeen:
#
dmesg

Al final de la salida veran algo como:

usb 2-1: USB disconnect, address 9
usb 2-1: new full speed USB device using uhci_hcd and address 10
scsi12 : SCSI emulation for USB Mass Storage devices
usb-storage: device found at 10
usb-storage: waiting for device to settle before scanning
  Vendor: Sony      Model: Sony DSC          Rev: 5.00
  Type:   Direct-Access                      ANSI SCSI revision: 00
SCSI device sda: 31680 512-byte hdwr sectors (16 MB)
sda: assuming Write Enabled
sda: assuming drive cache: write through
SCSI device sda: 31680 512-byte hdwr sectors (16 MB)
sda: assuming Write Enabled
sda: assuming drive cache: write through
 sda: sda1
Attached scsi removable disk sda at scsi12, channel 0, id 0, lun 0
usb-storage: device scan complete

Si todo esta Ok, ya podemos continuar.

4-Montaje de dispositivos USB --->


4.1-USB keys, USB pendrives, Flash-sticks, USB disks, etc. --->
4.1.2-Particion unica --->
Si queremos utilizar una sola particion y por ende un solo sistema de ficheros, debemos crearlo:
(Para Fat 32)
#
mkdosfs -F 32 /dev/sda1
(Para ext2)
#
mke2fs /dev/sda1
Ahora pueden avanzar hasta
4.1.4.

4.1.3-Multiples particiones --->
Vamos a crear dos particiones primarias, (la primera con fat32 y la siguiente con ext2) en nuestro usbstick utilizando fdisk:
#
fdisk /dev/sda

             Command (m for help): d
             Selected partition 1

             Command (m for help): n
             Command action
                e   extended
                p   primary partition (1-4)
             p
             Partition number (1-4): 1
             First cylinder (1-888, default 1):
             Using default value 1
             Last cylinder or +size or +sizeM or +sizeK (1-888,
                   default 888):444
             Command (m for help): t
             Selected partition 1
             Hex code (type L to list codes): b

              Changed system type of partition 1 to b (Win95 FAT32)

             Command (m for help): n
             Command action
                e   extended
                p   primary partition (1-4)
             p
             Partition number (1-4): 2
             First cylinder (445-888, default 445):
             Using default value 445

              Last cylinder or +size or +sizeM or +sizeK (445-888,
              default 888):

             Using default value 888

             Command (m for help): t
             Partition number (1-4): 2
             Hex code (type L to list codes): 83

             Command (m for help): p


                                 Disk /dev/sda: 131 MB, 131072000 bytes
             9 heads, 32 sectors/track, 888 cylinders
             Units = cylinders of 288 * 512 = 147456 bytes

                Device Boot    Start       End    Blocks   Id  System
             /dev/sda1             1       444     63920    b  Win95 FAT32
             /dev/sda2           445       888     63936   83  Linux


             Command (m for help):w

Si a lo largo del particionamiento comenten algun error pueden volver atras saliendo del fdisk sin guardar cambios (siempre y cuando no digiten la tecla "w", pues tecleando la misma el fdisk escribe la tabla de particiones)

Ahora crearemos los sistemas de ficheros de las dos particiones:
#
mkdosfs -F 32 /dev/sda1
#
mke2fs /dev/sda2
Listo, pasen al siguiente paso.

4.1.4-Montando dispositivos
Crear punto de montaje y montar:

Si uds siguieron el paso
4.1.3 hagan lo siguiente:
Creacion de puntos de montaje:
#
mkdir -p /mnt/fatstick
#
mkdir -p /mnt/ext2stick
Montaje:
#
mount -t vfat /dev/sda1 /mnt/fatstick
#
mount -t ext2 /dev/sda2 /mnt/ext2stick

Si uds siguieron el paso
4.1.2 con vfat hagan lo siguiente:
Creacion de punto de montaje:
#mkdir -p /mnt/usbstick
Montaje:
#
mount -t vfat /dev/sda1 /mnt/usbstick

Si uds siguieron el paso
4.1.2 con ext2 hagan lo siguiente:
Creacion de punto de montaje:
#
mkdir -p /mnt/usbstick

Montaje:
#
mount -t ext2 /dev/sda1 /mnt/usbstick

4.2-Montaje de camaras digitales --->
Para este tipo de dispositivo no debemos particionar ni crear sistemas de ficheros, estos vienen con fat, de modo que solo debemos montarlo.
(creacion del punto de montaje)
#
mkdir /mnt/digicam

(montaje del dispositivo)
#
mount -t vfat /dev/sda1 /mnt/digicam/

Listo, la camara esta montada en
/mnt/digicam/

5-Automontaje de dispositivos --->
Como he mencionado con anterioridad udev permite escribir reglas para personalizar los nombres de los dispositivos; es decir que cada vez que el kernel detecta una actualizacion en la estructura de dispositivos, llama al programa
/sbin/hotplug. Este ejecuta las aplicaciones enlazadas en el directorio /etc/hotplug.d/default donde encontrara enlaces simb�licos a la aplicacion udev. Hotplug dirige los datos dados por el kernel a la aplicacion udev que crea o borra los archivos de dispositivo necesarios en /dev/.
Ahora crearemos reglas para camaras digitales, y usbsticks para que cada vez que conectemos nuestro dispositivo USB udev le asigne el nombre de nodo que nosotros especifiquemos. ( Para camaras digitales sera
/dev/digicam y para usbticks sera /dev/usbstick )
Primero vamos al directorio donde udev busca los archivos de reglas:
#
cd /etc/udev/rules.d
En ese directorio vamos a encontrar un archivo llamado
50-udev.rules que es el archivo de reglas por default, el mismo contiene las reglas para los dispositivos mas comunes.
He aqui el contenido de un
50-udev.rules:

# /etc/udev/udev.rules:  device naming rules for udev
#
# Gentoo specific rules, based a bit on devfs rules, but much simpler.
#
# There are a number of modifiers that are allowed to be used in some of the
# fields.  See the udev man page for a full description of them.


###########################################################
#
# For devfs similar /dev layout (neater)
#
###########################################################

# cdrom symlinks and other good cdrom naming
BUS="ide",  KERNEL="hd[a-z]",  PROGRAM="/etc/udev/scripts/cdsymlinks.sh %k", SYMLINK="%c{1} %c{2}%c{3} %c{4} %c{5} %c{6}"
BUS="scsi", KERNEL="sr[a-z]",  PROGRAM="/etc/udev/scripts/cdsymlinks.sh %k", SYMLINK="%c{1} %c{2}%c{3} %c{4} %c{5} %c{6}"
BUS="scsi", KERNEL="scd[a-z]", PROGRAM="/etc/udev/scripts/cdsymlinks.sh %k", SYMLINK="%c{1} %c{2}%c{3} %c{4} %c{5} %c{6}"

# devfs-names for ide-devices (uncomment only one)
#  /dev/ide/.../{disc,cd} and /dev/{cdroms,discs}/* type names
BUS="ide", KERNEL="hd*", PROGRAM="/etc/udev/scripts/ide-devfs.sh %k %b %n", NAME="%k", SYMLINK="%c{1} %c{2}"

# dri devices
KERNEL="card*",         NAME="dri/card%n"

# alsa devices
KERNEL="controlC[0-9]*", NAME="snd/%k"
KERNEL="hw[CD0-9]*",     NAME="snd/%k"
KERNEL="pcm[CD0-9cp]*",  NAME="snd/%k"
KERNEL="midiC[D0-9]*",   NAME="snd/%k"
KERNEL="timer",          NAME="snd/%k"
KERNEL="seq",            NAME="snd/%k"

# capi devices
KERNEL="capi",          NAME="capi20", SYMLINK="isdn/capi20"
KERNEL="capi*",         NAME="capi/%n"

# cpu devices
KERNEL="cpu[0-9]*",     NAME="cpu/%n/cpuid"
KERNEL="msr[0-9]*",     NAME="cpu/%n/msr"
KERNEL="microcode",     NAME="cpu/microcode"

# dm devices (ignore them)
KERNEL="dm-[0-9]*",     NAME=""
# create a symlink named after the device map name
# note devmap_name comes with extras/multipath
#KERNEL="dm-[0-9]*",    PROGRAM="/sbin/devmap_name %M %m", NAME="%k", SYMLINK="%c"
KERNEL="device-mapper", NAME="mapper/control"

# fb devices
KERNEL="fb[0-9]*",      NAME="fb/%n", SYMLINK="%k"

# floppy devices
KERNEL="fd[0-9]*",      NAME="floppy/%n", SYMLINK="%k"

# i2c devices
KERNEL="i2c-[0-9]*",    NAME="i2c/%n", SYMLINK="%k"

# input devices
KERNEL="mice",          NAME="input/%k"
KERNEL="mouse*",        NAME="input/%k"
KERNEL="event*",        NAME="input/%k"
KERNEL="js*",           NAME="input/%k"
KERNEL="ts*",           NAME="input/%k"

# loop devices
KERNEL="loop[0-9]*",    NAME="loop/%n", SYMLINK="%k"

# md block devices
KERNEL="md[0-9]*",      NAME="md/%n", SYMLINK="%k"

# misc devices
KERNEL="agpgart",       NAME="misc/%k", SYMLINK="%k"
KERNEL="psaux",         NAME="misc/%k", SYMLINK="%k"
KERNEL="rtc",           NAME="misc/%k", SYMLINK="%k"
KERNEL="uinput",        NAME="misc/%k", SYMLINK="%k"
KERNEL="inotify",       NAME="misc/%k", SYMLINK="%k"

# netlink devices
KERNEL="route",         NAME="netlink/%k"
KERNEL="skip",          NAME="netlink/%k"
KERNEL="usersock",      NAME="netlink/%k"
KERNEL="fwmonitor",     NAME="netlink/%k"
KERNEL="tcpdiag",       NAME="netlink/%k"
KERNEL="nflog",         NAME="netlink/%k"
KERNEL="xfrm",          NAME="netlink/%k"
KERNEL="arpd",          NAME="netlink/%k"
KERNEL="route6",        NAME="netlink/%k"
KERNEL="ip6_fw",        NAME="netlink/%k"
KERNEL="dnrtmsg",       NAME="netlink/%k"
KERNEL="tap*",          NAME="netlink/%k"

# network devices
KERNEL="tun",           NAME="net/%k"

# pty devices
KERNEL="pty[p-za-e][0-9a-f]*", NAME="pty/m%n", SYMLINK="%k"
KERNEL="tty[p-za-e][0-9a-f]*", NAME="pty/s%n", SYMLINK="%k"

# ramdisk devices
KERNEL="ram[0-9]*",     NAME="rd/%n", SYMLINK="%k"

# raw devices
KERNEL="raw[0-9]*",     NAME="raw/%k"

# sound devices
KERNEL="adsp",            NAME="sound/%k", SYMLINK="%k"
KERNEL="adsp[0-9]*",      NAME="sound/%k", SYMLINK="%k"
KERNEL="audio",           NAME="sound/%k", SYMLINK="%k"
KERNEL="audio[0-9]*",     NAME="sound/%k", SYMLINK="%k"
KERNEL="dsp",             NAME="sound/%k", SYMLINK="%k"
KERNEL="dsp[0-9]*",       NAME="sound/%k", SYMLINK="%k"
KERNEL="mixer",           NAME="sound/%k", SYMLINK="%k"
KERNEL="mixer[0-9]*",     NAME="sound/%k", SYMLINK="%k"
KERNEL="sequencer",       NAME="sound/%k", SYMLINK="%k"
KERNEL="sequencer[0-9]*", NAME="sound/%k", SYMLINK="%k"

# tty devices
KERNEL="tty[0-9]*",     NAME="vc/%n",  SYMLINK="%k"
KERNEL="ttyS[0-9]*",    NAME="tts/%n", SYMLINK="%k"
KERNEL="ttyUSB[0-9]*",  NAME="tts/USB%n"

# usb devices
KERNEL="hiddev*",               NAME="usb/%k"
KERNEL="auer*",                 NAME="usb/%k"
KERNEL="legousbtower*",         NAME="usb/%k"
KERNEL="dabusb*",               NAME="usb/%k"
BUS="usb", KERNEL="lp[0-9]*",   NAME="usb/%k"

# vc devices
KERNEL="vcs",           NAME="vcc/0",   SYMLINK="%k"
KERNEL="vcs[0-9]*",     NAME="vcc/%n",  SYMLINK="%k"
KERNEL="vcsa",          NAME="vcc/a0",  SYMLINK="%k"
KERNEL="vcsa[0-9]*",    NAME="vcc/a%n", SYMLINK="%k"

# v4l devices
KERNEL="video[0-9]*",   NAME="v4l/video%n",     SYMLINK="video%n"
KERNEL="radio[0-9]*",   NAME="v4l/radio%n"
KERNEL="vbi[0-9]*",     NAME="v4l/vbi%n",       SYMLINK="vbi%n"
KERNEL="vtx[0-9]*",     NAME="v4l/vtx%n"

Ahora pasamos a crear nuestras propias reglas:
Primeo creamos el archivo con la sintaxis adecuada para que udev lea primero nuestras reglas:
#
touch 10-udev.rules
Observen que el archivo empieza con 10, es para que udev lea primero este archivo y luego el del kernel (50)
Ahora lo editamos y le agregamos estas entradas genericas:
 #digicam
 BUS="usb", KERNEL="sd?1", SYSFS{model}="Sony DSC", NAME="digicam"
 #usbstick
 BUS="scsi", KERNEL="sd?1", SYSFS{model}="Mobile Disk", NAME="usbstick"

(Uds deberan elegir de acuerdo al dispositivo USB que tengan, es decir, si tienen una camara digital solo agregaran la primer entrada)
Si udev no les crea el nodo llamado digicam o usbstick (depende de su eleccion) puede ser que la entrada no sea valida para su sistema, entonces deberan comprobarlo tecleando:
#
udevinfo -a -p /sys/block/sda

entre toda la salida veran algo como esto:
 follow the class device's "device"
  looking at the device chain at
'/sys/devices/pci0000:00/0000:00:10.4/usb1/1-1/1-1:1.0/host7/7:0:0:0':
    BUS="scsi"
    ID="7:0:0:0"
    SYSFS{detach_state}="0"
    SYSFS{device_blocked}="0"
    SYSFS{max_sectors}="240"
    SYSFS{model}="Mobile Disk"
    SYSFS{queue_depth}="1"
    SYSFS{rev}="    "

Es fundamental que presten atencion a las lineas "BUS", "
SYSFS{model}" y  "SYSFS{vendor}" dado que las lineas "SYSFS{model}" y  "SYSFS{vendor}" les permitira reconocer entre toda la salida de ese comando cual es el dispostivo que estan buscando. Por ejemplo podriamos diferenciar entre:

SYSFS{product}="Sony DSC"

y entre

SYSFS{product}="Intel Corp. 82801DB/DBL/DBM (ICH4/ICH4-L/ICH4-M) USB UHCI Controller #2"

las posibilidades son muchas y muy complicado de ejemplificar, pero confio que ese ejemplo sea de ayuda.
Lo mas importante y a lo que apunto con esto es que si la linea "BUS" del dispositivo con el "
SYSFS{model}" adecuado
dice:
BUS="scsi"
Y nosotros en el /etc/udev/rules.d/10-local.rules especificamos
BUS="usb"
no va a funcionar. Por eso insisto en que verifiquen antes de llorar :-P

Ahora modificaremos nuestro
/etc/fstab por dos razones:
*Automatizar el montaje de estos dispositivos al iniciar la pc.
*Facilitar el montaje de manera que solo tengamos que especificar el nodo que queremos montar o el punto de montaje y la demas informacion como sistemas de ficheros, etc sea buscada en el
/etc/fstab
Para ello debemos agregar los siguiente al
/etc/fstab:

Para camara digital con reglas udev:
/dev/digicam    /mnt/digicam    auto    noauto,rw,user    0 0

Para camara digital sin reglas udev:
/dev/sda1    /mnt/digicam    auto    noauto,rw,user    0 0

Para usbstick, pen-drives, etc con reglas udev y vfat:
/dev/usbstick    /mnt/usbstick    vfat    noauto,rw,user    0 0

Para usbstick, pen-drives, etc con reglas udev y ext2:
/dev/usbstick    /mnt/usbstick    ext2    noauto,rw,user    0 0

Para usbstick, pen-drives, etc de acuerdo al paso 4.1.3:
/dev/sda1    /mnt/fatstick    vfat    noauto,rw,user    0 0
/dev/sda2   /mnt/ext2stick    ext2    noauto,rw,user    0 0

6-�vos sos Dios? --->
No, yo no.



CRISTIAN EL�AS

[email protected]





Hosted by www.Geocities.ws

1