LINUX PLIP

Вступление: что такое PLIP, и для чего он нужен?

Есть много способов установить соединение между несколькими машинами. PLIP, как и SLIP, позволяет установить локальное соединение между двумя машинами, но использует параллельный порт.

Параллельные порты передают более одного бита за раз. Это означает, что можно достигнуть более высоких скоростей, по сравнению с последовательным интерфейсом.

Скорость целиком зависит от вашего аппаратного обеспечения (процессора и параллельного порта) и загрузки системы. В большинстве случаев она может быть от 5 кб/сек до 40 кб/сек.

PLIP интерфейс имеет достаточно высокую скорость, чтобы позволить некоторые сложные функции TCP/IP типа NFS. Так что, если у вас есть компьютер с полностью установленным Linux и другая машина с системой, установленной по минимуму, то можно использовать на ней пакеты с основной машины.

Недостаток в том, что большинство пользователей имеют машину с одним параллельным портом, а это означает, что вы не не сможете использовать принтер вместе с PLIP. Даже с двумя параллельными портами невозможно использовать PLIP и печатать без поддержки модулей ядра.

Если у вас есть два или более параллельных порта, то с этим недостатком можно справится, с помощью патча из этого Mini-HOWTO.

И наконец, сейчас я могу предложить хороший, надеюсь, способ установить PLIP соединение между DOS и Linux.

Впрочем, пока что никто не сообщал об удачной попытке соединения Linux и Windows 95.

Аппаратное обеспечение, необходимое для использования PLIP

Для работы PLIP интерфейса необходимо (очевидно) наличие свободного параллельного порта на обеих машинах и кабеля. Если у вас есть возможность настраивать BIOS, включите хотя бы "двунаправленный" режим работы порта, а лучше всего ECP или EPP.

Насчет кабеля. Вот то, что написано в файле plip.c, входящем в исходные тексты ядра версии 2.0.33:

  Используемый кабель - стандартный параллельный нуль кабель, продаваемый в
различных местах как кабель "LapLink". Если желаете сделать его сами, то
вам понадобится 12-жильный кабель. Разводка следующая:
SLCTIN      17 - 17       
GROUND      25 - 25
D0->ERROR   2 - 15          15 - 2
D1->SLCT    3 - 13          13 - 3
D2->PAPOUT  4 - 12          12 - 4
D3->ACK     5 - 10          10 - 5
D4->BUSY    6 - 11          11 - 6
Остальные контакты не соединяйте. Это
D5,D6,D7 are 7,8,9
STROBE is 1, FEED is 14, INIT is 16
extra grounds are 18,19,20,21,22,23,24

Для получения более подробной информации о кабеле, я настоятельно рекомендую прочитать /usr/src/linux/drivers/net/README1.PLIP и README2.PLIP. На мой взгляд, вы должны избегать использования самодельных кабелей. Такой кабель почти не дает экономии денежных средств, но может добавить кучу проблем. Если вы все же решили сделать свой собственный кабель, то помните, что вы делаете это на свой страх и риск. Я привел фрагмент plip.c, но не даю никаких гарантий.

И еще. Длинные кабеля (более 10 футов или 3 метров) могут вызвать проблемы из-за действия электрических полей. Используйте хорошо экранированные кабеля, если используется длинное соединение. Впрочем, в любом случае, не рекомендую использовать кабеля длиной более 15 метров (50 футов).

Кто-то написал мне, что его/ее 100-футовый (30 метров) кабель прекрасно работает. Если кто-нибудь желает попробовать установить PLIP соединение между своим домом и офисом ( метров 200), то пусть попробует это сделать :-).

Настройка ядра

Предполагается, что вы знаете, как настраивать и компилировать ядро. Если нет, то почитайте документацию (kernel-howto или другие руководства). Благодаря отличной работе, проделанной над ядром, последние версии могут быть легко настроены "обычными" людьми. Для полноты картины все же перечислю вкратце, что нужно сделать.

ПРИМЕЧАНИЕ: я предполагаю, что вы используете ядро версии 2.0.xx. Не даю никаких указаний по ядрам версий 2.1.xx, так как они предназначены для разработки.

Также предполагается, что для настройки ядра вы используете menuconfig, другие инструменты, в принципе, похожи. Я покажу, как сделать это с помощью menuconfig:

#make menuconfig

Настоятельно рекомендую выбрать

Loadable module support  --->

и включить

[*] Enable loadable module support

и, если возможно, (то есть у вас модули версии 2.0.0)

[*] Kernel daemon support (e.g. autoload of modules)

Затем вернуться и перейти в

Networking options  --->

где, как минимум, нужно включить

[*] Network firewalls
[*] TCP/IP networking
[*] IP: forwarding/gatewaying

Затем вернуться и включить

[*] Network device support
<M> PLIP (parallel port) support

Если вы используете модули, рекомендую включить PLIP как модуль. Если вы так и сделали, и вам нужен принтер, перейдите в

Character devices  --->

и включите как модуль

<M> Parallel printer support

Итак, вы включили поддержку ядром PLIP. Если вы в первый раз собираете ядро, посмотрите остальные опции и выходите с сохранением сделанных изменений.

И, наконец, соберите ядро

#make dep ; make clean
#make zlilo

Если есть модули

# make modules
# make modules_install

После чего перезагрузите систему.

Сообщения ядра об интерфейсе PLIP

После того, как вы настроили и собрали ядро с поддержкой PLIP, либо при загрузке системы (если поддержка была включена непосредственно в ядро), либо при загрузке модуля PLIP (см. ниже), вы получите примерно следующее сообщение (числа могут быть другими):

NET3 PLIP version 2.2 gniibe@mri.co.jp
plip1: Parallel port at 0x378, using assigned IRQ 7.

В зависимости от настроек klogd и syslogd сообщение plip может быть помещено в системные файлы протоколирования (log files). Поэтому не впадайте в панику, если не увидите его. Если вы собрали PLIP как модуль, и команда lsmod показывает, что модуль plip загружен, то все нормально.

Обратите внимание на имя интерфейса. Обычно это plip1, но, в зависимости от адреса ввода-вывода (IO Address), может быть plip0 или даже plip2, plip3 и т.д.

Настройка файлов конфигурации

ПРИМЕЧАНИЕ: Некоторые дистрибутивы, например, Debian используют другие файлы конфигурации. Если у вас стандартная инсталляция и вы не нашли файлы rc.inet*, поищите (другие) файлы в каталоге /etc/init.d.

Прежде всего не забудьте сделать копии всех файлов, которые будете изменять:

#cp rc.inet1 rc.inet1.BACKUP

- один из вариантов.

Теперь, если вы не сделали этого раньше, выберите IP адреса для обеих машин. В моем примере я буду употреблять пару IP адресов, которые вы должны будете сменить на ваши, в стандартном формате ххх.ххх.ххх.ххх.

В файле /etc/rc.d/inet1.rc на обеих машинах добавьте следующую строчку (лучше в конец файла):

/sbin/route add -net ${NETWORK} netmask ${NETMASK}

Где NETWORK и NETMASK должны быть установлены ранее. Если вы не знаете, как это сделать, прочитайте NET-2-HOWTO.

Если после выполнения этой команды route вы будете получать сообщение:

SIOCADDRT: network unreachable,

то используйте такую строку:

/sbin/route add -net ${NETWORK} netmask ${NETMASK} dev plip1, 

где обычно имя интерфейса берется из сообщения ядра (см. выше).

Игнорировать эти переменные можно только в следующем случае:

Если вы хотите соединить две машины в отдельно стоящей сети, то можете выбрать произвольные IP адреса, например, 200.0.0.1 и 200.0.0.2 соответственно. В этом случае можно указать NETWORK="200.0.0.0" и NETMASK="255.255.255 .0". Эти значения я использовал в разделе "Быстрая установка PLIP (см. ниже).

ПРИМЕЧАНИЕ: 200.0.0.1 и 200.0.0.2 взяты лишь в качестве примера. Я не советую их использовать, так как они могут оказаться адресами реальных машин в Internet!

