После выхода первой версии этого Mini-HowTo множество людей спрашивало меня о PLIP соединении между компьютерами с Linux и DOS (или Windows). Общий интерес побудил меня добавить этот раздел. Надеюсь, он многим поможет.
Раздел основан на статье James McDuffie <mcduffie@scsn.net>, найденной мной в Linux Gazzette. Описываются основы настройки PLIP соединения между Linux и DOS, с использованием Windows и Trumpet WinSock. Также приведен адрес замечательной программы, позволяющей вам запускать X-Windows программы из Windows.
Последняя часть - это приложение, присланное James Vahn jvahn@short.circuit.com , где он подробно рассказывает, как настроить это соединение и решить множество проблем.
С любыми вопросами по этому разделу обращайтесь не ко мне, а к нему.
Предполагается, что вы уже настроили поддержку PLIP на Linux, и у вас есть нужный кабель. Если нет, то обратитесь к предыдущим разделам.
Итак, в первую очередь, для DOS нужен пакетный драйвер. Его можно найти здесь:
ftp://ftp.crynwr.com/drivers/plip.zip
Программа запускается под DOS и работает так же, как пакетный драйвер для сети. Если PLIP нужен для работы с Windows, то вам, кроме того, понадобится Trumpet Winsock. Он служит TCP/IP интерфейсом. Если работа с Windows не требуется, то вам, вероятно, следует поискать программное обеспечение для работы TCP/IP под DOS.
Вернитесь к компьютеру с Linux и добавьте адрес компьютера с DOS в /etc/hosts. Если у DOS компьютера нет постоянного IP адреса, то можно взять любой (помните о предупреждении об IP адресах в разделе 3).
Предположим, что вы выбрали для компьютера с Linux имя linux, а для компьютера с DOS - имя dos. Тогда вам нужно набрать:
ifconfig plip1 linux pointopoint dos arp up route add dos |
Само собой разумеется, что если вам нужно делать это при каждой загрузке компьютера с Linux, то вы можете внести эти строки в файл /etc/rc.d/rc.inet1:
/sbin/ifconfig plip1 linux pointopoint dos arp up /sbin/route add dos |
Эти команды настраивают интерфейс и добавляют путь к нему. Если у вас используется второй параллельный порт, то, естественно, вместо plip1 надо писать plip2.
Вернитесь к машине с DOS/Windows и подправьте файл autoexec.bat, добавив в него следующие строки.
c:\plip\plip.com 0x60 c:\tcpip\winsock\winpkt.com 0x60 |
Предполагается, что вы поместили plip.com (пакетный драйвер) в каталог c:/plip, а winpkt.com в c:/tcpip, если нет, то исправьте пути. Первая команда настраивает plip.com на пакетный вектор (packet vector) 0x60, а вторая загружает программу winpkt.com, входящую в комплект trumpet winsock, на тот же вектор. Она необходима для того, чтобы сделать доступным пакетный вектор под Windows. Если кабель подсоединен не к lpt1, то укажите plip.com другой адрес ввода/вывода и irq. Перейдем к настройке Trumpet Winsock. Все, что нужно сделать - отключить SLIP или PPP и ввести 60 в поле "Пакетный вектор" (Packet vector). Затем введите выбранный вами IP адрес, в качестве шлюза по умолчанию, укажите IP адрес машины с Linux в качестве сервера имен (Name Server) - IP адрес вашего компьютера или адрес вашего Internet провайдера, если вы планируете подсоединяться к Internet (сейчас или позже). Закройте программу настройки и перезапустите Winsock. После этого все должно заработать. Если хотите, можете поместить winsock в группу автозагрузки.
Если вам нужен доступ к Internet из Windows через Linux, то необходимо настроить IP-маскарадинг (IP Masquerading) - о том, как это сделать, читайте в NET-2-HOWTO. Смысл в том, чтобы компьютер с Windows был "спрятан" от остальной сети за IP адресом компьютера с Linux.
Кроме того, я нашел программу, позволяющую запускать программы X-Windows из под Windows. Она находится на:
Установите его в соответствии с указаниями, после чего можно зайти telnet-ом с компьютера c Windows, установить дисплей на него (например "DISPLAY=duncan:0.0") и запустить нужную программу. Нет ничего лучше, чем запускать xv под Windows!
ПРИМЕЧАНИЕ: Я получил этот документ от James Vahn jvahn@short.circuit.com, и поместил сюда без изменений. Это означает, что в любом вопросе, касающемся этого документа, он разбирается гораздо лучше меня, поэтому пишите, пожалуйста, ему, а не мне. Его опыт по PLIP соединению компьютера под DOS с одним только флоппи-дисководом с компьютером под Linux - отличный пример того, как можно справляться с общими проблемами.
Последнее обновление сделано 11 июля 1996
Мой компьютер с одним только дисководом, работающий под DOS, соединен через PLIP со вторым портом принтера на машине с Linux. К первому порту принтера на Linux подключен принтер. Оба порта постоянно работают. Под DOS выполняется telnet на машину с Linux. Ниже идут заметки о том, как я этого добился.
Если вы не исключили явно порты принтера из поиска, то ядро найдет их (причем все). Иначе PLIP ничего не получит. Один из способов - загружать драйвера по мере необходимости, как модули...
<gniibe@mri.co.jp> пишет:
Я по-прежнему рекомендую компилировать PLIP/LP, как модули ядра, так как
модули позволяют гибко менять конфигурацию
(пере)компилирование ядра - не такая уж простая процедура для начинающих пользователей
сосуществование PLIP и LP возможно только с помощью модулей
С PLIP/LP в виде модулей вы можете указать, какой порт используется PLIP, а какой - LP. Пример:
# insmod lp.o io=0x378 # insmod plip.o io=0x278 irq=2 |
Вы даже можете использовать два параллельных порта:
# insmod plip.o io=0x278,0x3bc irq=2,5 |
В предыдущем примере,
plip0 назначается адрес 0x278 и irq 2,
plip1 назначается адрес 0x3bc и irq 5, соответственно.
Использование модулей - это безусловно предпочтительный способ. Есть другой, показанный ниже - патч ядра для использования принтера и PLIP на разных портах без использования модулей. Если вы не знакомы с модульной концепцией, то вам, возможно, он покажется проще.
Наверно придется изменить два файла из исходных текстов ядра. Я использовал ядро версии 1.2.13 и обнаружил, что в файл ../linux/drivers/net/Space.c нужно внести некоторые изменения для приведения его в соответствие с настройками моего компьютера. Проверьте определения PLIP в строке 205, чтобы убедиться, что IRQ и порт ввода/вывода соответствуют вашим, а также запомните, какое устройство будет использовано для PLIP (plip0, plip1, plip2). В моем случае, порт 0x278 использовал IRQ 5(так выставлены переключатели на карточке), в Space.c определен IRQ 2. Я не стал открывать компьютер и менять переключатели на плате, а подправил файл. Исправление очень простое - всего в один символ. Хотя можно указать IRQ позже через ifconfig, но в этом случае ядро будет загружаться с неправильным IRQ для PLIP, что, наверное, будет вас раздаржать.
Дальнейший шаг потруднее:
В .../drivers/char/lp.c где-то около строки 38 найдите следующее:
struct lp_struct lp_table[] = { { 0x3bc, 0, 0, LP_INIT_CHAR, LP_INIT_TIME, LP_INIT_WAIT, NULL, NULL, }, { 0x378, 0, 0, LP_INIT_CHAR, LP_INIT_TIME, LP_INIT_WAIT, NULL, NULL, }, /* { 0x278, 0, 0, LP_INIT_CHAR, LP_INIT_TIME, LP_INIT_WAIT, NULL, NULL, }, * 0x278 зарезервирован для plip1 * * }; * #define LP_NO 3 */ }; #define LP_NO 2 |
Обратите внимание на изменения, которые нужно внести - один порт должен быть закомментирован. Теперь для принтера определяются только два порта. Порт 0x3BC, как правило, не работает с PLIP - для него использовался IRQ со старых монохромных видеоадаптеров (MDA).
Надеюсь, вы сделали резервные копии этих файлов. Теперь собираем новое ядро с поддержкой принтера, сети, plip и dummy.
Настраиваем систему. Это мой файл /etc/rc.d/rc.inet1:
#!/bin/bash # /sbin/ifconfig lo 127.0.0.1 /sbin/route add -net 127.0.0.0 /sbin/ifconfig dummy 200.0.0.1 /sbin/route add -net 200.0.0.0 netmask 255.255.255.0 /sbin/ifconfig plip1 arp 200.0.0.1 pointopoint 200.0.0.2 up /sbin/route add 200.0.0.2 /sbin/ifconfig dummy down |
Обратите внимание, что для DOS-to-Linux соединения используется arp, необходимость в котором обычно отсутствует в соединениях Linux-to-Linux.
В файл /etc/hosts добавляем имена машин, например:
200.0.0.1 console1 200.0.0.2 console2 |
Машина с DOS - это console2. Не забывайте о предупреждении Andrea насчет адресов - лучше использовать общепринятые схемы выделения адресов.
Перезапускаем машину для загрузки нового ядра. При загрузке системы, (или позже командой dmesg) если вы патчили ядро, или при загрузке модулей:
lp0 at 0x03bc, using polling driver lp1 at 0x0378, using polling driver [....] NET3 PLIP version 2.0 gniibe@mri.co.jp plip1: Parallel port at 0x278, using assigned IRQ 5. |
Команда "route" выдает:
Kernel routing table Destination Gateway Genmask Flags MSS Window Use Iface console2 * 255.255.255.255 UH 1436 0 136 plip1 loopback * 255.0.0.0 U 1936 0 109 lo |
А "ifconfig plip1" выдает:
plip1 Link encap:10Mbps Ethernet HWaddr FC:FC:C8:00:00:01 inet addr:200.0.0.1 P-t-P:200.0.0.2 Mask:255.255.255.0 UP POINTOPOINT RUNNING MTU:1500 Metric:1 RX packets:132 errors:0 dropped:0 overruns:0 TX packets:136 errors:0 dropped:0 overruns:0 Interrupt:5 Base address:0x278 |
Проверьте, разрешен ли telnet в /etc/inetd.conf. Можно прочесть руководство по tcpd, /etc/hosts.allow (ALL: LOCAL) и /etc/hosts.deny (ALL: ALL). Команда "telnet localhost" должна нормально работать.
С Linux-ом все, теперь DOS. Опять таки, осторожней с 0x3BC, если таковой имеется.
Я использую NCSA telnet и Crynwr PLIP драйвер, которые можно найти на:
ftp://ftp.ncsa.uiuc.edu/Telnet/DOS/ncsa/tel2308b.zip
ftp://ftp.crynwr.com/drivers/plip.zip
Обязательно используйте версию 2.3.08 NCSA telnet и версию 11.1 Crynwr PLIP драйвера. Пожалуйста, где-нибудь найдите и прочитайте Crynwr SUPPORT.DOC.
Файл CONFIG.TEL. Большинство установок берется по умолчанию и, для экономии места, я постарался обрезать его, сохранив только необходимую (как я надеюсь) для вас информацию. Второй порт на этой машине имеет адрес 0x278 на IRQ 5.
myip=200.0.0.2 netmask=255.255.255.0 # маска подсети hardware=packet # сетевой адаптер (пакетный драйвер) interrupt=5 # IRQ используемый адаптером ioaddr=60 # программный вектор прерывания, используемы драйвером # #[...много чего без изменений...] # # в конце файла добавьте эту строку: name=console1 ; hostip=200.0.0.1 ; nameserver=1 ; gateway=1 |
(console1 - это имя машины с Linux, ставьте название вашей)
Я установил 12-футовый нуль-кабель между машинами и (кроме того, что изначально он был разведен неправильно) все заработало без проблем. Стандартный 11-жильный параллельный нуль-кабель также должен работать. Я же сделал его сам, взяв разводку из файла plip.c. Хотя у моего кабеля было соединение 17-17, я не думаю, что оно для чего-то нужно, его нет на промышленно изготовляемых кабелях.
@echo off plip.com 0x60 5 0x278 telbin -s console1 |
Эти команды должны подсоединить вас к Linux на /dev/ttyp. NCSA telnet поддерживает 8 виртуальных экранов и работает, как ftp сервер. Пропускная способность PLIP соединения достаточно хороша - я получал 6.5кб/сек при передаче файлов на своем антиквариате. Надеюсь, у вас будет больше. :-)