Linux - статьи

         

У меня есть 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

Обратите внимание на текст, который выделен красным. Т.е. channel=0, id=0 и lun=0. Теперь выполняем хитрые манипуляции с файловой системой /proc. Допустим у нас card-reader на четыре разных типа карт. Первое псевдоустройство уже инициализировано. Остается инициализировать оставшиеся три. Для этого выполняем следующие команды:

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

Эти команды заставляют ядро просканировать канал 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

Теперь в системе у вас должны стать доступными такие устройства как /dev/sdb, /dev/sdc и /dev/sdd.


Содержание раздела







Forekc.ru
Рефераты, дипломы, курсовые, выпускные и квалификационные работы, диссертации, учебники, учебные пособия, лекции, методические пособия и рекомендации, программы и курсы обучения, публикации из профильных изданий