Маленькие грабельки, которые могут больно ударить
Вонзаем USB-штепсель карт ридера в порт, втыкаем в карт ридер карточку и, затаив дыхание, ждём радостных сообщений dmesg. Если нам очень повезло и они появились - не спешите. Очень может быть, что обнаружен только первый слот card reader. На моём кардридере Transend это был MemoryStick, которого у меня не было никогда. На втыкание остальных карт он не реагировал. Почему?
Немного теории
Дело в том, что в Linux USB рассматривается как протокол "поверх SCSI" со всеми вытекающими последствиями. А именно: на одном шлейфе SCSI может висеть несколько устройств, которые общаются с системой независимо. Поддержка этой возможности (LUN - Logical Unit Numbers) в ядре есть, но она может быть выключена. Таким образом, для успешной работы многослотовых карт ридеров нужно, чтобы в ядре было включено:
---SCSI Support (Выделенное красным полужирным шрифтом - обязательно включить, иначе будете видеть только первый слот. Эту одну маленькую опцию я искал неделю, но вам теперь будет легче.CONFIG_SCSI
,scsi.o)
---SCSI disk support (CONFIG_BLK_DEV_SD
,sd_mod.o
)
---SCSI generic support (CONFIG_CHR_DEV_SG
,sg.o
)
---Probe all LUNs on each SCSI device (CONFIG_SCSI_MULTI_LUN
)
---Support for USB (CONFIG_USB
,usb.o
)
---Preliminary USB device file system (CONFIG_USB_DEVICEFS
)
---USB ECHI HCD (CONFIG_USB_EHCI_HCD
,usb-ehci-hcd.o
), UHCI (CONFIG_USB_UHCI
,usb-uhci.o
), OHCI (CONFIG_USB_OHCI
,usb-ohci.o
)
---USB Mass Storage support (CONFIG_USB_STORAGE
,usb-storage.o
)
Что делать?
1. Если ядро пересобирать не хочется/не можется/ не умеется, то делаем, как сказано здесь:
Дайте команду:echo "scsi scsi-add-single-device">/proc/scsi/scsi Например, для шестипортового кардридера:
root@localhost# echo "scsi add-single-device 1 0 0 5" > /proc/scsi/scsi
root@localhost# echo "scsi add-single-device 1 0 0 4" > /proc/scsi/scsi
root@localhost# echo "scsi add-single-device 1 0 0 3" > /proc/scsi/scsi
root@localhost# echo "scsi add-single-device 1 0 0 2" > /proc/scsi/scsi
root@localhost# echo "scsi add-single-device 1 0 0 1" > /proc/scsi/scsi
root@localhost# echo "scsi add-single-device 1 0 0 0" > /proc/scsi/scsi
2. Если ядро пересобрать - не проблема, то включаем там поддержку SCSI (как написано выше) с обязательной опцией Probe All SCSI LUNs. После этого картридер будет читать ваши флеш-карты во всех портах, а флешки будут видны как SCSI-диски, т.е. sda и партиции sda1 sda2 и так далее. Если руками монтировать лениво (и это правильно), пишем в /etc/fstab новую строчку:
Всё. После этого флеш-карты карт ридером воспринимаются и читаются/пишутся нормально. Не забываем отмонтировать флешки перед вытыканием :-)/dev/sdc1 /mnt/sd vfat user,noauto,sync,noexec,nosuid,nodev,iocharset=koi8-r,codepage=866 0 0
Ссылки:
Кроме личных страданий, были использованы источники:
http://www.linux-sxs.org/hardware/flashreaders.html
http://www.cs.sfu.ca/%7Eggbaker/personal/cf-linux
http://hot-orange.narod.ru/chtivo/card-reader.htm
http://ru.wikibooks.org/wiki/LOR-FAQ-Hardware
http://www.ladoshki.com/?articles&id=139
Купил 4-х слотовый USB-кардридер, так что для меня написанное оказалось чрезвычайно полезным. Теперь rfhlhblth работает. Очередное спасибо, уважаемый virens. :)
ОтветитьУдалитьchitatel
2 chitatel
ОтветитьУдалитьКупил 4-х слотовый USB-кардридер, так что для меня написанное оказалось чрезвычайно полезным.
Рад. В современных дистрибутивных ядрах это должно быть включено по умолчанию, а если ядро Linux самосборное, то очень просто это забыть. И долго удивляться, отчего кардридер ничего не видит.
Теперь rfhlhblth работает.
Ага, понял :-) Я за ваш rfhlhblth очень рад :-)))
Очередное спасибо, уважаемый virens. :)
Пожалуйста. Я эту опцию нашёл только после пятой попытки собрать ядро :-)
Запомнилось надолго...