Документация по ОС FreeBSD Суббота, 20.04.2024, 16:26
Приветствую Вас Гость | RSS
Меню сайта

Категории каталога
Мои статьи [0]
Установка и настройка [281]
X Window [25]
Man pages [30]
Ports & Packages [26]
cvs [18]
Multimedia [20]
Нововсти в мире Unix [0]
RFC [4]
RFC (Request for Comments, Запрос на комментарии) - серия документов, публикуемая сообществом исследователей и разработчиков, руководствующихся практическими интересами, в которой описывается набор протоколов и обобщается опыт функционирования Интернет.
Безопасность [52]
Работа с железом [58]
Книги по FreeBSD [17]
Сеть [505]
Программирование [40]
FireWall [58]
Темы экзамена BSDA [14]
Официальные темы экзамена BSDA, включая подробноые описания и советы по обучению.

Главная » Статьи » Работа с железом

Монтирование фотоаппарата Canon через gphotofs [2011]
Предистория. Подарил тёщще на новый год цифровик - Canon PowerShot A480 - попрощще, лишь бы снимал. Третье тысячелетие, а она с мыльницей плёночной рассекает =) К вечеру 1 января, вылезла проблема - цифровик был передан в руки жене, а та захотела смотреть/ковырять фотки в нём на компе...
   Подрубаем к компу, и видим стандартную для Canon картинку:
Jan 7 18:03:56 dc7700p kernel: ugen4.3: <Canon Inc.> at usbus4

Ладно. Это решаемо - топаем в порты и ставим:
dc7700p$ cd /usr/ports/
dc7700p$ make search name=gphotofs
Port: fusefs-gphotofs-0.4.0_1
Path: /usr/ports/graphics/fusefs-gphotofs
Info: Mount PTP camera as a file system
Maint: pav@FreeBSD.org
B-deps: fusefs-libs-2.7.4 gettext-0.18.1.1 glib-2.26.1_1 jpeg-8_3
libexif-0.6.18_1 libgphoto2-2.4.10.1 libiconv-1.13.1_1 libltdl-2.2.10
pcre-8.11 perl-5.10.1_3 pkg-config-0.25_1 python26-2.6.6
R-deps: fusefs-kmod-0.3.9.p1.20080208_7 fusefs-libs-2.7.4
gamin-0.1.10_4 gettext-0.18.1.1 gio-fam-backend-2.26.1 glib-2.26.1_1
jpeg-8_3 libexif-0.6.18_1 libgphoto2-2.4.10.1 libiconv-1.13.1_1
libltdl-2.2.10 pcre-8.11 perl-5.10.1_3 pkg-config-0.25_1 python26-2.6.6
WWW: http://gphoto.sourceforge.net/proj/gphotofs/

Port: sysutils/fusefs-gphotofs
Moved:
Date: 2009-10-05
Reason: Removed

dc7700p$ cd /usr/ports/graphics/fusefs-gphotofs
dc7700p$ make install clean

   Пробуем примонтировать цифровик:
dc7700p$ gphotofs /mnt
dc7700p$ df -h | grep mnt
/dev/fuse0 0B 0B 0B 0% /mnt
dc7700p$ ll /mnt/
total 0
drwxr-xr-x 2 root wheel 0B 1 янв 1970 store_00010001
dc7700p$ ll /mnt/store_00010001/
total 0
drwxr-xr-x 2 root wheel 0B 1 янв 1970 DCIM
dc7700p$ ll /mnt/store_00010001/DCIM/
total 0
drwxr-xr-x 2 root wheel 0B 1 янв 1970 100CANON
dc7700p$ ll /mnt/store_00010001/DCIM/100CANON/
total 9434
-rw-r--r-- 1 root wheel 2,0M 18 дек 11:10 IMG_0001.JPG
-rw-r--r-- 1 root wheel 2,6M 31 дек 21:42 IMG_0002.JPG
-rw-r--r-- 1 root wheel 2,7M 31 дек 21:42 IMG_0003.JPG
-rw-r--r-- 1 root wheel 2,0M 7 янв 15:13 IMG_0004.JPG
dc7700p$ 

   Чё-то виднеется. На этом можно было бы и остановится. Но, жене в консоль негоже втыкать. Порылся в панельке управления KDE4 - цифровик такой в списках есть, вот тока цепляться не хочет. Толи нехватает чё-то, толи совсем помойко-ориентированные стали они.
   Ладно. Коммунисты не ищут лёгких путей. Есть sh, есть devd - больше ничё не надо. Для начала включаем дебаг и рестартуем devd:
