Наши
Сайдбары
   
IRC-канал
Linuxportal.ru
   
Импорт новостей
 
Вход Быстрая регистрация На главную

Поиск:
 
   БИБЛИОТЕКА
     Другие статьи этого раздела:
 

    Hardware
Другие разделы библиотеки:
   БИБЛИОТЕКА
     последние поступления:
 

Hardware
Перевод Serial-Programming-HOWTO
15.05.2006 | San АНДРЕЕВ
Перевод Linux Power Management Support
03.04.2004 | San АНДРЕЕВ
Варианты решения проблем со смещением геометрии монитора.
10.10.2003 | EsTaF
Multimedia
VideoCD для пингвинов
10.10.2003 | Buddha
Смотрим любимые фильмы с помощью MPlayer
23.07.2003 | Alexey Dmitriev
X-сервер
Включаем Bytecode Interpreter в пакете freetype в некоторых дистрибутивах
05.07.2006 | Alexey Dmitriev
НАСТРОЙКА СЕРВЕРА XDMCP ДЛЯ WINDOWS-КЛИЕНТОВ
09.09.2004 | Kotjara
Type1 и truetype шрифты в LaTeX.
03.05.2004 | geekkoo
Разное
Как самому написать концепцию информационной безопасности
22.03.2007 | Crion
Список рекомендуемой литературы
11.09.2006 | San АНДРЕЕВ
The Multi Router Traffic Grapher
02.06.2004 | Crion
Сеть
"Огненная стена" или строим файрвол на базе iptables
15.03.2005 | Alexey Dmitriev
Защищенная почтовая система
08.09.2004 | Crion
Postfix+Cyrus-SASL
18.12.2003 | geekkoo
Система
Написание драйверов под Linux: рекомендации, типичные ошибки и ловушки.
16.01.2007 | Mr.Nobody
Перевод Linux Daemon HOWTO
21.08.2006 | San АНДРЕЕВ
Усыпляем компьютер
11.01.2006 | San АНДРЕЕВ
   БИБЛИОТЕКА Hardware    
Автор статьи: San АНДРЕЕВ
Дата: 23.07.2003

Подключение флэш-диска к компьютеру с ОС Linux

название статьи: подключение флэш-диска к компьютеру с ОС Linux
версия: 0.1
ключевые слова для поиска: подключение настройка flash-drive флэш-диск linux линукс usb

1. Введение.
Для переноса небольших количеств информации (единицы-десятки мегабайт) очень удобны устройства флэш-памяти или, как их еще называют флэш-диски (flash-drive). Они небольшого размера, энергонезависимы, очень просты в использовании и не требуют выключения или перезагрузки компьютера при подключении. В Linux есть все возможности для использования этих устройств в качестве сменных носителей небольшой емкости.

Все нижеследующее вы соглашаетесь использовать на свой страх и риск. Мы опубликовали это без каких-либо гарантий, но с надеждой на то, что это может оказаться полезным.

2. Общие соображения.
Одной из приятных особенностей USB является то, что подключенные к ней устройства являются hot-pluggable по умолчанию, то есть их можно подключать и отключать без выключения питания системного блока. Дополнительным плюсом к этому является еще и то, что устройства распознаются сразу при подключении и в частном случае флэш-диска его остается только подмонтировать (либо вообще ничего не остается при использовании automount). Аналогично можно использовать и USB-фотоаппараты.

Доступ к USB-устройствам в Linux осуществляется через эмуляцию шины SCSI, поэтому необходимо осуществить соответствующую поддержку в ядре.

3. Исходные данные.
Ядро из ветки 2.4 или последние версии ядер из ветки 2.2 с

4. Конфигурирование ядра.
Весьма возможно, что в вашем ядре (особенно это характерно для последних версий дистрибутивов) все необходимое уже включено и собрано, поэтому для вас имеет смысл сразу попробовать рекомендации, приведенные в следующем пункте. Если же вы в этом не уверены или в вашем дистрибутиве такой поддержки нет, или еще что-нибудь, то вам придется переконфигурировать и пересобрать ваше рабочее ядро.

Для использования флэш-дисков в ядре должны быть включены следующие опции (пример из конфига ядра 2.4.20):

