Глава 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

big-university 5551112

big-university 5551113

big-university 5551114


Тip ще опита да набере всеки номер и ако всички са заети ще прекрати работата си. Ако искате да опитвате отново и отново, пуснете tip в цикъл.


17.5.8 Защо трябва да натискам Ctrl+P два пъти, за да пратя Ctrl+Р веднъж?


Ctrl+P е подрабиращият се “силов” сигнал, използван за указване на tip, че следващите знаци са обикновени данни. Можете да настроите “силовия” сигнал на каквото искате с ~s escape, което значи “ настрой променлива”.

Въведете ~sforce=single-char последвано от нов ред. Single-char е който и да е знак от клавиатурата. Ако не въведете single-char, тогава новият “силов” знак е нула, който може да бъде изведен с комбинацията Ctrl+2 или Ctrl+Space. Добра алтернатива е Shift+Ctrl+6, използван единствено на някои терминални сървъри.

Можете да зададете стойност по ваш вкус на “силовия” знак, като го опишете във вашия файл $HOME/.tiprc: force=<single-char>


      1. Изведнъж всичко, което пиша е с ГЛАВНИ БУКВИ?


Трябва да сте натиснали комбинацията Ctrl+A, която отговаря за главните букви в tip, специално направена за хора с потрошени CAPS lock клавиши. Използвайте ~s както по-горе и настройте променливата raisechar на нещо по ваш вкус. В същност може да я ползвате като “силов” знак, ако сте преценили, че няма да ви трябват главни букви. Ето примерен .tiprc, идеален за Emacs потребители, които трябва да пишат много пъти Ctrl+2 и Ctrl+A:


force=^^

raisechar=^^


Комбинацията ^^ е Shift+Ctrl+6


      1. Как стават файловите трансфери с tip?


Ако сте се свързали с друга Unix машина system, можете да пращате и получавате файлове с командите ~p (put) и ~t (take). Тези команди, задействат cat и echo на отдалечената система за прием и предаване на файлове.

Синтаксисът е :


~p наш файл [чужд файл]

~t чужд файл [наш файл]

Няма проверки за грешки, така че би трябвало да използвате друг протокол като zmodem.


      1. Как да стартирам zmodem с tip?


За да получите файлове, стартирайте изпращащата програма на отдалечение хост. После въведете ~C rz, за да започне получаването им.

За да изпратите файлове, стартирайте получаващата програма на отдалечената машина. После въведете ~C sz, за да ги изпратите на отдалечената машина.


    1. Настройка на серийна конзола


написано от Кazutaka Yokota. Основано на документ от Bill Paul.


      1. Въведение


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

Както е описано в глава 7, FreeBSD е възприела тристепенна система на зареждане. Първите два стадия са в кода на зареждащия блок, намиращ се в началото на FreeBSD дяла на зареждащия диск. Тогава зареждащият блок ще се зареди и стартира буут лоудъра (/boot/loader) като трети стадий.

За да настроите серийна конзола, трябва да настроите кода на зареждащия блок,буутлоудъра и ядрото.


      1. Настройка на серийна конзола


  1. Подгответе серийния кабел. Ще се нуждаете от null-modem кабел или стандартен сериен такъв. Вижте раздел 17.2.2 по този въпрос.


  1. Разкачете клавиатурата си.Повечето PC-та проверяват за нея повреме на Power-On Self-Test (POST) теста и ще съобщят за грешка, ако не я открият. Някои машини ще врънкат доста звучно за липсата на клавитура и ще откажат да зареждат, докато не бъде включена.


Ако компютърът ви се оплаче за липсата на клавиатура, но продължи да зарежда, тогава не трябва да правите нищо. ( Някои машини с Phoenix BIOS бегло ще промълвят: “Keyboard failed”нататък.) Ако компютърът ви откаже да зареди без прикачена клавиатура, тогава ще трябва да настроите BIOS-а да пренебрегва тази грешка (ако може). Погледнете наръчника към дънната си платка за подробности как да стане това.


