|
Автор/Источник: Andrew Kosovich» 01.04.2005 01:22, просмотров сегодня: 1, всего: 9918
статья размещена в группе: КПК в работе (для профессионалов)
оценка: 2.889, 18 голосов
Для владельца карманного компьютера карта памяти давно перестала быть чем-то
диковинным. С ростом производительности КПК росли и объемы памяти самих карт,
что повлекло за собой повышение требований: теперь пользователю некогда ждать,
пока файлы будут медленно заливаться на карточку через КПК: Решением вопроса
скорости и удобства, естественно, является покупка CardReader-а. Как правило,
они рассчитаны на подключение посредством порта USB. Также часто в одном устройстве
предусмотрено несколько слотов для разных типов карт памяти. Именно такой тип
CardReader-а мы рассмотрим.
Статья написана с расчетом на то, что у пользователя уже включена поддержка
портов USB и устройств SCSI. (вкомпилирована в ядро или посредством модулей). Практически все CardReader-ы работают как устройства USB Mass Storage. Причем,
для каждого слота определено отдельное устройство. Такие устройства в Linux
рассматриваются как устройства SCSI. Но так как физически они работают через
один порт USB, то эти устройства разделены логически (Logical Unit). Поскольку
в реальности аппаратные устройства SCSI с логическими устройствами внутри встречаются
довольно редко, то в Linux по умолчанию отключена проверка на их наличие. Таким образом, система определит лишь одно логическое
устройство, то есть у нас будет доступ лишь к одному слоту: тому, у которого
логический порядковый номер (Logical Unit Number — LUN) равен 0. Самым простым методом включения поддержки нескольких логических устройств на
SCSI устройстве есть добавление строчки в файл настройки загрузчика Linux, где
и будет указываться их максимальное число.
Открываем /etc/lilo.conf и добавляем в секцию загрузки Linux такую строчку:
append="max_scsi_luns=8"
(число 8 выбрано с запасом. т.е. будет включена поддержка вплоть до 8 логических
устройств на одном физическом SCSI)
У меня это выглядит так:
Листинг 1 |
# Linux bootable partition config begins
image = /boot/vmlinuz
root = /dev/hda4
label = Linux
append="max_scsi_luns=8"
read-only # Non-UMSDOS filesystems should be mounted read-only for checking
# Linux bootable partition config ends
|
Сохраняем файл и даем команду lilo для того, чтоб сохранить только что измененные настройки в сам загрузчик (если вы грузитесь дискеты, то не забудьте вставить ее перед запуском команды lilo). После этого следует перезагрузить компьютер. Если CardReader еще не подключен,
то, как раз самое время это сделать. После того, как система загрузилась, удобнее
всего посмотреть сообщения ядра, чтоб узнать, какой слот соответствует какому
устройству в операционной системе. Для этого вводим команду dmesg.
Вот пример того, как CardReader был определен у меня:
Листинг 2 |
usb.c: registered new driver usb-storage
scsi1 : SCSI emulation for USB Mass Storage devices
Vendor: OTi Model: CF CARD Reader Rev: 2.00
Type: Direct-Access ANSI SCSI revision: 02
Vendor: OTi Model: SM CARD Reader Rev: 2.00
Type: Direct-Access ANSI SCSI revision: 02
Vendor: OTi Model: SD CARD Reader Rev: 2.00
Type: Direct-Access ANSI SCSI revision: 02
Vendor: OTi Model: MS CARD Reader Rev: 2.00
Type: Direct-Access ANSI SCSI revision: 02
Attached scsi removable disk sda at scsi1, channel 0, id 0, lun 0
Attached scsi removable disk sdb at scsi1, channel 0, id 0, lun 1
Attached scsi removable disk sdc at scsi1, channel 0, id 0, lun 2
Attached scsi removable disk sdd at scsi1, channel 0, id 0, lun 3
|
Как видим, в первой части листинга 2 написаны названия определившихся устройств
в порядке определенных у них LUN (номеров логических устройств). Ниже (начиная
со слова Attached) в том же порядке написано, с какими устройствами (/dev) они
связаны. К примеру, нам необходим доступ к слоту SD. В первой части, как видно,
он третий по порядку. Во второй части видим, что третий съемный диск (removable
disk) сопоставлен sdc. (для удобства нужные строки листинга я выделил
жирным шрифтом)
Итак, слот SD у нас представлен как /dev/sdc. Но так как нам нужен доступ не
к слоту, а к карточке туда вставленной, а точнее к ее первому (и, скорее всего,
единственному) разделу, то будем непосредственно обращаться к нему: /dev/sdc1.
Собственно монтирование карточки стандартно, но чтоб поддерживались длинные
имена на FAT16 (именно такая файловая на картах памяти, отформатированных на
Palm) надо монтировать с дополнительными опциями:
mount -t vfat -o check=s /dev/sdc1 /mnt/sd
Также, будет полезным добавить в файл /etc/fstab такую строчку:
/dev/sdc1 /mnt/sd vfat user,noauto,sync,noexec,nosuid,nodev,iocharset=koi8-r,codepage=866
0 0
Такие строчки необходимо добавить для всех логических устройств CardReader-а.
Краткое описание опций по порядку:
user - разрешает пользователям монтировать карточку
noauto - не пытаться монтировать карточку при загрузке
sync - не кешировать запись, т.е. сразу записывать на карточку
noexec, nosuid, nodev - вряд ли нам понадобится запускать программы
или монтировать на карточку устройства
iocharset=koi8-r — кодировка для работы с файлами (использовать, если
настроена локаль)
codepage=866 - кодировка файловой системы (стандартно для FAT)
Если мы задали такие настройки в файле /etc/fstab, то процедура монтирования
немного упрощается:
mount /mnt/sd
Все настройки (что, откуда и как монтировать) будут браться из того самого файла. Собственно на этом и заканчивается настройка CardReader-а в Linux.
Отдельное спасибо 2 Kors, 2 Daryna за советы и поддержку.
|