CONFIG_HOTPLUG = y
CONFIG_PNP = y
CONFIG_SCSI = m
CONFIG_BLK_DEV_SD = y
CONFIG_SCSI_MULTI_LUN = y # необязательно
CONFIG_SCSI_CONSTANTS = y # необязательно
CONFIG_SCSI_LOGGING = y # необязательно
CONFIG_USB = m
CONFIG_USB_DEBUG = y # необязательно
CONFIG_USB_DEVICEFS = y
CONFIG_USB_EHCI_HCD = m # USB 2.0
CONFIG_USB_UHCI_ALT = m # на всякий случай, если чипсетом не поддерживается предыдущая опция
CONFIG_USB_STORAGE = m
CONFIG_USB_STORAGE_DEBUG = y # необязательно

(это часть вывода команды make config)

При сборке ядра не забываем про make modules и make modules_install.

5. Настройка системы.
После сборки и инсталляции ядра в /lib/modules/`uname -r`/kernel/drivers (здесь апострофы обратные) должны появиться каталоги scsi и usb. В них (кроме всего остального) должны быть следующие файлы:

# ls scsi
scsi_mod.o sd_mod.o
# ls usb
hcd storage uhci.o usbcore.o
# ls usb/hcd
ehci-hcd.o
# ls usb/storage
usb-storage.o

Теперь надо загрузиться с новым ядром и попробовать следующее (либо сразу скомандовать lsmod) в указанной последовательности:

# modprobe scsi_mod
# modprobe usbcore
# modprobe usb-storage
# modprobe uhci

Все четыре модуля должны присутствовать в выводе команды lsmod. Если вы получаете сообщения вроде 'Unresolved symbols ...', то возможно вы работаете не с тем ядром или перед make modules_install не удалили каталог /lib/modules/`uname -r` (это актуально только для тех, кто пересобирал ядро) и присутствовавшие там модули от старой сборки конфликтуют с модулями от новой.

Если ваш чипсет поддерживает USB 2.0, то вместо

# modprobe uhci

можно попробовать скомандовать

# modprobe ehci_hcd log2_irq_thresh=0xnn

где nn - номер прерывания, на котором 'висит' ваш USB хост-контроллер. Если в выводе этой команды встретится фраза 'init_module: No such device', то это означает, что USB 2.0 вашим чипсетом все-таки не поддерживается.

Теперь можно попробовать подключить флэш-диск к компьютеру. В /proc/scsi должен появиться каталог usb-storage-N, а вывод

# cat /proc/scsi/scsi

должен дать информацию о диске среди прочих Attached devices (если у вас есть еще scsi-устройства) - Host, Channel, Id, Lun, Vendor, Model, Type, Rev. Если всего этого не произошло, но модули загрузились в память успешно (команды modprobe ... чуть выше по тексту), то скорее всего у вас просто выключена поддержка USB в BIOS.

Если других SCSI-устройств в системе нет, то этот диск обозначается через /dev/sda1. Т.к. они поставляются чаще всего отформатированными в ФС VFAT, то теперь для работы с диском достаточно отдать такую команду:

# mount -t vfat /dev/sda1 /mnt/flash

(при условии, что каталог /mnt/flash уже существует к этому моменту) - и каталог /mnt/flash доступен для чтения/записи (будьте внимательны - запись во флэш может блокироваться ключом на корпусе диска).
Чтобы не писать такую длинную команду каждый раз, достаточно добавить в /etc/fstab такую строку:

/dev/sda1 /mnt/flash vfat noauto,iocharset=koi8-r,codepage=866 0 0
# это в случае локали koi8-r

и монтировать его потом при помощи команды

# mount /mnt/flash

САМОЕ ГЛАВНОЕ. Перед отключением диска не забудьте его отмонтировать, иначе записанных на него в процессе работы файлов физически может там не оказаться.

6. Замечания.
Конечно, флэш-диск можно переформатировать в нужную файловую систему как и обычный диск. В reiser его форматить не рекомендую - почти треть емкости уходит под журнал. :)

Скорость чтения/записи большого файла при VFAT-форматировании по показаниям MC - 600-800 КБ/сек.