Съвет: Задаването в BIOS на клавиатура като “Not installed”, не означава че няма да можете да я ползвате. Просто указва на BIOS да не я търси при включване. Можете да оставите клавиатурата включена, дори когато тази опция е активирана и пак ще можете да я ползвате.

Забележка: Ако вашят компютър има PS/2 мишка, вероятността да се наложи да я махнете е много голяма. Това е така понеже PS/2 мишките споделят някои хардуерни ресурси с клавиатурата. Оставянето на мишката закачена, може да доведе до подлъгване на BIOS, че клавиатурата е още на мястото си. По подобен начин се държи Gateway 2000 с Pentium 90 MHz процесор и AMI BIOS. Като цяло, това не е проблем, понеже само мишка не е много полезна без кла-виатура.


  1. Свържете терминала към COM1 порта (sio0)

Ако нямате терминал, може да използвате старо PC/XT с терминален софтуер или серийния порт на друга Юникс машина. Ако нямате COM1 порт(sio0), купете си. В настоящия момент няма начин да изберете друг порт освен COM1 за зареждащия блок без да го прекомпилирате. Ако вече използвате COM1 за друго устройство, ще трябва временно да го отстраните и инсталирате нов зареждащ блок и ядро, веднага щом заредите FreeBSD. (Предполага се, че COM1 е на разположение на всички видове сървъри; ако наистина COM1 ви трябва за друго (и не можете да сложите другото на COM2 (sio1)), тогава на първо място въобще не трябва да си давате зор по въпроса.)


  1. Проверете дали конфигурационният файл на ядрото има въведени подходящите опции зададени на COM1 (sio0):

Въпросните опции са:


0x10


Разрешава подръжката на конзоли в ядрото. Другите параметри ще бъдат пренебрегнати, освен ако този не е зададен. За момента, почти всяка машина може да има подръжка на конзола; като за предпочитане е първата от тях (по реда на конфигурационния файл) да бъде с тази настройка. Само тази опция няма да превърне серийния порт в конзола. Задайте следващата опция за тази цел или използвайте -h параметъра,описан по-долу заедно с този.

0x20


Форсира устройството да изпълнява ролята на конзола (освен ако няма друга с по-висок приоритет), независимо от опцията -h обсъждана по-долу. Този параметър заменя литерала COMCONSOLE във версиите 2.х на FreeBSD. Опцията 0x20 трябва да бъде използвана заедно с 0x10.


0x40


Резервира оборудването (в съответствие с 0x10) и го прави недостъпно за нормален достъп. Не трябва да зада-вате тази опция на порта, на който желаете да сложите конзолата. Единственото предназначение на този флаг е да подготви машината за отдалечено дебъгване на ядрото. Вижте “Наръчник на разработчика” за повече подробности за отдалечено дебъгване.

Забележка: Във FreeBSD 4.0 и по-нагоре, значението на 0x40 е доста по-различно и има друг параметър за отдале-чено дебъгване.


Пример:


device sio0 at isa? port IO_COM1 flags 0x10 irq 4


Вижте man sio за повече подробности.

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


  1. Създайте файл boot.config в главната директория на a дяла на зареждащия диск. Този файл ще укаже на зареждащия блок как вие искате да зареди операционната система. За активиране на серийната конзола, ще ви трбяват една или повече от следните опции – ако искате много опции, включете ги всичките на един и същи ред:


-h


Избор между вътрешна и серийна конзола. Използвайте за превключване на конзолите. Например, ако заредите от вътрешната(видео) конзолата, може да ползвате -h да насочите буутлоудъра и ядрото да използват серийния порт като конзолно устройство. Алтернативно, зареждайки от серийния порт, с -h може да насочите буутлоудъра и ядрото да ползват монитора вместо серийната конзола.


-D


Дава възможност за избор между единична и двойна конфигурация. При единичната, конзолата ще бъде или вътрешния видео адаптер или COM порта, в зависимост от състоянието на -h опцията по-горе. В двойната конфигурация, и монитора и COM порта ще бъдат конзоли едновременно, независимо от сътоянието на -h. Залбележете обаче, че двойната конфигурация има ефект единствено докато зареждащият блок върви. Веднъж щом буутлоудъра поеме нещата, конзолата определена от -h става единствената.


-P


Указва на зареждащия блок да търси за клавиатура. Ако не се намери такава,-D и -h се запускат автоматично.

Забележка: Поради ограничения в мястото на текущата версия на буут (зареждащия) блок, с -P опцията могат да се откриват единствено по-нови поколения клавиатури. Такива с по-малко от 101 клавиша (и без F11, и F12 клавиши) могат да не бъдат открити. Някои лаптопи могат да имат същия проблем, в следствие на това ограничение. Ако това е така на вашата машина, откажете се от употребата на -P (или си купете клавиатура с 105 и повече кла-виша – бел. прев.). За съжаление няма решение за този проблем (с по-старите клавиатури, бел. прев.).

Използвайте или -P да изберете конзолата автоматично, или -h да активирате серийната конзола. Също така, може да включите други опции, описани в boot(8).

Опциите, с изключение на -P, ще бъдат подадени на буутлоудъра (/boot/loader). Буутлоудъра ще определи кой от видео или серийните портове да стане конзола, като провери състоянието на -h. Това означава, че ако зададете -D но не и -h в /boot.config, може да използвате COM порт като конзола само докато действа буут блока. Зареждащата програма обаче ще използва монитора за конзола.


  1. Включете компютъра. При стартиране на FreeBSD, буут блока ще изведе за момент съдържанието на /boot.config върху конзолата. Пример:


/boot.config: -P

Keyboard: no


Вторият ред се появява единствено, ако сложите -P в /boot.config и обозначава присъствието/отсъствието на клавиатура. Тези съобщения отиват или на серийната или на вътрешната конзола, или и на двете, в зависимост от параметрите в /boot.config. Вижте таблицата по-долу за детайли.


Опции в /boot/config

Съобщенията отиват на

Никакви

вътрешната конзола

-h

серийната конзола

-P, при наличие на клавитура

вътрешната конзола

-P, без клавиатура

серийната конзола

-D

двете конзоли

-Dh

двете конзоли


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

Въведете кой да е клавиш без Enter на конзолата, за да прекъснете процеса на зареждане. Буутблока ще ви попита какво да прави по-нататък. Би трябвало да видите нещо подобно на:


FreeBSD/i386

BOOT Default: 0:wd(0,a)/boot/loader

boot:


Проверете дали горните съобщения се появяват на обикновената или серийна конзола, или на двете, в зависимост от опциите, зададени в /boot.config. Ако съобщенията се появят на правилната конзола, насиснете Enter да продължите процеса на зареждане.

Ако искате да се появят на серийната конзола, но не виждате нищо на серийния терминал, значи нещо сте объркали с настройките. Междувременно, въведете -h и натиснете Enter/Return (ако е възможно), да укажете на буутблока (а после на буутлоудъра и ядрото) да изберат серийния порт за конзолата. Веднъж заредили, върнете се обратно и проверете какво се е объркало.

След зареждане на буутлоудъра, намирайки се в третата фаза на зареждане, все още можете да превключвате между вътрешната и серийната конзола като настроите съответните променливи в него. Вижте раздел 17.6.5 за повече подробности.


      1. Обобщение


Ето обобщение на различните параметри, обсъдени в този раздел и избрани в последствие.


17.6.3.1 Сценарий N1: задавате за COM1 параметър 0x10


device sio0 at isa? port IO_COM1 flags 0x30 irq 4


Опции в /boot.config

Конзола по време на действие на буутблока

Конзола по време на действие на буутлоудъра

Конзола след зареждане на ядрото

Без опции

вътрешната

вътрешната

вътрешната

-h

