div.main {margin-left: 20pt; margin-right: 20pt}Подключение принтера (parport + kernel > 2.1.32)
Дмитрий Румянцев netmarina@kaluga.ru http://dimitr.obninsk.net/
Не так давно вместе с материнской платой от
ABIT мне в руки попал дистрибутив Gentus Linux 2.0, построенный на
базе RedHat 6.1 с ядром 2.2.13, который был незамедлительно
проставлен в конфигурации GNOME Workstation. Дистрибутив сначала
вызвал неоднозначное мнение о его пригодности, однако, когда через
пару дней в моем распоряжении была вполне работоспособная рабочая
GNOME-станция, я понял, что жизнь не так уж плоха, как кажется. И
вот тут я с удивлением обнаружил, что в ядре напрочь отсутствует
понятие lp.
# cat /proc/devices Character devices: 1 mem 2
pty 3 ttyp 4 ttyS 5 cua 7 vcs 10 misc 14
sound 29 fb 36 netlink 128 ptm 136 pts 162
raw
Block devices: 1 ramdisk 2 fd 3 ide0 9
md 22 ide1
До этого момента я работал в RedHat 5.2
(kernel 2.0.36), и никаких проблем с печатью не испытывал. Запустив
printtool и установив Canon BJC-210, я и думать перестал о
параллельных портах и иже с ними. В ситуации с
Gentus Linux дело обстоит в следующем. Начиная с ядра 2.1.33 (для
ядра 2.0.30 доступно в виде патча) устройство lp является
клиентом нового устройства parport. Введение
parport решает некоторые проблемы, связанные с lp
- теперь можно разделять параллельные порты с другими драйверами,
динамически связывать порты с устройствами, не устанавливая жесткого
соответствия между адресами I/O и номером порта и т. д. Основное
отличие состоит в том, что появилась возможность динамического
связывания номера порта с lp - устройствами.
parport состоит из двух модулей - общего, который
обеспечивает разделение порта, и архитектурно - зависимого, который
отвечает за использование порта на данной платформа, орабатывая все
операции ввода-вывода. Большинство BIOS
распознают параллельный порт как устройство PnP. Вообще, это
достаточно забавно, зачем было городить огород для такого
тривиального устройства. Лучше будет отключить режим PnP, установив
"LEGACY", "ISA" или "0x378" (у меня - 0x378), так как бывает, что
драйвер порта не находит его. Я еще не
встречал дистрибутива Linux, в котором при инсталляции заполнялся бы
/etc/modules.conf (за исключением сетевого интерфейса и
иногда звуковой карты), поэтому сначала подключим LPT1 вручную, а
затем автоматизируем этот процесс. Просмотрим список загруженных
модулей:
# lsmod Module
Size Used by nls_cp437 3548
1 (autoclean) vfat
9308 1
(autoclean) fat
30304 1 (autoclean)
[vfat] opl3
11208
0 sb
33524 0 uart401
5936 0 [sb] sound
58424 0 [opl3 sb
uart401] soundlow 300 0
[sound] soundcore 2404 6 [sb
sound]
Как видно, нет ничего, связанного с параллельным портом.
Загружаем модуль (все модули лежат в /lib/modules/`uname
-r`/misc):
# insmod parport.o
Затем необходимо загрузить архитектурно - зависимый модуль:
# insmod parport_pc.o io=0x378 irq=7
Или, если есть второй параллельный порт,
# insmod parport_pc.o io=0x378,0x278 irq=7,auto
В первом случае parport загружается для
единственного порта с параметрами I/O address = 0x378, IRQ = 7 на
платформе PC (для Sun Ultra/AX, например, необходимо загружать
parport_ax). Во втором случае присутствуют 2 порта - LPT1 (I/O
address=0x378) и LPT2 (I/O address=0x278, IRQ назначается
автоматически). После загрузки
parport_pc можно протестировать принтер. Включите принтер и
загрузите parport_probe
# insmod parport_probe.o parport0: Printer, BJC-210
(Canon)
OK, принтер найден. В
каталоге /proc/parport создаются файлы, содержащие
информацию о параллельном порте и устройствах, подключенных к нему
(<X> обозначает номер порта)
/proc/parport/<X>/devices - спиcок
драйверов устройств, используемых портом. "+" отмечает устройства,
используемые в настоящее время.
/proc/parport/<X>/hardware -
Базовый адрес I/O, IRQ и канал DMA.
/proc/parport/<X>/irq - IRQ,
которое parport использует. Вынесено в отдельный файл для
возможности ручного изменения.
/proc/parport/<X>/autoprobe -
Информация о любом устройстве, совместимом с IEEE-1284 (Zip,
принтер), которое подключено к порту.
После того, как с parport'ом разобрались, остается
назначить порты.
# insmod lp.o parport=0
Все! Выполняем для проверки обычное `ls > /dev/lp0`.
Если после этого просмотреть список загруженных модулей, то увидим
следующее:
#
lsmod Module
Size Used by parport_probe
2980 0
(autoclean) parport_pc
5592 1
(autoclean) lp
5052 0
(autoclean) parport
7060 1 (autoclean) [parport_probe parport_pc
lp] ....
Осталось самое малое - автоматизировать процесс инициализации
порта. Для этого добавим в /etc/conf.modules следующие
строки:
alias parport_lowlevel parport_pc options parport_pc
io=0x378 irq=7 lp=parport0
Перезагружаемся, проверяем список загруженных модулей, проверяем
печать с консоли, и запускаем X. Далее следут обычная настройка
принтера через printtool.
|