56.6 UDEV
A problem that plagued earlier versions of the GNU/Linux kernel was
that each time a USB device (and other devices) was connected a
different mount point would be assigned. This issue was addressed in
the 2.6 kernels using udev with hotplug. With
udev, naming rules (e.g., in
/etc/udev/rules.d/local.rules
) are used to provide stable
names for use in /etc/fstab
. Udev uses
information exported by the kernel drivers to the sysfs filesystem
(usually mounted on /sys) to identify specific devices and to then
associate them with specific names in /dev
.
The key to using udev is with the rules that are defined to identify and distinguish the different USB devices that may be connected. A tutorial for writing udev rules is available from http://www.reactivated.net/udevrules.php.
The first step is to identify the USB device in some way. The udevinfo command can be used to identify a device path, which can then be used to identify information about the device on that path. For example, to identify a specific Flash Memory device which is recognised in GNU/Linux as a SCSI device, connect the device and run the command:
The /dev/sdc
path here is whatever the dmesg
command identifies. Select some identifying piece of information,
like the product identifier (the line that starts with
SYSFS\{product\
=}), and add that to
/etc/udev/rules.d/local.rules
(each rule must be on a single line).
56.6.1 Flash Memory
On one line in /etc/udev/rules.d/local.rules
:
Then restart udev:
Add a suitable entry to /etc/fstab
:
Be sure the mount point /media/usbkey
exists:
An alternative name might be:
56.6.2 Camera
$ udevinfo -a -p /block/sdc
$ sudo emacs -nw /etc/udev/rules.d/local.rules
BUS=="usb", KERNEL=="sd?1", SYSFS{product}=="hp photosmart 320",
NAME="%k", SYMLINK="photosmart"
$ sudo emacs -nw /etc/fstab
/dev/photosmart /media/photosmart auto user,defaults 0 0
$ sudo mkdir /media/photosmart
$ wajig restart udev
A Nikon Coolpix E5200 camera:
$ udevinfo -a -p /block/sdc
$ sudo emacs -nw /etc/udev/rules.d/local.rules
BUS=="usb", KERNEL=="sd?1", SYSFS{product}=="NIKON DSC E5200",
NAME="%k", SYMLINK="nikon"
$ sudo emacs -nw /etc/fstab
/dev/nikon /media/nikon auto user,defaults 0 0
$ sudo mkdir /media/nikon
$ wajig restart udev
For some reason /dev/sdc1 is not created when the camera is plugged in
(/dev/sdc is). But after an attempt to mount /dev/sdc, /dev/sdc1 comes
into existence (even though the mount command fails with a request to
specify the filesystem type). After installing the
gnome-volume-manager /dev/sdc1
started being
created.
56.6.3 iPod
The following udev rule will create a symbolic link called
ipod in /dev/
to the data partition on an iPod when
it is plugged in:
56.6.4 Card Reader
For a card reader they usually do not provide media change information and so the kernel can not generate a hotplug event for udev. In this situation you can use the all_partitions property for the NAME. To get access to a CF slot on a specific multi-card reader:
56.6.5 MP3 Player
56.6.5.1 iRiver H340
An iRiver H300 Series MP3/ogg HDD player (H340):
$ udevinfo -a -p /block/sdc | grep product
SYSFS{product}="iRiver H300 Series"
SYSFS{product}="Intel Corp. 82801EB/ER ..."
$ sudo emacs -nw /etc/udev/rules.d/local.rules
BUS=="usb", KERNEL=="sd?1", SYSFS{product}=="iRiver H300 Series",
NAME="%k", SYMLINK="iriver"
$ sudo emacs -nw /etc/fstab
/dev/iriver /media/iriver auto users,defaults 0 0
$ sudo mkdir /media/iriver
$ wajig restart udev
$ mount /media/iriver
56.6.5.2 iRiver ifp796
Initial connect to USB did not report anything in dmesg. By looking at
/proc/bus/usb/devices
found:
T: Bus=01 Lev=01 Prnt=01 Port=00 Cnt=01 Dev#= 26 Spd=480 MxCh= 0
D: Ver= 2.00 Cls=00(>ifc ) Sub=00 Prot=00 MxPS=64 #Cfgs= 1
P: Vendor=4102 ProdID=1007 Rev= 0.01
S: Manufacturer=iRiver Limited.
S: Product=IFP-700 HIGH SPEED
C:* #Ifs= 1 Cfg#= 1 Atr=80 MxPwr=100mA
I: If#= 0 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=ff Driver=(none)
E: Ad=81(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
E: Ad=01(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
It was being found but there is no Driver! As I understand this means that the firmware is using the Managed firmware.
So instead install ifp-line and run as root:
$ wajig install ifp-line
$ ifp ls
Device is busy. (I was unable to claim its interface.)
$ sudo ifp ls
d VOICE
d RECORD
f iRiver, Catch the digital flow!.mp3 (size 1988608)
This works just fine! with commands to manage the iRiver from the command line.
A decent graphics interface is ifp-manager:
$ wget http://optusnet.dl.sourceforge.net/sourceforge/ifp-manager/ifp-manager0_2_0.tar.bz2
$ tar xvf ifp-manager0_2_0.tar.bz2
$ cd ifp-manager0.2.0/
$ sudo ./ifpmanager.pl
Another graphical interface is provided by ifp-gnome. The interface is good but the functionality is limited. Seems if you select a folder of albums belonging to an artist, only the first album gets uploaded.
$ wget http://optusnet.dl.sourceforge.net/sourceforge/ifp-gnome/ifp-gnome_0.5-ubuntu1_noarch.deb
$ wajig install ifp-gnome_0.5-ubuntu1_noarch.deb
$ sudo ifp-gnome
To allow a user access to the ifp:
56.6.7 Examples
A bunch of examples from Rogrio Brito:
# USB Key Drive: "Leading Driver Co.,LTD.", "USB Mass Storage Device"
BUS=="usb", SYSFS{idProduct}=="2317", SYSFS{idVendor}=="067b",
NAME="usb/key%n", SYMLINK="sda%n"
# Printer: "DeskJet 840C", "BR1391S0WNKV"
BUS=="usb", SYSFS{idProduct}=="0604", SYSFS{idVendor}=="03f0",
NAME="usb/lp%n", SYMLINK="hp_lp"
# iPod
BUS=="ieee1394", SYSFS{model_name_kv}=="iPod", NAME="ipod%n"
# HD in Firewire Enclosure
BUS=="scsi", SYSFS{vendor}=="QUANTUM*", SYSFS{model}=="FIREBALLlct15 30",
NAME="firewire%n"
Your donation will support ongoing availability and give you access to the PDF version of this book. Desktop Survival Guides include Data Science, GNU/Linux, and MLHub. Books available on Amazon include Data Mining with Rattle and Essentials of Data Science. Popular open source software includes rattle, wajig, and mlhub. Hosted by Togaware, a pioneer of free and open source software since 1984. Copyright © 1995-2022 Graham.Williams@togaware.com Creative Commons Attribution-ShareAlike 4.0