серийната

серийната

серийната

-D

двете

вътрешната

вътрешната

-Dh

двете

серийната

серийната

-P, при наличие на клавиа-тура

вътрешната

вътрешната

вътрешната

-P, при липса на клавиатура

серийната

вътрешната

серийната















        1. Сценарий N2: задавате за COM1 параметър 0x30


device sio0 at isa? port IO_COM1 flags 0x30 irq 4


Опции в /boot.config

Конзола по време на действие на буутблока

Конзола по време на действие на буутлоудъра

Конзола след зареждане на ядрото

Без опции

вътрешната

вътрешната

серийната

-h

серийната

серийната

серийната

-D

двете

вътрешната

серийната

-Dh

двете

серийната

серийната

-P, при наличие на клавиа-тура

вътрешната

вътрешната

серийната

-P, при липса на клавиатура

двете

серийната

серийната


      1. Съвети за серийната конзола


        1. Задаване на по-бърза скорост на серийния порт


По подразбиране, настройките на серийния порт са: скорост 9600, 8 бита, без паритет и 1 бит за спиране. Ако желаете да промените скоростта, трябва да прекомпилирате поне зареждащия блок. Добавете следния ред в /etc/make.conf и компилирайте нов буутблок:


BOOT_COMCONSOLE_SPEED=19200


Ако серийната конзола е настроена по някакъв друг начин освен да зарежда с -h или серийната конзола използвана от ядрото и различна от тази, която използва зареждащият; тогава също трябва да добавите следната опция към конфигурационния файл на новото ядро:


options CONSPEED=19200

        1. Използване на порт различен от sio0 за серийната конзола


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


  1. Вземете изходния код на ядрото (виж Глава 22)

  2. Редактирайте /etc/make.conf и задайте променливата BOOT_COMCONSOLE_PORT според адреса на порта, който желаете (0x3F8, 0x2F8, 0x3E8 or 0x2E8). Само портове между sio0 и sio3 ( от COM1 до COM4) могат да бъдат използвани; многопортови серийни карти няма да работят. Не е нужно да се настройват прекъсванията.

  3. Създайте собствена конфигурация за ядрото и добавете съответните параметри за COM портовете, които искате да използвате. Примерно, ако искате sio1 (COM2) за конзола:


device sio1 at isa? port IO_COM2 flags 0x10 irq 3

device sio1 at isa? port IO_COM2 flags 0x30 irq 3


Параметрите на другите серийни портове не трябва да бъдат задавани.

  1. Прекомпилирайте и инсталирайте буутблока и буутлоудъра:


# cd /sys/boot

# make

# make install


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

  2. Запишете буутблока на зареждащия диск с disklabel(8) и заредете новото ядро.


        1. Влизане в DDB дебъгъра през серийната конзола


Ако желаете да влезете в дебъгъра на ядрото от серийната конзола ( полезно за отдалечена диагностика, но много опасно ако случайно през конзолата натиснете Ctlr+C !), тогава ще трябва да компилирате ядрото си със следните опции:


options BREAK_TO_DEBUGGER

options DDB


        1. Извеждане на логин промпт на серийната конзола


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


  1. Отворете файла /etc/ttys с редактор и намерете редовете:


ttyd0 "/usr/libexec/getty std.9600" unknown off secure

ttyd1 "/usr/libexec/getty std.9600" unknown off secure

ttyd2 "/usr/libexec/getty std.9600" unknown off secure

ttyd3 "/usr/libexec/getty std.9600" unknown off secure


ttyd0 до ttyd3 съответсва на COM1 до COM4. Сменете off на on за желания порт. Ако сте сменили скоростта на серийния порт, трябва да смените std.9600 да съответства на текущите настройки, примерно std.19200.

Може също да желаете да сменине типа на терминала от неизвестен (unknown) на действителния вид на вашия терминал.

След редактиране на файла, тряба да въведете kill -HUP 1, за да влязат в сила настройките.


