PLIP соединение между DOS и Linux

После выхода первой версии этого 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 , где он подробно рассказывает, как настроить это соединение и решить множество проблем.

С любыми вопросами по этому разделу обращайтесь не ко мне, а к нему.

Соединение DOS-Linux

Предполагается, что вы уже настроили поддержку 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. Она находится на:

http://www.tucows.com/

Установите его в соответствии с указаниями, после чего можно зайти telnet-ом с компьютера c Windows, установить дисплей на него (например "DISPLAY=duncan:0.0") и запустить нужную программу. Нет ничего лучше, чем запускать xv под Windows!

Опыт по PLIP соединению DOS-Linux

ПРИМЕЧАНИЕ: Я получил этот документ от 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. Пример:

# 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кб/сек при передаче файлов на своем антиквариате. Надеюсь, у вас будет больше. :-)