На каждый день четыре команды загрузки модулей (modprobe ... выше по тексту) можно поместить в какой-нибудь из rc-файлов (например в rc.local) для того, чтобы они загружались при каждой загрузке системы. Весьма возможно, что все останется работоспособным и при сборке монолитного ядра (в контексте поддержки SCSI и USB) - просто я не пробовал.

Еще у SCSI-устройств есть одна неприятность - стоит добавить еще один диск и для доступа к флэш-диску надо будет использовать /dev/sdb. Чтобы не заморачиваться именованием, воспользуемся devlabel (в случае ReHat, для Slackware или CRUX и им подобных поддержку devlabel придется добавлять самостоятельно), которая к тому же прекрасно интегрируется с hotplug. Сначала опросим идентификатор:

# devlabel printid -d /dev/sda
S:GENERICUSBDisk2.0

После добавим его под управление devlabel:

# devlabel add -s /dev/smartcardreader -u S:GENERICUSBDisk2.0 --partnum 1 --automount

чтобы флэш-диск всегда был доступен через /dev/smartcardreader и пусть монтирование выполняется автоматически.

Осталось только определить соответствующую файловую систему в /etc/fstab:

/dev/smartcardreader /mnt/flash vfat noauto,user,codepage=866,iocharset=utf8 0 0
# в случае локали utf8

Небольшое замечание - после имени устройства /dev/smartcardreader используйте хотя бы один пробел. Не нажимайте табуляцию! И, конечно, поставьте свою кодировку в iocharset.

7. Еще одно замечание.
Если к Вам попал многоформатный считыватель флеш-карт, например '6 in 1 USB2.0 Flash Drive', то Вы можете наткнуться на отсутствие реакции системы на вставляемую карту.

Поэтому ниже приводится пересказ кусочка документации 'Linux USB Frequently Asked Questions' с сайта: с моими дополнениями.

Некоторые дистрибутивы (в особенности RedHat) выключают в конфигурации ядра опцию CONFIG_SCSI_MULTI_LUN. Из-за этого usb-storage не может автоматически определить все вставляемые карточки. Вы можете либо перекомпилировать ядро, включив указанную опцию, либо попробывать следующее действие:

echo >/proc/scsi/scsi "scsi add-single-device 1 0 0 1"

Первая 1 - это host id. Если выполнить "cat /proc/scsi/scsi", то можно увидеть, что-то типа:

...
Host: scsi1 Channel: 00 Id: 00 Lun: 00
Vendor: SMSC Model: USB 2 HS-CF Rev: 0.@9
Type: Direct-Access
...

Т.е. в данном случае, scsi1 и указывает на host id, равный 1. Заметьте также, что на данном LUN (логическом модуле) обслуживается формат CompactFlash (HS-CF). Обычно, SCSI устройство не использует логические модули, т.е. он всегда один. Но в данном случае, мы как раз и сталкиваемся со SCSI устройством с несколькими логическими модулями.
Второй 0 - канал, который для usb-storage, вроде бы, должен быть равен 0.
Третий 0 - для usb-storage всегда должен быть равен 0.
А четвертый параметер и есть искомый LUN. Обратите внимание, что в данной команде нумерация LUN'ов идет с 1, а в файле /proc/scsi/scsi с нуля.
Данная команда должна быть повторена по всем LUN'ам, которые поддерживаются многоформатным устройством. После выполнения каждой из команд, появляются все новые поддерживаемые устройством форматы, например:

...
Host: scsi1 Channel: 00 Id: 00 Lun: 03
Vendor: SMSC Model: USB 2 HS-SD/MMC Rev: 0.@9
Type: Direct-Access ANSI SCSI revision: 02
...

т.е. SecureDigital/MultiMediaCard.

8. Авторы.
Logvinon
San АНДРЕЕВ

Обоснованные исправления и дополнения приветствуются.



Все статьи раздела "Hardware"

©"Linuxportal.Ru". Материалы сайта можно
использовать свободно при условии
сохранения этой свободы при дальнейшем
распространении, если явно не указано иное

Дизайн и программирование:

Поставьте
нашу кнопку:
Получить код кнопки
Linux Portal.ru ::: Линукс Портал.ру
Наш партнер: