Глава 17 Серийни комуникации



Превод: Димитър Василев ака botzko/FreeJak

12/2002-02/2003 за нуждите на FreeBSD-BG documentation project


    1. Предговор


Unix винаги е подържал серийните комуникации. В същност, най-първите Unix машини разчитаха на обикновени (serial) кабели за въвеждане и извеждане на потре-бителските данни. Нещата много се промениха от времена-та, когато средностатистическият терминал се състоеше от сериен принтер със скорост 10 знака в секунда и кла-виатура. Тази глава ще обхване някои от случаите, в които FreeBSD ползва серийни комуникации.


След прочита на тази глава, вие ще знаете:


  1. как да свържете терминалите към вашата FreeBSD система

  2. как да използвате модем, за да се свързвате към отдалечени машини

  3. как да позволите на отдалечени потребители да влизат във вашата система чрез модем

  4. как да стартирате вашата машина през серийна конзола


Преди да продължите с четенето, вие трябва да има-те познания за:

  1. това как да компилирате и инсталирате ново ядро (Глава 9);

  2. правата и процесите в Unix (Глава 3);

  3. имате достъп до упътването на серийния хардуер (модем или многопортова карта), която бихте жела-ли да използвате под FreeBSD.

    1. Въведение





      1. Терминология


bps бита в секунда – скоростта, с която данните се предават;

DTE Data Terminal Equipment (терминално оборудване) – това е вашият компютър например;

Data Communications Equipment (оборудване за пренос на данни) – вашият модем;

RS-232 стандарт на EIA за хардуерни серийни комуникации;

Говорейки за скорост на предаване на данни, този раздел не покрива термина “baud rate” ( скоростно съотношение. Благодаря ти за разяснението, moskov!). Той се отнася до броя на електрическите импулси, които могат да бъдат осъществени в определен период от време, докато “bps” (бита в секунда) е точният термин, който трябва да се ползва.


      1. Кабели и портове


За да вържете модем или терминал към вашата FreeBSD система, ще ви трябва свободен сериен порт на вашата машина и кабел за свръзка. Ако сте запознати с наличния си хардуер и какви кабели ще ви трябват, можете спокойно да пропуснете тази част.


17.2.2.1Кабели


Има няколко различни вида серийни кабели. Двата най-често срещани типа за нашите цели са null-modem (четирижични кабели с единица и нула) и стандартните (“прави”) RS-232 кабели. Документацията към вашия хардуер би трябвало да описва какъв кабел ви е нужен.


          1. Null-modem кабели


Един null-modem кабел предава някои сигнали директно, като задейства други сигнали. Например, крачето за изпращане на информацияв единия край се връзва към крачето за получаване на информация в другия край. Ако желаете да си правите сам кабелите, може да си спретнете един такъв за терминали. Таблицата по долу показва имената на сигналите на протокола RS-232C и броя на крачетата върху DB-25 конектор.


Сигнал

Номер на изпращащото краче (pin #)

Номер на приема-щото краче (pin #)

Сигнал

TxD

2

3

RxD

RxD

3

2

TxD

DTR

20

6

DSR

DSR

6

20

DTR

SG

7

7

SG

DCD

8

4

RTS

RTS

4

5

CTS

CTS

5

8

DCD


Забележка: За DCD към RTS, свържете краче 4 към 5 вътрешно в основата на конектора и след това към 8-мо краче в основата на отдалечения конектор.


          1. Стандартни RS-232C кабели


Нормален сериен кабел предава всичките RS-232C сигнали директно.Така крачето за изпращане на данни се връзва към същото на другия край на кабела. Такъв тип са кабелите с които се връзват модемите към FreeBSD и ня-кои видове терминали.


17.2.2.2Портове


Серийните портове са устройствата през които се пренасят данните между терминала и машината. Тази част описва видовете портове и техните съответствия във FreeBSD.


          1. Видове портове


Съществуват няколко вида серийни портове. Преди да купите или направите кабел, трябва да сте сигурни че ще пасне с портовете на вашия терминал и на вашата FreeBSD машина. Повечето терминали имат DB25 портове. Персонал-ните компютри, включително PC-тата вървящи под FreeBSD, ще имат DB25 или DB9 портове. Ако имате мултипортова серийна карта за вашето PC, вероятно ще имате RJ-12 или RJ-45 портове. Обърнете се към документацията, съпровождаща вашия хардуер за характеристиките на използваните портове. Поглед отзад често върши същата работа.


          1. Имена на портовете


Във FreeBSD, вие имате достъп до всеки сериен порт чрез специален файл в /dev директорията. Съществуват два вида портове:


  1. Входящите (call-in), са обозначени с /dev/ttydN, където N е номера на порта, започващ от нула. Като цяло, те се използват за терминалите. Входящите портове изискват серийния кабел да пропуска сигнала за пренос на данни (DCD - data carrier detect ), за да работят.


  1. Изходящите (call-out) портове са обозначени с /dev/cuaaN. Обикновено те не се ползват за терминали, а само за модеми. Може да използвате изходящите портове, ако серийният кабел или терминала не подържа сигнала за откриване на данни. Ако сте свързали терминал към пър-вия сериен порт (COM1 под MS-DOS), неговото съответ-ствие под FreeBSD e /dev/ttyd0. Ако е на втория сериен порт (познат също като COM2), то той се нарича /dev/ttyd1 и така натататък.


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


FreeBSD подържа четири серийни порта по подразби-ране. В света на MS-DOS, те са познати като COM1, COM2, COM3 и COM4. FreeBSD в момента подържа “прости” много-портови серийни карти, като BocaBoard 1008 и 2016, а също така по-интелигентни карти от същия тип, като тези произведени от Digiboard и Stallion Technologies. За съжаление, подразбиращото се ядро единствено търси стан-дартните COM портове. За да видите дали вашето ядро раз-познава който и да е сериен порт, наблюдавайте съобще-нията по време на зареждане на ядрото, или използвайте командата /sbin/dmesg за да повторите съобщенията на ядрото по време на зареждане на ядрото. В частност, гледайте за редове, стартиращи с низа “sio”.


Съвет: За да видите само низовете “sio”, използвайте командата:


#/sbin/dmesg | grep 'sio'


Например, на машина с четири серийни порта, специфичните низове за серийните портове са:


sio0 at 0x3f8-0x3ff irq 4 on isa

sio0: type 16550A

sio1 at 0x2f8-0x2ff irq 3 on isa

sio1: type 16550A

sio2 at 0x3e8-0x3ef irq 5 on isa

sio2: type 16550A

sio3 at 0x2e8-0x2ef irq 9 on isa

sio3: type 16550A


Ако ядрото ви не разпознава всичките ви портове, вероятно ще трябва да компилирате ново за вашия хардуер. За подробна информация относно компилирането на ядро, моля вижте Глава 9.


Съответните редове в конфигурационния файл на новото ядро за настройка на серийните портове биха изглеждали по слдния начин за FreeBSD 4.X:


device sio0 at isa? port IO_COM1 irq 4

device sio1 at isa? port IO_COM2 irq 3

device sio2 at isa? port IO_COM3 irq 5

device sio3 at isa? port IO_COM4 irq 9


и за FreeBSD 5.x:


device sio


Можете да закоментирате или напълно да изтриете редове за устройства, които нямате за FreeBSD 4.X; за FreeBSD 5.X трябва да редактирате вашия файл /boot/device.hints, за да настроите серийните портове. Моля прочетете man sio(4) за повече информация относно серийните портове и настройката на многопортови дъна. Бъдете много внимателни, ако използвате конфигурационен файл от предходни версии на FreeBSD, понеже параметрите (флаговете) на устройствата и синтаксисът са променени в по-следващите издания.

Порт IO_COM1 е заместитител на порт 0x3f8, IO_COM2 на 0x2f8, IO_COM3 на 0x3e8 и IO_COM4 на 0x2e8. Това са често срещани адреси на съответните портове; както прекъс-ванията 4, 3, 5 и 9 са често разпространени. Моля имайте в предвид, че обикновените серийни портове не могат да споделят едно и също прекъсване на PC-та с ISA шини (многопортовите дъна имат вградена електроника позволяваща всички устройства, ползващи интерфейса 16550A да споделят едно или две прекъсвания).


17.2.4 Достъп до комуникационните устройства


Повечето усройства в ядрото са достъпни чрез специални файлове, намиращи се в диресторията /dev. Комуникационните устройства са досъпни чрез /dev/ttydN (dial-in) и /dev/cuaaN (call-out) устройства. FreeBSD осигурява също инициализиращи устройства /dev/ttyidN и /dev/cuai0N; заключващи устройтсва /dev/cual0N. Инициализиращите устройства се използват за подаване на параметрите и сигналите на комуникационните портове, всеки път щом влязат в употреба, като crtscts за модемите, използващи RTS/CTS сигналите за контрол на потока данни. Заключващите устройства са използвани да заключат маркерите на устройствата, да предотвратят други програми или потребители да сменят определени параметри; вижте man страниците termios(4), sio(4) и span(1) за информация относно настройките на терминалите, заключващи и инициализиращи устройства, задаване на терминалните опции.


        1. Създаване на устройствата


FreeBSD от версия 5.0 нагоре включва файловата система devfs(5), която автоматично създава устройствата при нужда. Ако сте разрешили devfs на вашето FreeBSD, тогава можете спокойно да пропуснете този раздел. Шел скриптът MAKEDEV в /dev директорията се грижи за създава-нето на устройствата. За да създадете файла COM1(порт 0) за дайъл-ъп, отидете в директорията /dev и въведете командата MAKEDEV ttyd0. По подобен начин се създават файловете за COM2(порт 1): MAKEDEV ttyd1. MAKEDEV създава не само /dev/ttydN файловете, но също и /dev/cuaaN, /dev/cuaiaN, /dev/cualaN, /dev/ttyldN, /dev/ttyidN устройствата.

След създаването на новите устройства, проверете правата им (особено /dev/cua*), за да бъдете сигурни, че само техните потребители имат права да четат и пишат върху тях – вероятно няма да искате да позволите на сред-ния потребител да ползва модемите, за да набира отдалечени машини. Правата по подразбиране върху файловете /dev/cua* би трябвало да бъдат достатъчни:


crw-rw---- 1 uucp dialer 28, 129 Feb 15 14:38 /dev/cuaa1

crw-rw---- 1 uucp dialer 28, 161 Feb 15 14:38 /dev/cuaia1

crw-rw---- 1 uucp dialer 28, 193 Feb 15 14:38 /dev/cuala1


Тези права позволяват на потребителя uucp и групата dialer да ползват устройствата за изходящо набиране.


      1. Настройка на серийните портове


Устройствата ttydN или cuaaN обикновено е обичайното устройство, което ще искате да отворите за вашите прило-жения. Когато процес отвори устройството, то ще има под-разбиращ се набор от входно-изходни настройки. Можете да ги видите с командата:

# stty -a -f /dev/ttyd1


Когато променяте настройките на това устройство, те са в сила до неговото затваряне. При ново отваряне, то приема параметрите си по подразбиране. За да направите промени към подразбиращите се настройки, можете да отворите и настроите параметрите на “първоначалното състояние”. Например, за да включите режима CLOCAL, 8 битовата комуникация и XON/XOFF контрола по подразбиране на ttyd5, напишете:


# stty -f /dev/ttyid5 clocal cs8 ixon ixoff


Инициализирането на серийните устройтва в цялата система се контролира от файла /etc/rc.serial. Този файл засяга настройките по подразбиране на упоменатите устройства. Ако искате да предотвратите смяната на някои настройки от програми, направете настройки към “заключващото” устройство. Например, ако искате да “заковете” скоростта на ttyd5 на 57600 bps, напишете:


# stty -f /dev/ttyld5 57600


Така ако някое приложение, което отвори ttyd5 и се опита да смени скоростта на порта ще остане “заковано” на 57600 bps. Естествено, вие трябва да ограничите писането върху инициализиращите и заключващи устройства единствено до root потребителя.


    1. Терминали


написано от Sean Kelly


Терминалите осигуряват удобен и евтин начин за достъп до вашата FreeBSD система, когато не сте на конзолата на компютъра или сте в свързана мрежа към нея. Този раздел описва как да използвате терминали с FreeBSD.


      1. Видове терминали. Употреба


Оригиналните Unix системи нямаха конзоли. Вместо това, хората се логваха и стартираха програми чрез терминали, които бяха свързани към серийните портове на ком-пютъра. Това доста наподобява употребата на модем и тер-минален софтуер за набирането на отдалечена машина с цел да извършите някаква тесктообработка.

Днешните PC-та имат конзоли, способни да показват висококамествена графика, но възможността да бъде установена връзка чрез сериен порт все още съществува в наши дни в почти всяка Unix-подобна операционна система; FreeBSD не е изключение. Използвайки терминал, закачен към свободен сериен порт, можете да влезете и стартирате коя да е текстообработваща програма в конзолен режим или в терминален емулатор под X11.

Бизнес потребителите могат да закачат множество терминали към FreeBSD система и да ги разпределят по работните места на техните служители. За домашните потребители, излишен компютър като стар модел на IBM PC или Macintosh може да бъде терминал, свързан към по-мощна машина вървяща под FreeBSD. Можете да преобразувате тази железария, която вероятно е машина за един потребител в мощна многопотребителска система.

За FreeBSD има три вида терминали:


  1. обикновени терминали

  2. PC-та, действащи като терминали

  3. Х терминали


Остатъкът от подсекцията ще разгледа именно тези три типа устройства.


        1. Обикновени терминали


Обикновените терминали са специализирано хардуерно оборудване, позволяващо ви да се свързвате към компютри през серийни линии. Ето защо те се наричат още “прости” терминали – разполагат единствено с изчислителна мощ да показват, пращат и получават текст. Не можете да подкарате никакви програми върху тях. Това е работата на компютъра към който се свързвате – да стартира текстови редактори, компилатори, електронна поща, игри и прочие.

Съществуват хиляди марки обикновени терминали направени от много производители, включително VT-100 на DEC и WY-75 на Wyse. Почти всеки такъв терминал ще работи под FreeBSD. Някои висококачествени терминали могат дори да показват графики, но само определени софтуерни пакети могат да се възползват от тези характеристики.

Обикновените терминали са популярни в работни среди, където работниците нямат нужда от достъп до графични приложения, като тези осигурени от X Window System.


        1. PC-та, действащи като терминали


Ако обикновения терминал има единствено възможност единствено да показва, праща и получава текст, тогава определено всеки свободен персонален компютър може да бъде обикновен терминал. Всичко което ви е нужно е подхо-дящ кабел и някакъв софтуер за терминална емулация на вашата машина.

Такова решение е популярно в домашни условия. Напри-мер, ако вашата половинка работи по системната конзола на FreeBSD машината, можете да извършвате отдалечена текстообработка по същото време от по-слаб компютър, служещ като терминал за FreeBSD машината.


        1. Х терминали


X терминалите са най-елегантния тип. Вместо да се връзват към сериен порт, те обикновено се връзват към мрежа като Ethernet. В състояние са да показват произ-волно X приложение.

Представяме X терминалите само за пълнота. Тази част не покрива тяхната инсталация, настройка или употреба.


      1. Настройка


Този раздел описва какво е нужно да настроите на вашата FreeBSD машина, за да разрешите логин сесия през терминал. Предполага се, че вече сте настроили ядрото си да подържа серийните портове към които терминалът е свързан и сте вързали самия терминал към машината.

Спомнете си от глава 7, че процеса init е отговорен за контрола на процеси и инициализацията на системата. Една от задачите на init е да чете файла /etc/ttys и стартира getty процес за наличните терминали. Getty процесът от своя страна е отговорен за прочитането на потребителското име и стартирането на програмата login. Следователно, за да настроите терминалите за вашето FreeBSD, стъпките по-долу трябва да бъдат изпълнени като root:


  1. Добавете ред към /etc/ttys за съответния файл в /dev директорията за сериен порт, ако вече не е там.

  2. Задайте /usr/libexec/getty да върви върху порта и определете подходящият getty тип от файла /etc/gettytab.

  3. Задайте вида терминал по подразбиране

  4. Включете порта (от “off” на “on”)

  5. Задайте дали root може/ не може да се логва от този порт (“secure”/”insecure”).

  6. Накарайте init да прочете наново файла /etc/ttys.


Като допълнителна стъпка, може да желаете да създа-дете собствена getty дефиниция за употреба в стъпка 2 чрез въвеждане на данни в /etc/gettytab. Тази глава не обяснява как да направите това; за повече информация вижте man gettytab(5), man getty(8) за повече информация.


        1. Добавяне на ред към /etc/ttys


Файлът /etc/ttys изброява всички портове а вашата FreeBSD система, от които искате на разрешите влизане. Например, първата виртуална конзола ttyv0 присъства в този файл. Можете да влезете в конзолата, използвайки реда за нея в този файл. /etc/ttys съдържа също описания на другите виртуални конзоли, серийните портове и псевдо терминалите. За свързан терминал, просто избройте файл-чето в /dev директорията без префикса /dev ( /dev/ttyv0 в /etc/ttys ще бъде описан като ttyv0).

Подразбиращата се FreeBSD инсталация включва файл /etc/ttys с подръжка за първите четири серийни порта: от ttyd0 до ttyd3. Ако закачате терминал към един от тези портове, не е нужно да добавяте друг ред.


Пример 17-1 Описване на терминали в /etc/ttys


Да предположим, че бихме искали да свържем два терминала към системата: Wyse-50 и старо 286 IBM PC, вървящо с Procomm терминален софтуер, емулиращ VT-100. Връзваме Wyse на втория сериен порт и 286-цата към шестия сериен порт към шестия сериен порт (порт на мултипортова серийна карта). Съответните редове в /etc/ttys би изглеждало така:


ttyd11 "/usr/libexec/getty std.38400"2 wy503 on4 insecure5


ttyd5 "/usr/libexec/getty std.19200" vt100 on insecure


17.3.2.2 Накарайте init да прочете отново /etc/ttys


След направените промени във файла /etc/ttys, вие трябва да изпратите SIGHUP (сигнал за “затваряне”) сигнал към процеса init, за да го принудите да прочете наново конфигурационния си файл. Например:


# kill -HUP 1


Забележка: init е винаги първият процес в системата, следователно винаги ще има идентификационен номер (PID) 1. Ако всичко е настроено правилно, кабелите са на място и терминалите са включени, тогава getty (чете се гети, бел. прев.) процес ще бъде задействан за всеки терминал и би трябвало да видите на тях логин промпт на този етап.


      1. Елимиране на терминални проблеми


Дори с най-фанатично внимание по отношение на подробностите, нещо може да се обърка по време на настройката на терминала. Ето списък на симптомите и някои примерни решения.


        1. Не се появява логин промпт

        2. Появяват се “маймуни” вместо логин промпт

        3. Буквите се появявят двойни, паролата се вижда при въвеждане


17.3.3.1Не се появява логин промпт


Уверете се, че терминалът е вързан и включен. Ако използвате PC, проверете дали софтуерът за терминална емулация върви на правилния сериен порт.

Проверете още:


  1. дали кабелът е вързан здраво от двете страни

  2. дали това е правилният тип кабел

  3. дали терминалът и FreeBSD системата са с еднакви настройки относно скоростта на предаване на информацията и паритета. Ако разполагате с терминал, способен да предава образи, погрижете се копчетата за контраст и яркост да са приведени в действие. За печатащи терминали, осигурете достатъчно хартия и мастило.

  4. Проверете дали има действащ getty процес, който да обслужва терминала. На пример, за да получите списък на стартираните getty процеси с командата ps, въведете:


# ps -axww|grep getty


Би трябвало да видите ред за терминала. Например, примерът по-долу показва, че е стартирано getty на втория сериен порт ttyd1 и използва реда std.38400 от /etc/gettytab:


22189 d1 Is+ 0:00.03 /usr/libexec/getty std.38400 ttyd1


Ако няма стартирано getty, проверете дали сте разрешили порта от /etc/ttys. Също запомнете да въведете kill -HUP 1 след промяна на /etc/ttys файла.

Ако има стартиран getty процес, но терминалът все още не показва логин промпт или показва такъв, но не ви позволява да пишете, вероятно той или кабелът кам него не подържат “хардуерно ръкостискане” (hardware handshaking). Опитайте се да смените реда в /etc/ttys от std.38400 на 3wire.38400. Запоменете да въведете kill -HUP 1, след промяната на /etc/ttys. Низът 3wire е подобен на std, с разликата че елиминира “хардуерното ръкостискане”. Може да ви се наложи да намалите скоростта или да разрешите софтуерния контрол при използването на 3wire, за да предотвратите препълване на буферите.


17.3.3.2Появяват се “маймуни” вместо логин промпт


Уверете се, че терминалът и FreeBSD са “съгласни” по отношение скоростта на обмен на информацията и паритета. Проверете getty процесите, за да сте сигурни че правилният тип от тях е в употреба. Ако това не е така, редактирайте /etc/ttys и стартирайте kill -HUP 1.


17.3.3.3Буквите се появяват двойни, паролата се вижда при въвеждане


Превключете терминала или емулиращият софтуер от ``half duplex'' или ``local echo'' на ``full duplex.''


    1. “Dial-in” услуги


Написано от Guy Helmer. Добавки от Sean Kelly.


Настройката на вашата FreeBSD system за входящо набиране (dial-in) е много сходно на връзването на терминалите, с разлика че се занимавате с модеми вместо с терминали.


17.4.1Вътрешни срещу външни модеми


Външните модеми изглеждат по-удобни за дайъл-ъп, понеже често могат да бъдат настроени полупрозрачно чрез параметри, съхранявани в обикновената памет. Обикновено имат и светлинни индикатори, отразяващи състоянието на важни RS-232 сигнали. Мигащите лампички впечатляват посетителите, а също така са много полезни за диагностициране дали модемът работи както трябва.

Вътрешните модеми обичайно ползват настройките от BIOS, така че тяхната настройка може да се ограничи до подаване на DIP параметри. Ако вашият вътрешен модем има лампички, вероятно ще бъде трудно да ги гледате, когато капакът на компютъра е на мястото си.


        1. Модеми и Кабели


Ако използвате външен модем, ще ви трябва подходящ кабел. Стандартен RS-232С сериен кабел напълно ще удовлетвори нуждите ви, ако в него са заложени нормал-ните сигнали:



FreeBSD се нуждае от RTS и CTS сигналите за контролиране на потоците от информация, надхвърлящи скорост от 2400 bps; CD сигнала за откриване на отговор на заявката или прекъсване, и DTR за връщане на модема в състояние на покой след завършване на обменната сесия. Някои кабели са направени без наличието на всички необходими сигнали. При наличие на трудности, като продължаваща логин сесия след прекъсване на линията, причината вероятно е в кабела.

Подобно на други Unix-производни операционни системи, FreeBSD използва хардуерните сигнали, за да открие кога е отговорено на обаждането, линията е била прекъсната или да разкачи и върне модема в състояние на покой след обаждане. FreeBSD избягва изпращането на команди към модема и не наблюдава отчетите за статуса, които той подава. Ако сте запознати със свързването на системи за обмен на файлове (BBS), базирани на PC платформата, това може да ви изглежда странно.


      1. Избор на сериен интерфейс


FreeBSD подържа NS8250, NS16450, NS16550 и NS16550A базирани EIA RS-232C (CCITT V.24) интерфейси за комуникация. Устройствата, подържащи 8250 and 16450 базирани интерфейси имат буфер от един знак. Устройствата разработени за 16550 базирания интерфейс, разполагат с 16 значен буфер, даващ по-добра производителност. (Грешки в обикновените 16550-базирани стандарти пречат на употребата на 16 значния буфер, така че използвайте 16550A-базирани устройства ако е възможно). Понеже устройствата с еднозначен буфер изискват повече работа от страна на операционната система в сравнение с 16-значните буфери, 16550A-базираните серийни карти са за предпочитане. Ако сървърът ви има многобройни активни серийни портове или ще поеме голям трафик, картите базирани на 16550A прото-кола са по-добри и дават по-малко грешки.


      1. Бърз преглед


Както при терминалите, init процеса задейства getty такъв за всеки настроен сериен порт за входящи връзки (dial-in. Например, ако е закачен модем към /dev/ttyd0, резултът от ps ax, вероятно ще бъде този:


4850 ?? I 0:00.09 /usr/libexec/getty V19200 ttyd0


Когато потребител набере линията, на която е модема и се установи връзка, се отчита сигнал CD (открита преносна среда) от модема. Ядрото забелязва откриването на носителя и завършва отварянето на порта от getty. Getty процесът пък изпраща логин промпт на предварително зададената му начална скорост. Getty наблюдава дали се получават правилните знаци и в типичната си конфигурация е заложена възможността да пренастрои скоростта си, ако си, ако открие нещо нередно в преноса (дължащо вероятно на различия между скоростите на модема и неговата). Това продължава, докато нещата не се оправят.

След въвеждане на потребителско име, getty изпълнява командата /usr/bin/login, завършваща процеса на влизане в системата чрез запитване за паролата на потребителя и стартиране на неговия команден интерпретатор (шел).


      1. Конфигурационни файлове


Съществуват три конфигурациони файла в директорията /etc, които вероятно ще трябва да редактирате, за да разрешите дайл ъп достъп до вашата FreeBSD система.Първият файл - /etc/gettytab, съдържа настройките за демона /usr/libexec/getty. Вторият, /etc/ttys съдържа параметрите, които “казват” на /sbin/init на кои терминални устройства (tty) да се стартира getty процес. Накрая, можете да поставите настройката на серийните портове в /etc/rc.serial.

Има две мисловни школи по отношение на дайъл-ъпа в Юникс. Едната обича да настройва модемите и сървърите си така,че независимо от скоростта с която отдалеченият потребител влиза, скоростта между сървъра и модема към него е фиксирана. Ползата от този подход е, че потребителят вижда логин промпт незабавно. Недостатъкът е, че сървърът не знае какъв е истинският капацитет на потребителя, така че програми като Emacs няма да пренастроят техните методи на запълване на екрана и така да подобрят производителността си при по-бавни връзки.

Другата школа настройва модемите на променлива скорост в зависимост от възможностите на отдалечения потребител. Например, връзки от протокол V.32bis (14.4 Kbps), могат да накарат модема да подава информация на 19.2 Kbps, докато при 2400 битовите връзки ще се подават данни на 2400 bps. Понеже getty не разбира каквит и да било отчети за скоростта на модема, той подава login: промпт на първоначалната си скорост и гледа знаците, идващи като отговор. Ако потребителят вижда маймуни, предполага се че им е известен фактът да натискат клавиша Enter, докато видят ясен ред за влизане. Ако скоростите не съвпадат, getty не вижда нищо, опитва да отиде на следващата скорост и подава реда login: отново. Тази процедура може да продължи до пълно отчаяние на потребителя, но обикновено се иска едно-две чуквания по клавиатурата преди да се види добър промпт. Очевидно, тази последователност на влизане не изглежда толкова чиста както предишния метод на “фиксирана скорост”, но потребителите с бавни връзки ще получат по-добро взаимодействие с приложенията, заемащи цял екран.

Тази секция ще се опита да даде балансирана инфор-мация за настройка, но има предпочитания към втория метод.


          1. Настройване на фиксирана скорост


Ако ще фиксирате скоростта на вашия модем, вероятно няма да ви се налага да правите никакви промени в /etc/gettytab.


          1. Настройка според скоростта на потребителя


Ще се наложи да направите описание на желаната скорост в /etc/gettytab, за да може getty да получи информация за желаните параметри относно вашия модем. Ако разполагате с 2400 битов такъв, можете да използвате съществуващият D2400 низ.

#

#Fast dialup terminals, 2400/1200/300 rotary (can start either way)

#

D2400|d2400|Fast-Dial-2400:\

:nx=D1200:tc=2400-baud:

3|D1200|Fast-Dial-1200:\

:nx=D300:tc=1200-baud:

5|D300|Fast-Dial-300:\

:nx=D2400:tc=300-baud:


Ако имате по-бърз модем, ще се нуждаете от низ в /etc/gettytab. Ето един, който бихте могли да използвате за 14.4 килобитов модем с максимална скорост от 19.2 Kbps:

#

# Additions for a V.32bis Modem

#

um|V300|High Speed Modem at 300,8-bit:\ :nx=V19200:tc=std.300:

un|V1200|High Speed Modem at 1200,8-bit:\ :nx=V300:tc=std.1200:

uo|V2400|High Speed Modem at 2400,8-bit:\ :nx=V1200:tc=std.2400:

up|V9600|High Speed Modem at 9600,8-bit:\ :nx=V2400:tc=std.9600:

uq|V19200|High Speed Modem at 19200,8-bit:\ :nx=V9600:tc=std.19200:


Резултатът е 8 битови връзки без паритет. Горният пример започва предаването със скорост 19.2 Kbps (за V.32 протокол), после преминава през 9600 bps (отново при V.32 протокол), 2400 bps, 1200 bps, 300 bps и накрая отново към 19.2 Kbps. Цикличното преминаване е постигнато с възможностите на функцията nx=(“следваща таблица”). Всеки ред използва ред tc=(“ продължителност на таблицата”), за да подбере останалите “стандартни” настройки за всяка скорост.

Ако имате 28.8 K модем и/или желаете да се възползвате от компресията на данни, ще трябва да настроите по-високо съотношение на предаване на данни. Ето пример за низ в /etc/gettytab, започващ с 57.6 Kbps:


# Additions for a V.32bis or V.34 Modem

# Starting at 57.6 Kbps

vm|VH300|Very High Speed Modem at 300,8-bit:\ :nx=VH57600:tc=std.300:

vn|VH1200|Very High Speed Modem at 1200,8-bit:\ :nx=VH300:tc=std.1200:

vo|VH2400|Very High Speed Modem at 2400,8-bit:\ :nx=VH1200:tc=std.2400:

vp|VH9600|Very High Speed Modem at 9600,8-bit:\ :nx=VH2400:tc=std.9600:

vq|VH57600|Very High Speed Modem at 57600,8-bit:\ :nx=VH9600:tc=std.57600:


Ако имате бавен процесор или натоварена система и нямате серийни портове базирани на 16550A интерфейса, може да получите “sio”/”silo” грешки при 57.6 Kbps.


        1. /etc/ttys


Настройката на файла /etc/ttys беше показана в пример 17-1. Конфигурацията за модеми е подобна, но ние трябва да подадем различен параметър към getty и опреде-лим различен тип терминали. Общият формат за модеми с фиксирана скорост и за такива с променлива е:


ttyd0 "/usr/libexec/getty xxx dialup on


Първият аргумент в горният ред е файлът на устройството – в този случай с ttyd0 се означава /dev/ttyd0 файла, който getty ще наблюдава. Вторият - "/usr/libexec/getty xxx" (xxx ще бъде заменено от първоначалната способност на gettytab да открива терминала), е процесът init, който ще върви над устройството. Третият аргумент dialup е типа терминал по подразбиране. Четвъртият параметър on указва на init, че линията е функционираща. Може да има и пета опция secure, но тя трябва да се използва единствено за физически сигурни терминали (като системната конзола). Подразбиращият се тип терминал (dialup в горния пример) може да зависи от местните предпочитания. dialup е традиционният тип терминал за дайъл-ъп линии, така че потребителите да нагодят техните логин скриптове да засичат кога терминалът е dial-up и автоматично да настройват своя тип терминал. Авторът обаче, смята за по-лесно да зададе vt102 параметъра на неговия сайт, тъй като потребителите му използват VT102 емулация на техните машини.

След като сте променили /etc/ttys, трябва да пратите на init HUP сигнал, за да си прочете наново анстройките. Може да използвате


# kill -HUP 1


да изпратите сигнала. Ако това е първата настройка на сървъра, добре е да изчакате модемите да бъдат конфигурирани и свързани правилно преди да пратите на init HUP сигнал.


          1. Конфигурация с фиксирана скорост


За машини с постоянна скорост на модемите, вашият низ в ttys трябва да има аргумент за константна скорост подавана на getty. За модем, чийто порт е “закован” на 19.2 Kbps, описът в ttys вероятно ще изглежда така:


ttyd0 "/usr/libexec/getty std.19200" dialup on


Ако вашият модем е заключен на различно съотношение на скоростта, заменете с подходящата скорост std.вашата скорост вместо std.19200. Бъдете сигурни, че използвате валиден тип модем, описан в /etc/gettytab.


          1. Настройка според скоростта на потребителя


При конфигурации, адаптиращи се към скоростта на потребителя, вашият низ в ttys трябва да сочи към подходящото начало - низа “автоматична скорост” (auto-baud) в /etc/gettytab. Например, ако бяхте добавили горното решение за модем с променлива скорост, стартиращ с 19.2 Kbps ( ред в gettytab, съдържащ израза V19200 като първи аргумент), то настройката в ttys вероятно ще изглежда така:


ttyd0 "/usr/libexec/getty V19200" dialup on


        1. /etc/rc.serial


Високоскоростните модеми, ползващи протоколите V.32, V.32bis и V.34, трябва да използват хардуерен (RTS/CTS) контрол върху потока от информация. Може да добавите stty команди към /etc/rc.serial, за да подадете параметрите за хардуерен контрол върху СОМ портовете на ядрото.

Например, за да настроите инициализационните устройства на COM2 портовете с опции termios и crtscts за dial-in and dial-out услуги, следните редове могат да бъдат добавени към /etc/rc.serial:


# Serial port initial configuration


stty -f /dev/ttyid1 crtscts

stty -f /dev/cuai01 crtscts


      1. Параметри на модема


Ако имате модем, чийто параметри могат да бъдат постоянно съхранени в обикновената памет, ще се нуждаете от терминално-емулираща програма (като Telix под MS-DOS или tip под FreeBSD), за да ги настроите. Свържете се с модема, използвайки началната скорост на getty и настройте обикновената памет на модема спрямо тези изисквания за налични сигнали:



Моля прочетете документацията към вашия модем, за да откриете кои команди и/или DIP параметри трябва да му бъдат добавени.

Например, за да настроите външен USRobotics Sportster 14,400 съгласно горните изисквания, може да се въведат следните AT команди:


ATZ

AT&C1D2&H1I0R2W


Може да настроите и другите парамети, като дали да използва V.42bis и/или MNP5 компресия.

Външните USR Sportster 14,400 имат някои DIP опции, които трябва да се зададат; за останлите марки и модели може да използвате алгоритъма по-долу като пример:


Кодовете за резулататите трябва да бъдат забранени/подтиснати при dial-up, за да бъдат избегнати проблеми, които могат да се появят ако getty по погрешка даде login: промпт на модем намиращ се в команден режим. Модемът ще отвърне със същата команда или ще даде код за резултат. Получава се продължителен, глупав разговор между getty и модема.


        1. Модеми при системи с постоянна скорост


За да подържате фиксирана скорост, ще трябва да настроите независимо съотношение на предаване на данните. За външен USR Sportster 14,400, следните команди ще фиксират отношението на предаване на данни между компютър и модем:


ATZ

AT&B1W


        1. Модеми при системи с променлива скорост


За системи с променлива скорост, ще трябва да настроите модема да нагажда бързината си на предаване към входящата. При външен USR Sportster 14,400, следните команди ще фиксират съотношението на модема за коригирани данни към това за подаване на команди, но ще позволят скоростта за некоригирани данни да бъде променлива:


ATZ

AT&B2&



        1. Проверка на настройките на модема


Повечето високоскоростни модеми осигуряват команди, с които да прегледате текущите му настройки в що годе четим вид от хората. При външните USR Sportster 14,400, командата ATI5 показва настройките, съхранявани в обикновената памет. За да видите истинските настройки на модема, използвайте ATZ и после ATI4.

Ако имате различна марка, проверете наръчника към него как да прегледате и променяте неговите настройки.


      1. Отстраняване на проблеми


Ето няколко стъпки, които можете да последвате за проверка на дайъл-ъп модема към вашия сървър.


        1. Проверка на операционната система


Свържете модема, заредете FreeBSD и ако вашият модем има лампички, гледайте дали DTR индикатора светва, когато се появява логин промпт на конзолата – ако свети това означава, че FreeBSD е стартирала getty процес върху съответните портове и чака модема да приема обаждания. Ако DTR индикатора не свети, влезте във FreeBSD машината чрез конзолата и въведете ps ax, за да видите дали FreeBSD се опитва да стартира getty процес върху правилния порт. Би трябвало в получения резултат да видите редове сходни на тези по долу:


114 ?? I 0:00.10 /usr/libexec/getty V19200 ttyd0

115 ?? I 0:00.10 /usr/libexec/getty V19200 ttyd1


Ако видите нещо различно, подобно на:


114 d0 I 0:00.10 /usr/libexec/getty V19200 ttyd0


и модемът все още не е приел обаждания, това означава че getty е отворил комуникационния порт. Възможно е да има кабелен проблем или неправилно настроен модем, понеже getty няма да е в състояние да отвори порта преди CD сигнал да е бил подаден от модема.

Ако не виждате getty процеси да чакат да отворят желаните портове, проверете много внимателно какво сте писали в /etc/ttys. Проверете също /var/log/messages за съобщения от init или getty, засягащи каквито и да било проблеми. Ако има такива, проверете още по-старателно в /etc/ttys и в /etc/gettytab, както и файловете /dev/ttydN за грешки, липсващи редове или липсващи устройства в /dev.




        1. Опитайте да влезете


Опитайте да влезете в системата; използвайте 8 бита, без паритет и 1 бит за прекъсване (stop bit) на отдалечената машина. Ако не получите логин промпт веднага, натиснете Enter веднъж на всяка секунда. Ако все още не веждате login: след известно време, опитайте да изпратите сигнал за прекъсване (BREAK).

Ако използвате високоскоростни модеми, опитайте да наберете отново след фиксиране на скоростта на набиране (чрез AT&B1 на USR Sportster, примерно).

Ако все още не получавате login:, проверете /etc/gettytab отново и проверете наново за следните неща:



Ако набирате, но модемът на FreeBSD сървъра не отговаря, проверете дали е настроен да отговаря при подаване на DTR. Ако модемът изглежда, че е настроен правилно, проверете дали се подава DTR, като наблюдавате светлинния индикатор (ако има такъв).

Ако сте минали през всичко няколко пъти и все още не работи, починете и работете по въпроса по-късно. При липса на резултат, може да изпратите съобщение на пощенския списък за общи въпроси за FreeBSD: freebsd-questions@FreeBSD.org, описвайки модема си и трудностите, които имате и добрите хора от списъка ще се опитат да помогнат.


    1. Изходящо набиране (dial-out)


Следните трикове са за свързване на вашата с друга машина през модем. Това е подходящо за установяване на терминална сесия с отдалечен хост. Полезно е за влизане в BBS.

Този тип връзки могат да бъдат много полезни да източите файл от мрежата, ако имате проблеми с PPP. Ако имате нужда да ползвате FTP и PPP е повреден, използвайте терминална сесия за тази цел. После използвайте zmodem да го прехвърлите на вашата машина.

17.5.1 Mоят Хейс модем не е подържан, какво да правя?


Всъщност, страницата от наръчника за тип (tip) е остаряла. Вече съществува подръжка за Хейс модеми. Просто използвайте at=hayes във файла си /etc/remote.

Хейс драйвърът не е много рафиниран да разпознава някои от новите характеристики на новите модеми – съобщения като BUSY, NO DIALTONE или CONNECT 115200 или ще ги сбърка с друго. Трябва да изключите тези съобщения, когато ползвате tip (става с ATX0&W).

Също така, паузата за набиране е 60 секунди. Вашият модем трябва да ползва по-малка пауза, иначе tip ще мисли, че има проблем с комуникациите. Опитайте с ATS7=45&W.

Забележка: Доставяната версия на tip, все още не подържа Хейс модемите вапълно. Решението е да се редактира файла tipconf.h в /usr/src/usr.bin/tip/tip. Очевидно е, че ще се нуждаете от изходния код за тази цел.

Променете реда #define HAYES 0 на #define HAYES 1. После въведете make и make install на конзолата. Всичко работи прекрасно след това.


      1. Нима очаквате да въвеждам всичко?


Има и по-хитър начин – направете “директен” опис в /etc/remote. Например, ако вашият модеме свързан към първия сериен порт - /dev/cuaa0, въведете следния ред:


cuaa0:dv=/dev/cuaa0:br#19200:pa=none.


Използвайте най-високата скорост на вашия модем в низа br . После, напишете tip cuaa0 и ще се свържете с модема. Ако няма такова устройство на машината ви, направете следното:


#cd /dev

#sh MAKEDEV cuaa0


Или използвайте cu програмата като root:


#cu -lline -sspeed


където line е серийният порт (например /dev/cuaa0) and и speed е скоростта (примерно 57600). След като привършите въвеждането на AT командите, натиснете ~. за да излезете.


      1. Знакът @ за телефонната функция не работи!


Знакът @ за телефонната функция указва на tip да погледне в /etc/phones за телефонен номер. Също така е и специален знак, използван в конфигурационни файлове като /etc/remote. Освободете се от второто значение с помощта на обърната наклонена черта:


pn=\@


      1. Как да набирам телефонни номера от команден ред ?


Сложете “обща” конфигурация във файла /etc/remote. Ето и пример:


tip115200|Dial any phone number at 115200 bps:\ :dv=/dev/cuaa0:br#115200:at=hayes:pa=none:du: tip57600|Dial any phone number at 57600 bps:\ :dv=/dev/cuaa0:br#57600:at=hayes:pa=none:du:


След това ще можете да пишете:


# tip - 115200 5551234


Ако предпочитате cu пред tip, изполвайте “общ” cu низ:

cu115200|Use cu to dial any number at 115200bps:\ :dv=/dev/cuaa1:br#57600:at=hayes:pa=none:du:

и въведете:


# cu 5551234 -s 115200


      1. Трябва ли всеки път да въвеждам скоростта?


Сложете ред за tip1200 или cu1200, но можете да сложите каквато скорост си искате във низа br. Тip смята, че 1200 bps е добра скорост по подразбиране. Ето защо търси ред tip1200. Хубавото е, че не сте длъжни да из-ползвате 1200 bps.


      1. Достъп до множество машини през терминален сървър


Вместо да чакате да бъдете свързан и да пишете: CONNECT <host> всеки път, използвайте cm функцията на tip. Ето примерен опис в /etc/remote:


pain|pain.deep13.com|Forrester's machine:\ :cm=CONNECT pain\n:tc=deep13: muffin|muffin.deep13.com|Frank's machine:\

:cm=CONNECT muffin\n:tc=deep13:

deep13:Gizmonics Institute terminal server:\ :dv=/dev/cuaa2:br#38400:at=hayes:du:pa=none:pn=5551234:


който ще ви позволи да пишете tip pain или tip muffin, за да се свържете към хостовете pain или muffin и tip deep13 за да влезете в терминалния сървър.


      1. Може ли tip да набира повече от една линия на сайта?


Това чест е проблем при университетите, където няколко хиляди студенти се опитват да ползват няколкото налични модема.

Опишете вашият университет в /etc/remote и изполвайте знака @ за функцията pn:


big-university:\

:pn=\@:tc=dialout

dialout:\

:dv=/dev/cuaa3:br#9600:at=courier:du:pa=none:


После избройте телефонните номера в /etc/remote:


big-university 5551111