dc7700p$ grep devd /etc/rc.conf 
devd_flags="-d -D"
dc7700p$ /etc/rc.d/devd restart
devd not running?
Starting devd.
Parsing /etc/devd.conf
setting scsi-controller-regex=(aac|adv|adw|aha|ahb|ahc|ahd|aic
|amd|amr|asr|bt|ciss|ct|dpt|esp|ida|iir|ips|isp|mlx|mly|mpt|ncr
|ncv|nsp|stg|sym|trm|wds)[0-9]+
Parsing files in /etc/devd
Parsing /etc/devd/asus.conf
Parsing /etc/devd/uath.conf
Parsing files in /usr/local/etc/devd

   Подрубаем аппарат, наблюдаем такой девайс на экране
Processing event '? at bus=1 hubaddr=1 port=4 devaddr=3 interface=0 vendor=0x04a9 product=0x31bf devclass=0x00 devsubclass=0x00 sernum="F7D1136708674498A2950C137682C518" release=0x0001 intclass=0x06 intsubclass=0x01 on uhub4'
Pushing table
setting bus=1
setting hubaddr=1
setting port=4
setting devaddr=3
setting interface=0
setting vendor=0x04a9
setting product=0x31bf
setting devclass=0x00
setting devsubclass=0x00
setting sernum=F7D1136708674498A2950C137682C518
setting release=0x0001
setting intclass=0x06
setting intsubclass=0x01
setting bus=uhub4
Processing nomatch event
Testing bus=uhub4 against ^pccard[0-9]+
Testing bus=uhub4 against ^uhub[0-9]+
Executing 'logger Unknown USB device: vendor 0x04a9 product 0x31bf bus uhub4'
Popping table

   Изучение devd.conf подсказывает мысль - править конфиг не надо, достаточно создать инклюд. Что и делаем. Рисуем такой файл (на самом деле, это примерно третий вариант - в первых двух внешнего скрипта не было, просто монтировался цифровик и на рабочем столе создавался симлинк. Была обнаружена проблема, что KDE не всегда корректно его понимала... Причина не понятна, да и красоты хотелось - чтоб значок был какой нужно) - vendor/product/release - из вышеприведённого лога:
dc7700p$ cat /usr/local/etc/devd/canon.conf
# mount canon photo using gphotofs
attach 100 {
 match "vendor" "0x04a9";
 match "product" "0x31bf";
 match "release" "0x0001";
 action "/root/scripts/canon.A480.sh attach;";
};
# umount when dettach
detach 100 {
 match "vendor" "0x04a9";
 match "product" "0x31bf";
 match "release" "0x0001";
 action "/root/scripts/canon.A480.sh dettach;";
};

dc7700p$ 

   Плюс дополнительный скрипт, который занимается красивостями - и не забываем сделать его исполняемым:
dc7700p$ cat /root/scripts/canon.A480.sh
#!/bin/sh

# цепляем цифровик
if [ x$1 = "xattach" ]
then
 # монтируем
 /usr/local/bin/gphotofs -o allow_other /mnt;
 # ставим права, на всякий случай
 /bin/chmod 775 /mnt;
 # перебираем всех пользователей
 cd /home/ && ls |
 {
 while read user
 do
 # file path
 file="/home/$user/Desktop/Canon.A480.desktop"
 # create file link
 echo '[Desktop Entry]' >> $file
 echo 'Comment[ru]=' >> $file
 echo 'Comment=' >> $file
 echo 'Exec=/usr/local/kde4/bin/dolphin /mnt' >> $file
 echo 'Icon=camera-photo' >> $file
 echo 'Name[ru]=Canon.A480' >> $file
 echo 'Name=Canon.A480' >> $file
 echo 'StartupNotify=true' >> $file
 echo 'Terminal=false' >> $file
 echo 'TerminalOptions=' >> $file
 echo 'Type=Application' >> $file
 echo 'X-KDE-SubstituteUID=false' >> $file
 # set permissions
 chown $user $file
 chmod 755 $file
 done
 }
 exit 0;
fi

# отцепляем цифровик
if [ x$1 = "xdettach" ]
then
 /sbin/umount -f /mnt;
 cd /home/ && ls |
 {
 while read user
 do
 cd /home/$user/Desktop && \
 rm -f /home/$user/Desktop/Canon.A480.desktop
 done
 }
 exit 0;
fi


echo "Usage: `basename $0` {attach|dettach}"

   Далее, убираем дебаг, рестартуем devd и пробуем. Должно работать.



Источник: http://www.lissyara.su/articles/freebsd/hardware/mount_canon_powershot_using_gphotofs/
Категория: Работа с железом | Добавил: oleg (14.01.2011) | Автор: lissyara
Просмотров: 1341 | Рейтинг: 0.0/0 |
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Форма входа

Beastie

Друзья сайта

Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0
links

Copyright MyCorp © 2024