Левая панель

Главное окно

Корзина
Admin-World - администраторы всех стран обьеденяйтесь Тема Home News Downloads Tutorials WebLinks Login to JoomlaCurve

  Панель
 
Главное меню
Главная
Новости
Поиск
Библиотека
Форум
Авторизация





Забыли пароль?
Ещё не зарегистрированы? Регистрация
Статистика
 
     
Главная arrow Библиотека arrow Linux arrow Подключение флэш-диска к компьютеру с ОС Linux
 
Реклама

 

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

Печать E-mail
название статьи: подключение флэш-диска к компьютеру с ОС 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 с http://www.kernel.org

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' с сайта: http://linux-usb.org, с моими дополнениями.

Некоторые дистрибутивы (в особенности 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.
 
« Немного о модемах.   Варианты решения проблем со смещением геометрии монитора. »

 
  Админ World