Ключевые слова:linux, port, module, kernel, port, printer, (найти похожие документы)
Date: Thu, 17 Dec 2001 04:46:05 +0400
From: Виталий Колесник
Newsgroups: http://chip.net.ua/61.htmlSubject: Как прикрутить несколько параллельных портов к Linux
Далее будет идти речь только о PCI параллельных портах производства IC
Book (г. Киев). О самих контроллерах здесь: http://www.icbook.com.ua
Для дальнейшей работы нам важно знать код производителя этих плат
(Vendor ID). Он имеет значение b00C (hex).
Порядок работы такой:
1. Установите в системный блок требуемое количество контроллеров
параллельного интерфейса (IC138).
2. Включите систему.
3. Загрузите систему и зарегистрируйтесь обязательно root'ом.
4. Просмотрите содержимое /proc/pci. Его примерный вид приведен ниже
PCI devices found:
Bus 0, device 0, function 0:
Host bridge: VIA Technologies, Inc. VT8601 [Apollo ProMedia] (rev
5).
Master Capable. Latency=8.
Prefetchable 32 bit memory at 0xd3000000 [0xd37fffff].
Bus 0, device 1, function 0:
PCI bridge: VIA Technologies, Inc. VT8601 [Apollo ProMedia AGP] (rev
0).
Master Capable. No bursts. Min Gnt=12.
Bus 0, device 7, function 0:
ISA bridge: VIA Technologies, Inc. VT82C686 [Apollo Super South]
(rev 64).
Bus 0, device 7, function 1:
IDE interface: VIA Technologies, Inc. Bus Master IDE (rev 6).
Master Capable. Latency=32.
I/O at 0xc000 [0xc00f].
Bus 0, device 7, function 4:
Class 0080: VIA Technologies, Inc. VT82C686 [Apollo Super ACPI] (rev
64).
IRQ 11.
Bus 0, device 7, function 5:
Multimedia audio controller: VIA Technologies, Inc. AC97 Audio
Controller (rev 80).
IRQ 11.
I/O at 0xcc00 [0xccff].
I/O at 0xd000 [0xd003].
I/O at 0xd400 [0xd403].
Bus 0, device 8, function 0:
Parallel controller: PCI device b00c:061c (rev 1).
IRQ 9.
I/O at 0xd800 [0xd83f].
Bus 0, device 9, function 0:
Parallel controller: PCI device b00c:061c (rev 1).
IRQ 10.
I/O at 0xdc00 [0xdc3f].
Bus 0, device 10, function 0:
Parallel controller: PCI device b00c:061c (rev 1).
IRQ 11.
I/O at 0xe000 [0xe03f].
Bus 1, device 0, function 0:
VGA compatible controller: Trident Microsystems CyberBlade/i1 (rev
106).
Master Capable. Latency=32.
Non-prefetchable 32 bit memory at 0xd1800000 [0xd1ffffff].
Non-prefetchable 32 bit memory at 0xd2000000 [0xd201ffff].
Non-prefetchable 32 bit memory at 0xd1000000 [0xd17fffff].
Там обязательно должны быть строки (по числу установленных IC138),
похожие на эти:
Parallel controller: PCI device b00c:061c (rev 1).
IRQ 9.
I/O at 0xd800 [0xd83f].
Здесь первая строка ≈ идентификатор контроллера. Она у вас может
отличаться от приведенной только номером ревизии (rev 1).
Далее приведен (IRQ 9) номер прерывания, которое было выделено данному
контроллеру. Запишите этот номер. Запишите также адрес ввода/вывода
(0xd800). Он может отличаться от приведенного.
Если в файле нет строки (строк) PCI device b00c
, расслабьтесь ≈ у вас проблемы с шиной PCI. Скорее всего проблема
решится настройкой BIOS.
Но без этих строк дальше двигаться нельзя.
Итак, добились от системы сообщения о номерах прерываний и адресах
памяти. Адреса нам важны и нужны, а без прерываний можно обойтись (как
≈ см. ниже).
5. Дать команду lsmod. В списке загруженных модулей, которые выводит
команда, проверить наличие модуля parport_pc (только для
PC-совместимых машин).
6. Открыть любым текстовым редактором файл /etc/modules.conf
Примерно он выглядит так:
pre-install pcmcia_core CARDMGR_OPTS=-f /etc/rc.d/init.d/pcmcia
start
alias sound-slot-0 via82cxxx_audio
alias scsi_hostadapter ppa
alias eth0 8139too
alias scsi_hostadapter1 ide-scsi
alias parport_lowlevel parport_pc !!!!! Вот интересующая нас
строка
alias scsi_hostadapter2 dpt_i2o
7. Если при проверке по п.5 модуля parport_pc
в списке не было, добавьте строку
alias parport_lowlevel parport_pc
в файл /etc/modules.conf.
8. После этой строки вручную добавьте следующую:
options parport_pc io=0x378,0xd800,0x0c00,0xe000 irq=7,9,10,11
В этой строке опции io=... перечисляют адреса ввода/вывода, которые вы
взяли из файла
/proc/pci (в п.4). Они соответствуют установленным контроллерам IC138.
Сколько контроллеров, столько и групп адресов. Первая из них (0x378)
относится к бортовому контроллеру, который интегрирован с материнской
платой. Остальные к IC138. Группа опций irq=... описывает занятые
контроллерами прерывания, также записанные ранее. Вместо цифровых
значений (в десятичной системе) можно указать none. Тогда прерывание
использоваться не будет. Например:
options parport_pc io=0x378,0xс000,0xe000 irq=7,10,none
В приведенной строке инициализируется три порта: бортовой и два PCI.
9. В каталоге /dev проверьте наличие файлов /dev/lp0, /dev/lp1,
/dev/lp2.
/dev/lp0 соответствует бортовому порту (точнее, перечисленному первым
в строке адресов и прерываний).
Так в приведенном примере
io=0x378 соответствует /dev/lp0 (бортовой)
io=0xс000 соответствует /dev/lp1 (первый PCI)
io=0xe000 соответствует /dev/lp2 (второй PCI).
Если вы используете три и более PCI контроллеров, понадобится создать
для них файлы устройств lp3, lp4 и т.д. Используйте следующие команды:
mknod /dev/lp3 c 6 3
mknod /dev/lp4 c 6 4
И т.д.
10. Перезагрузите машину. В процессе загрузки (если подключенные к
портам принтеры включены) вы увидите, что они проинициализировались.
Матричный принтер при инициализации обычно позиционирует головку. Его
и можно использовать для проверки правильности сделанных изменений.
Если принтеры инициализируются задача решена. Пользуйтесь.
Имейте в виду, что на порт можно подключать не только принтеры, но и
другие параллельные устройства. Например ZIP или сканнер.
Проверено. Работает.
Примечание:
1. Перегружать систему не обязательно. Можно использовать команду
insmod.
2. На практике все проверено на дистрибутиве Mandrake 8.0. Для других
дистрибутивов может потребоваться некоторая корректировка путей к
файлам или файлы называются несколько иначе.
Виталий Колесник, Киев
17.12.2001