Настоятельно рекомендую выбирать адреса из зарезервированных для этой цели интервалов:

                  10.0.0.0        -   10.255.255.255
172.16.0.0      -   172.31.255.255
192.168.0.0     -   192.168.255.255

В файле /etc/hosts на обеих машинах добавьте строки с IP адресами машин, соединяемых через PLIP. В моем примере я добавил следующие строки:

200.0.0.1       one             # IP адрес машины "one"
200.0.0.2       two             # IP адрес машины "two"

Где one и two - имена, выбранные вами для обеих машин.

Если вы планируете использовать NFS, то, кроме включения ее поддержки в ядре, вы должны добавить в файл /etc/exports строки, описывающие экспортируемые каталоги. В моем примере для доступа к каталогу /usr я добавил:

 /usr                          two (ro)

Для более подробной информации о NFS читайте соответствующую документацию. Не сообщайте мне о проблемах возникших с NFS - я не смогу вам помочь.

И теперь перезагрузите систему.

Активация PLIP соединения

Наконец, нужно дать (под правами пользователя root) несколько команд для активации PLIP интерфейса (само собой кабель уже должен быть правильно подключен).

ПРИМЕЧАНИЕ: Если произойдет что-то непредвиденное, то дважды проверьте кабель и синтаксис команд. Если вы в точности следовали указаниям, а ошибки все равно остались, то прочитайте раздел FAQ - там есть множество ответов на вопросы.

Прежде всего убедитесь в отсутствии устройства lp:

# cat /proc/devices

Вы не должны видеть какие-либо ссылки на lp типа этой:

 6 lp

Если вы их видите, то уберите (временно) lp устройство перед тем, как двигаться дальше. Если PLIP заработает, то позже можно будет попробовать его с lp. Для того, чтобы убрать это устройство, либо придется воспользоваться командой rmmod (если это модуль), либо (если поддержка lp собрана в ядре) собрать ядро заново, скомпилировав lp как модуль (куда более мудрая идея).

Я опять использую в качестве примеров имена one и two. На one вам нужно сделать следующее.

Если у вас нет демона автозагрузки модулей, то загрузите модуль вручную:

# insmod plip

ПРИМЕЧАНИЕ: если IRQ параллельного порта отличен от 7, и/или адрес ввода-вывода отличен от 0x378, то вам нужно указать это для insmod. Определите, IRQ и адрес ввода-вывода (можно воспользоваться командой DOS MSD, но не стоит слишком доверять ей), и дайте примерно следующую команду:

# insmod plip io=0x278 irq=5

Обычно IRQ бывает 7 или 5, а адрес ввода-вывода - 0x378, 0x278 или 0x3bc. Важно убедиться в том, что адрес и IRQ соответствуют установкам аппаратного обеспечения (переключатели на старых карточках, BIOS на современных материнских платах).

Если вы параноик, то можете проверить, загрузился ли модуль командой:

  # lsmod

Module:        #pages:  Used by:
plip               3            0

Посмотрите имя интерфейса (plip0, plip1 и т. д.; см. раздел о сообщениях ядра выше), после чего поднимайте PLIP интерфейс:

# ifconfig plip1 one pointopoint two up

ПРИМЕЧАНИЕ: если IRQ вашего параллельного порта не равен 7, и/или адрес ввода-вывода не равен 0x378, то вам нужно сообщить об этом ifconfig. Для этого дайте примерно следующую команду, в качестве параметров указав ваши значения:

# ifconfig plip1 irq 7
# ifconfig plip1 io_addr 0x3bc

Обычно IRQ равен 7 или 5, а адрес ввода-вывода 0x378, 0x278 или 0x3bc.

Теперь проверьте, как это работает...

# ifconfig

 .....
.....
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 NOARP  MTU:1500  Metric:1
RX packets:0 errors:0 dropped:0 overruns:0
TX packets:0 errors:0 dropped:0 overruns:0
Interrupt:7 Base address:0x378

Добавьте путь (route) к two...

# route add two plip1

И, если вам нужен NFS для two:

# rpc.portmap
# rpc.mountd
# rpc.nfsd