17.6.5.Смяна на конзолата от буутлоудъра


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


        17.6.5.1 Настройка на серийната конзола


Можете лесно да определите буутлоудъра и ядрото за серийната конзола, въвеждайки един ред в /boot/loader.rc:


set console=comconsole


Това ще влезе в сила независимо от настройки в буутблока, обсъждани в предния раздел. По-добре е да поставите горният ред като първи в /boot/loader.rc, така че съобщенията при зареждане да се виждат възможно най-рано.

Аналогично, ожете да определите вътрешната конзола като:


set console=vidconsole


Ако не определите променливите за конзола на буутлоудъра, той и след това ядрото ще използват конзолата, отбелязана с -h опцията в зареждащия блок.

Във версия 3.2 или по-висока, можете да определите конзолата в /boot/loader.conf.local или в /boot/loader.conf, отколкото в /boot/loader.rc. По този начин, вашият /boot/loader.rc би изглеждал така:


include /boot/loader.4th

start


После, създайте /boot/loader.conf.local и сложете следния ред там:.


console=comconsole


или


console=vidconsole


Вижте loader.conf(5) за повече информация.


Забележка: В момента, буутлоудъра няма опция еквивалентна на -P опцията от зареждащия блок. Няма и възможност автоматично да се избира вътрешната или серийната конзола според наличието/отсъствието на клавиатура.


17.6.5.2. Използване на сериен порт различен от sio0 за конзолата


Трябва да прекомпилирате буутлоудъра да използва COM порт различен от sio0 за серийната конзола. Следвайте процедурата в раздел 17.6.4.2.


        17.6.6. Недостатъци

Идеята тук е да се помогне на хората да настроят много сигурни сървъри, които не се нуждаят от графични карти и периферия, нито от клавиатура.

За съжаление, повечето компютри няма да ви позволят да заредите без клавиатура, а още по-малко са онези дето ще ви позволят да заредите без графична карта. Машините с AMI BIOS могат да бъдат настроени да зареждат без инсталирана графична карта, просто като смените опцията “graphics adapter” в CMOS на “Not installed.”'

Обаче много системи не подържат тази опция и ще откажат да буутват, ако нямат графичен хардуер в тях. Ще трябва да оставите в тях някаква карта, била тя и монохромна; въпреки че няма да ви се налага да закачате монитор към нея. Може да пробвате да качите AMI BIOS.

1Първото поле обикновено определя името на устройството така както е в /dev директорията

2Второто поле е командата, която трябва да бъде изпълнена(обикновено getty(8)). Getty инициализира и отваря реда, задава скоростта, запитва за потребителско име и изпълнява login(1) програмата. Също така, тя приема един (по избор) параметър в комаден ред, това е getty типа.Той казва за характеристиките на терминалната линия, като bps и паритет. Програмата getty чете тези характеристики от /etc/gettytab.

3Третото поле е за терминалите, които са свързани към въпросната комуникационна линия. За dial-up портове unknown или dialup е типичният опис, понеже потребителите могат да набират с кой да е терминал или софтуер. За свързани терминали, типа не се променя, така че може да сложите истински тип от termcap(5) файла в това поле.За нашия пример WYSE-50 си ползва истинските параметри, докато 286-цата ще бъде настроена да емулира VT-100.

4Четвъртото поле определя дали портът трябва да бъде разрешен. Пишейки on тук ще накара процеса init да стартира програмата във второто поле, off ще го изключи и влизането от този порт няма да бъде възможно.

5Последното поле се използва да определи дали портът е сигурен. Отбелязвайки го като сигурен, означава че вие вярвате достатъчно, че да позволите root ( или кой да е потребител с потребителски номер равен на 0) да влиза от този порт. Insecure не разрешава root влизания. На несигурен порт, потребителите трябва да влезат като непривилигеровани потребители и после използват su(1) или сходен механизъм за придобиване на администраторски права. Препоръчва се да използвате insecure дори за терминали зад заключени