From: Василий Гладкий <hot-orange@narod.ru.>
Date: Mon, 10 Mar 2005 18:21:07 +0000 (UTC)
Subject: Обеспечение работы многокарточного USB Card Reader в Linux
Вернулся я как-то с работы с Olympus E-10, камера есть такая. И
возникло у меня непреодолимое желание завести эту штуку под
Линуксом. В Win2000 даже драйвера не нужны, определяется сразу, как
съёмный диск, т.е. является кард-ридером. По идее там лежат
графические файлы, но можно и музыку таскать, и программы, и
вообще-любые файлы. Под линуксом сразу не заработало, пришлось
напрячь мозг...
Поехали!
* Я работал над этим документом в ASPLinux 7.2
* Надеюсь, что ваше ядро версии 2.4 или старше, собрано с включённой
поддержкой SCSI и USB. Если с этим всё в порядке, подключаем
устройство к порту USB и даём очень простою команду:
# modprobe usb-storage
Если модуль загрузился, значит всё в порядке. Теперь надо посмотреть
появилось ли у нас новое устройство SCSI, узнать это можно с помощью
небольшой утилиты sg3-utils (http://www.torque.net/sg/), а можно поступить
проще, я использовал такую команду:
теперь надо смонтировать новое устройство, но сначала узнаем, где оно
находится дав команду:
# sg_map
Увидеть мы должны что-то такое:
/dev/sg0 /dev/scd0
/dev/sg1 /dev/sda
/dev/sda и есть наш флеш-диск. Стало быть первый раздел на нём будет
/dev/sda1, монтируем его:
# mount -t vfat /dev/sda1 /mnt/flash
Вот и всё! Ваш кард-ридер прикручен к системе. Что бы каждый раз не
загружать модуль usb-storage вручную, советую прописать его в hotplug
(конечно, если ваш hotplug ничего не знает об этом устройстве, о моём
знал :-)) Берём подходящую строку из /etc/hotplug/usb.distmap от
другого устройства usb-storage, заменяем в ней Product ID и Vendor ID
на соответствующие значения нашего устройства. Узнать Vendor ID и
Product ID можно c помощью утилиты USBView (http://usbview.sourceforge.net/)
или команды:
в /etc/hotplug/usb.handmap. Теперь модуль usb-storage будет
загружаться автоматически при подключении устройства к шине usb.
Чтобы облегчить жизнь можно добавить в /etc/fstab следующую строку:
/dev/sda1 /mnt/flash vfat noauto,user 0 0
Для того, что бы примонтировать устройство необходимо дать команду:
# mount /mnt/flash
что бы размонтировать:
# umount /mnt/flash
Благодарность.
Выражаю благодарность Грегу Бэйкеру (Greg Baker) за его работу над
документом Using a USB Compact Flash Reader (http://www.cs.sfu.ca/%7Eggbaker/personal/cf-linux) in Linux. Именно этот
документ лежал в основе этого мини-howto. Спасибо!
Ответственность?
А что это такое? :-)
Мнение автора по изложенному выше вопросу не является <<истиной
последней инстанции>>. Я лишь излагаю то, что проверил, попробовал,
<<пощупал>>... Мнения, выводы, результаты и утверждения автора могут
не совпадать с вашими, или кого-либо ещё. Данные в статье рекомендации
не следует воспринимать как руководство к действию. Все предложения,
которые вы, возможно, реализуете после прочтения этой статьи, вы
совершаете на свой страх и риск. Автор не берёт на себя
ответственности за любой ущерб, который может быть прямо или косвенно
причинен использованием рекомендаций, изложенных в данной статье.
Авторские права
Эта статья, а также её переводы, могут быть воспроизведены и
распространены полностью или частично на любом носителе физическом или
электронном, при условии сохранения этой заметки об авторских правах
на всех копиях. Коммерческое распространение разрешается и поощряется;
но автор статьи желал бы знать о таком использовании.
Все переводы и производные работы, выполненные на основании этой
татьи должны сопровождаться этой заметкой об авторских правах. Это
делается для предотвращения ограничения свободного распространения
этой статьи. Исключения могут составить случаи получения особого
разрешения у автора, с которым можно связаться по адресу приведенному
ниже.
Автор хотел бы распространить эту информацию по разным каналам, но при
этом сохранить авторские права и быть уведомленным о всех планах
распространения статьи. Если у вас возникли вопросы, обратитесь к
автору этой статьи по электронной почте: <hot-orange@narod.ru.>
Заметка про многокарточные кардридеры.
Оригинал: http://www.linuxshare.ru/docs/distro/fedora/FedoraFAQ.html#4.5
У меня есть USB card-reader для чтения разных видов флэш-карт. Но
система почему-то видит только одно устройство. Что делать?
Проблема в том, что ядро в Red Hat и Fedora Core собрано с выключеной
опцией CONFIG_SCSI_MULTI_LUN. Из-за этого ядро видит только первое SCSI
устройство на канале. Поскольку доступ к USB устройствам в Linux
делается через эмуляцию SCSI, то соответственно в card-reader'ах, где
несколько слотов под разные типы карт, всегда будет видно только одно
первое устройство, которое будет доступно в системе как /dev/sda.
Существует два пути решения проблемы. Первый - пересобрать ядро с опцией
CONFIG_SCSI_MULTI_LUN. Второй - воспользоваться одной хитрой
возможностью псевдофайловой системы /proc. Для этого сперва необходимо
узнать для первого USB устройства его SCSI интерфейс, channel, id и lun.
Сделать это просто. Нужно посмотреть в файл /var/log/messages после
загрузки системы. Вы увидите что-то вроде этого:
Nov 15 19:30:01 vitachi kernel: SCSI subsystem initialized
Nov 15 19:30:01 vitachi kernel: Initializing USB Mass Storage driver...
Nov 15 19:30:01 vitachi kernel: scsi0 : SCSI emulation for USB Mass Storage devices
Nov 15 19:30:01 vitachi kernel: Vendor: NEODIO Model: USB Storage-MMC Rev: 305M
Nov 15 19:30:01 vitachi kernel: Type: Direct-Access ANSI SCSI revision: 02
Nov 15 19:30:01 vitachi kernel: usbcore: registered new driver usb-storage
Nov 15 19:30:01 vitachi kernel: USB Mass Storage support registered.
Nov 15 19:30:01 vitachi kernel: Attached scsi removable disk sda at scsi0, channel 0, id 0, lun 0
Nov 15 19:30:01 vitachi kernel: Attached scsi removable disk sda at scsi0, channel 0, id 0, lun 0
Обратите внимание на текст, который выделен. Т.е. scsi0,
channel=0, id=0 и lun=0. Теперь выполняем хитрые манипуляции с файловой
системой /proc. Допустим у нас card-reader на четыре разных типа карт.
Первое псевдоустройство уже инициализировано. Остаётся инициализировать
оставшиеся три. Для этого выполняем следующие команды:
Эти команды заставляют ядро просканировать канал SCSI для поиска новых
устройств. После их выполнения вы увидите что-то типа этого:
Nov 15 19:30:08 vitachi kernel: Vendor: NEODIO Model: USB Storage-CFC Rev: 305M
Nov 15 19:30:08 vitachi kernel: Type: Direct-Access ANSI SCSI revision: 02
Nov 15 19:30:08 vitachi kernel: Attached scsi removable disk sdb at scsi0, channel 0, id 0, lun 1
Nov 15 19:30:08 vitachi kernel: Vendor: NEODIO Model: USB Storage-SMC Rev: 305M
Nov 15 19:30:08 vitachi kernel: Type: Direct-Access ANSI SCSI revision: 02
Nov 15 19:30:08 vitachi kernel: Attached scsi removable disk sdc at scsi0, channel 0, id 0, lun 2
Nov 15 19:30:08 vitachi kernel: Vendor: NEODIO Model: USB Storage-MSC Rev: 305M
Nov 15 19:30:09 vitachi kernel: Type: Direct-Access ANSI SCSI revision: 02
Nov 15 19:30:09 vitachi kernel: Attached scsi removable disk sdd at scsi0, channel 0, id 0, lun 3
Nov 15 19:30:10 vitachi scsi.agent[2739]: disk at /devices/pci0000:00/0000:00:1f.4/usb2/2-2/2-2:1.0/host0/0:0:0:1
Nov 15 19:30:10 vitachi scsi.agent[2749]: disk at /devices/pci0000:00/0000:00:1f.4/usb2/2-2/2-2:1.0/host0/0:0:0:2
Nov 15 19:30:10 vitachi scsi.agent[2759]: disk at /devices/pci0000:00/0000:00:1f.4/usb2/2-2/2-2:1.0/host0/0:0:0:3
Nov 15 19:30:10 vitachi scsi.agent[2759]: disk at /devices/pci0000:00/0000:00:1f.4/usb2/2-2/2-2:1.0/host0/0:0:0:3
Теперь в системе у вас должны стать доступными такие устройства как
/dev/sdb, /dev/sdc и /dev/sdd.