На "two" команды те же самые, только нужно заменить one на two и наоборот.

Одна из ваших машин, скорее всего, будет иметь только PLIP соединение. Если это так, и эта машина - two, то можно также ввести на ней:

# route add default gw one

В моем примере two - это переносной компьютер с единственным (PLIP) соединением с one, поэтому я набирал на нем эту строчку.

Последняя проверка, чтобы убедится, что все работает:

# ping two

с one и

# ping one

с two.

Скорее всего, вам захочется, чтобы все эти команды автоматически запускались при загрузке. Для этого создайте скрипт, запускающий их - его можно будет просто запускать (на правах пользователя root) или вставить в /etc/rc.d/rc.inet2 команду, вызывающую его при загрузке.

Для настройки PLIP можно использовать команду plipconfig. За подробностями обратитесь к документации.

Для отключения PLIP нужно набрать:

# ifconfig plip1 down,

что также удалит соответствующие пути из таблицы маршрутов. Если у вас нет демона автозагрузки модулей, то дайте команду:

# rmmod plip

FAQ

Этот раздел, надеюсь, поможет решить некоторые ваши проблемы. Если у вас есть другие вопросы, можете написать мне письмо.

При загрузке системы (или модуля) я получаю следующие сообщения:

SIOCSIFADDR: No such device
SIOCADDRT: Network is unreachable

и при попытке установить соединение, как описано выше, я снова получаю примерно такие сообщения: SIOCSIFADDR: No such device
SIOCSIFDSTADDR: No such device
SIOCADDRT: Network is unreachable
mount clntudp_create: RPC: Port Mapper failure - RPC: Unable to send

По какой-то причине ядро не поддерживает PLIP. Это может быть из-за того, что:

Вы не включили поддержку PLIP (PLIP support) при настройке ядра.

Вы включили поддержку принтера (Printer support) при настройке ядра.

Вы скомпилировали PLIP как модуль, но не загрузили его.

Вы указали не тот порт, например plip1, вместо plip0.

Есть ли способ (кроме модулей) поддерживать и PLIP, и LP, возможно с двумя параллельными портами?

Да, есть два способа, описанные в разделе "Патчи для совместной работы PLIP и LP":

Можно использовать патч, позволяющий ядру поддерживать и то, и другое.

Можно взять другой патч, позволяющий ядру использовать один порт для PLIP, а второй - для LP.

Я написал скрипт, запускаемый из rc.inet2, который соединяет 2 моих компьютера, и включает NFS. Машина "one" подключает каталоги с машины "two". Кроме того, я добавил правильные строки в /etc/fstab второго компьютера (two). Если я загружаю его в то время, как "one" выключен, то он несколько минут ждет "подключение удаленных файловых систем..." ("mounting remote file systems...").

Это происходит из-за того, что "two" пытается подключить файловые системы с "one". Если же последний выключен, то вам приходится ждать, пока "two" надоест пытаться сделать это. Чтобы избежать этого, вы можете:

Закомментировать в rc.inet2 команду, подключающую удаленные файловые системы.

Убрать из /etc/fstab компьютера "two" соответствующие строки и подключать удаленные файловые системы вручную.

Есть решение получше - определять при загрузке включен ли "one", и только в этом случае подключать с него файловые системы. Этого можно достигнуть, заменив команду mount в rc.d (или где оно там у вас) примерно такими строчками:

     if ping -c 5 one ; then
mount one:/.....
fi

Соединение есть, но ping не работает. Ядро выдает следующее (или подобное) сообщение:

plip1: timed out (1, 89)

Это означает что, с "вашей стороны" соединения все нормально, ваша машина посылает сигналы, но "другая сторона" не отвечает. Как правило это случается при работе с некачественным кабелем или неправильной настройке IRQ/адреса ввода-вывода. Вообще, более 60% проблем связано с неправильной установкой IRQ. Попробуйте сменить его, очень вероятно, что все заработает. Ниже приводится более подробный список возможных причин возникновения этой проблемы:

Кабель неправильно подключен, неисправен или вообще не тот. Если есть такая возможность, включите его между машинами с заведомо работающим PLIP. Если такой возможности нет, то хотя бы проверьте тестером. Факт того, что кабель работал под DOS/win95 - хорошее предзнаменование, но не 100% гарантия.

На машине с "другой стороны" не загружен PLIP.

Если вы соединяетесь с переносным компьютером с нестандартным параллельным портом, то смотрите ниже.

У вас дешевый параллельный порт, предназначенный исключительно для поддержки принтера. Такие порты могут посылать данные, но не могут принимать их.

Ваш параллельный порт не был настроен (как минимум) как двунаправленный. Зайдите в конфигурацию BIOS и перенастройте его. Возможны также варианты EPP и ECP.

Параллельные порты имеют различный IRQ. Загрузите plip (или lp) модуль с другим IRQ. См. раздел "Активация PLIP соединения".

Другие устройства (например звуковая карта) использует тот же IRQ. Не доверяйте DOS программам типа MSD, лучше просто попробуйте загрузить PLIP модуль с другим IRQ.

Я правильно указал IRQ и адрес ввода/вывода, но PLIP все равно не работает. Адрес и IRQ я узнал с помощью MSD.

MSD не всегда правильно определяет адрес порта. Попробуйте эту программу: http://www.cs.caltech.edu/ huny/para13.zip.

Соединение установлено, и ping работает, но иногда ядро выдает (или похожее) следующее сообщение:

plip1: timed out (1, 89)  

Это означает, что другая сторона не ответила до истечения времени ожидания. Если все работает, то вы можете не обращать внимания на эти сообщения: как правило это значит, что другая сторона намного медленнее, чем ваша, что возможно из-за старого аппаратного обеспечения или высокой загрузки машины. Можно попробовать настроить PLIP командой plipconfig.

Я настроил PLIP соединение между моим настольным компьютером и переносным, но ping сообщает о 100% потере пакетов.

Параллельные порты некоторых переносных компьютеров не подходят для PLIP, так как они предназначены для работы только с принтерами, то есть могут посылать данные, но не могут принимать их. Я не знаю способа, заставить их работать с PLIP. Единственная надежда -

Посмотреть конфигурацию вашего ноутбука - если есть возможность, то настроить параллельный порт для работы в двунаправленном режиме. Обычно он называется "parallel enhanced mode" (расширенный режим работы параллельного порта).

Попробовать plip mode 0 (режим 0). Увы, я не знаю, как это сделать, и/или будет ли это работать, а также поддерживается ли этот режим в последних ядрах.

Какой скорости можно достигнуть при передаче через PLIP?

Это непростой вопрос, так как МНОЖЕСТВО различных факторов могут влиять на скорость:

Скорость процессора на обеих сторонах соединения.

Тип и настройки параллельного порта.

Загруженность системы.

Для чего вы использует PLIP.

По грубым прикидкам, вы должны достигнуть скорости около 40Кбайт/сек, что намного выше любой скорости, достижимой на последовательном порту, и приближается к медленным сетевым картам.

Что если мне нужно часто давать команду ifconfig up и ifcongig down для plip1?

Похоже, вам нужно добавлять к команде ifconfig ключ -arp, кроме самого первого, после загрузки системы, раза. Мне он не требовался, но кому-нибудь может понадобится.

Я прочитал об IP адресах, зарезервированных для внутренних сетей. 200.0.0.1 и 200.0.0.2 к ним не относятся. Не нужно ли их поменять?

Да, нужно, но я сразу же подчеркнул, что выбрал эти адреса только из-за их простоты. Вы можете свободно менять их на то, что пожелаете. Вот цитата из net-2-howto:

В соответствие с RFC1597 некоторые IP адреса зарезервированы для
внутренних сетей. Вы должны использовать их для избежания различных
неприятных происшествий при случайном соединении к Internet. Это
следующие адреса:

      10.0.0.0        -   10.255.255.255
172.16.0.0      -   172.31.255.255
192.168.0.0     -   192.168.255.255

Есть ли способ настроить параметры PLIP без правки исходного текста кода?

Да, есть. Попробуйте команду /sbin/plipconfig. За более подробной информацией обращайтесь к руководству (man).

