Linux Slackware Энциклопедия от А до Я
Сайт посвящен свободно распространяемому ПО и Linux Slackware в частности.
Разделы:
Раздел/Тема
Главная -> Настройка -> udev - покдлючаем фотоаппарат
Недавно купил себе цифровой фотоаппарат, и соотвественно встал вопрос как из него вытаскивать фотографии. Фотоаппарат Olympus Mju 700 Digital, на борту xD-Picture карточка объемом 1Гб. Соединяется c PC это чудо посредством интерфейса USB.
Моя система Slackware 11.0 kernel 2.6.20.
$ uname -a
Linux kmax 2.6.20 #3 SMP PREEMPT Sun Feb 11 22:18:20 MSK 2007 i686 pentium4 i386 GNU/Linux
Все оказалось очень просто и не потребовало чтения манов и пересборки ядра...

Итак cоединяем... На экране фотоаппарата появляется менюшка с выбором, что делать, жмем соединить с PC, после чего экран гаснет. Тааак смотрим, что мы имеем...
$ sudo lsusb
Bus 1 Device 2: ID 07b4:0118 Olympus Optical Co., Ltd
Bus 1 Device 1: ID 0000:0000
Bus 4 Device 1: ID 0000:0000
Bus 2 Device 3: ID 0451:6060 Texas Instruments, Inc.
Bus 2 Device 2: ID 046d:c286 Logitech, Inc.
Bus 2 Device 1: ID 0000:0000
Bus 5 Device 1: ID 0000:0000
Bus 3 Device 1: ID 0000:0000

udev нашел нашел устройство, как видим.
$ lsmod

Module                  Size  Used by
usb_storage            81216  0

Загрузился модуль usb_storage, значит ядро распознало фотоаппарат как устройство хранения USB, осталось только убедиться в этом.
$ sudo fdisk -l
Disk /dev/sda: 200.0 GB, 200048565760 bytes
255 heads, 63 sectors/track, 24321 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1               1         249     2000061   82  Linux swap
/dev/sda2   *         250        1465     9767520   83  Linux
/dev/sda3            1466       19701   146480670   83  Linux
/dev/sda4           19702       24321    37110150    5  Extended
/dev/sda5           19702       22133    19535008+  83  Linux
/dev/sda6           22134       24321    17575078+  83  Linux

Disk /dev/sdb: 200.0 GB, 200048565760 bytes
255 heads, 63 sectors/track, 24321 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1   *           1       24320   195350368+   7  HPFS/NTFS

Disk /dev/sdc: 1048 MB, 1048481280 bytes
33 heads, 63 sectors/track, 985 cylinders
Units = cylinders of 2079 * 512 = 1064448 bytes

   Device Boot      Start         End      Blocks   Id  System
/dev/sdc1   *           1         985     1023874+   6  FAT16
Partition 1 has different physical/logical endings:
     phys=(984, 32, 63) logical=(984, 32, 56)

Так и есть:
Disk /dev/sdc: 1048 MB, 1048481280 bytes
33 heads, 63 sectors/track, 985 cylinders
Units = cylinders of 2079 * 512 = 1064448 bytes

Теперь можно спокойно добавлять в fstab строчку типа:
dev/sdc1        /mnt/usb         auto       noauto,users,umask=022,nosuid,noexec,rw     0  0

И монтировать фотоаппарат командой mount /mnt/usb. Но всегда хочется чего-то большего. Тем более, что точно такой же командой я монтирую флэшку, и вычислять каждый раз какое же устройство сейчас флэшка, а какое фотоаппарат не удобно. Короче хочется, чтоб при подключении фотоаппарата создавалось устройство с уникальным именем, и еще чтоб оно само монтировалось. Это возможно. Для этого нам нужно воспользоваться возможностями предоставляемыми нам udev. Создаем в каталоге /etc/udev/rules.d файл с понятным нам названием. Пусть будет /digital_camera.rules.
Теперь необходимо выяснить какие параметры передает ядро юдеву:
udevinfo -a -p /block/sdc/sdc1

Вылезет куча инфы. В принципе по любому критерию можно построить правило для udev, лишь бы критерий был уникален. Я построил правило по критерию SYSFS{model} Само правило:
SYSFS{model}=="u700,S700       ", NAME="camera", ACTION=="add", RUN+="/etc/rc.d/rc.camera"
Его надо записать в созданный нами файл. И желательно всем почитать man udev.

Теперь при каждом подключении фотоаппарата будет создаваться устройство /dev/camera и выполняться скрипт /etc/rc.d/rc.camera

Вот его незамысловатое содержимое:
#!/bin/sh

mount /mnt/olympus
Кстати лежать этот скрипт должен вовсе не обязательно в /etc/rc.d
В файле /etc/fstab создадим запись:
/dev/camera    /mnt/olympus    auto   noauto,users,umask=022,nosuid,noexec,rw     0  0
И создадим точку монтирования /mnt/olympus.

Как не трудно заметить скрипт монтирует фотоаппарат. Остается создать симлинк этого каталога на рабочий стол и радоваться. Basmach 17.02.2007