У меня установлен Debian GNU/Linux, в котором отсутствуют файлы /etc/rc.d/rc.inet1 и 2. Куда мне прописывать команды настройки plip?

В Debian GNU/Linux все команды, которые предполагалось вставить в rc.inet1 и 2, нужно внести в /etc/init.d/network.

У меня возникли сложности со связыванием двух машин с помощью PLIP. На первой стоит ядро последней версии, а на второй PLIP версии 1.0. Не в этом ли дело?

Да, будет намного лучше, если версии PLIP на обоих концах будут одинаковые. В plip.c указано, что PLIP (последних версий) не может работать с PLIP версии 1.0.xx.

В данный момент PLIP работает с 4 битами, а как насчет 8-битного PLIP, про который я читал в документации по ядру? Кажется, он называется режимом 1 (mode 0).

Этот Mini-HowTo опсиывает настройку PLIP. За технической информацией обращайтесь, пожалуйста, к автору или читайте /usr/src/linux/drivers/net/README*.PLIP. Я знаю только следующее: стандартный PLIP использует "параллельный нуль-кабель" и работает в режиме 0 (не путайте с именем интерфейса plip0), использующем 4 бита. Режим 1 использует 8 бит и уже должен быть реализован, но для него нужен самодельный кабель, и работать он будет только между машинами с Linux. Я не знаю, как настраивать режим 1. Если кто-нибудь знает, то сообщите мне, пожалуйста.

Патчи для совместной работы PLIP и LP

Самый лучший способ заставить работать вместе PLIP и LP - это использовать загружаемые модули: можно загрузить и выгрузить из памяти plip.o, когда вам надо что-то распечатать и наоборот. Если вам необходимо использовать PLIP и LP одновременно, попробуте использовать следующие патчи.

PLIP и LP вместе на одном порту

Если вам понадобилась поддержка PLIP и LP, попробуйте следующие патчи.

Вы должны отредактировать некоторые части программы, разумеется, предварительно сохранив копию:

******** изменения для linux/drivers/char/lp.c ***********************
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, },
*/
};
#define LP_NO 1

******** изменения для linux/drivers/net/Space.c ********************
#if defined(PLIP) || defined(CONFIG_PLIP)
extern int plip_init(struct device *);
static struct device plip2_dev = {
"plip2", 0, 0, 0, 0, 0x278, 2, 0, 0, 0, NEXT_DEV, plip_init, };
static struct device plip1_dev = {
"plip1", 0, 0, 0, 0, 0x378, 7, 0, 0, 0, &plip2_dev, plip_init, };
/*    static struct device plip0_dev = {
"plip0", 0, 0, 0, 0, 0x3BC, 5, 0, 0, 0, &plip1_dev, plip_init, };
*/
#   undef NEXT_DEV
#   define NEXT_DEV     (&plip1_dev)
#endif  /* PLIP */

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

PLIP и LP на разных портах

Если у вас есть хотя бы два параллельных порта, вы можете использовать следующие патчи, которые дадут возможность использовать PLIP на одном порте, а LP на другом.

Раскомментируйте одну строку в исходнике ядра в файле drivers/char/lp.c.

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, }, */
};
3 -> 2

Конфигурация ядра

PLIP (parallel port) support (CONFIG_PLIP) [n] y

Parallel Printer support [y] y

Сообщение ядра при запуске

lp1 at 0x0378, using polling driver
.....
NET3 PLIP version 2.0 gniibe@mri.co.jp
plip2: Parallel port at 0x278, using assigned IRQ 5.

В этом случае, я несу такую же ответственность, как и в главе 8.1.

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

PLIP между Linux и Windows 95

Этот раздел пуст. Я использую window 95 только для игр, так что я не пытался и не задумывался о PLIP соединении с Linux. Вопросы на эту тему побили все рекорды, так что я даю (пока) определенный ответ.

Нет, пока что никто не сообщил мне об удачном соединении между Linux и Windows 95. Если кому-либо удастся это сделать, немедленно сообщите мне: тысячи пользователей PLIP ожидают этой новости!