27.6. Seriële console opzetten

Bijgedragen door Kazutaka YOKOTA. Gebaseerd op een document van Bill Paul.

WaarschuwingVanaf FreeBSD 8.0 zijn de seriële poorten hernoemd van /dev/cuadN naar /dev/cuauN en van /dev/ttydN naar /dev/ttyuN. FreeBSD 7.X gebruikers moeten de documentatie aanpassen naar deze wijzigingen.

27.6.1. Inleiding

FreeBSD biedt de mogelijkheid om op een systeem op te starten met slechts een domme terminal en een seriële poort als console. Dit soort opstellingen is handig voor twee soorten mensen: voor systeembeheerders die FreeBSD willen installeren op machines die geen toetsenbord of beeldscherm hebben en voor ontwikkelaars die de kernel of apparaatstuurprogramma's willen debuggen.

Zoals beschreven in Hoofdstuk 13, gebruikt FreeBSD drie fasen voor het opstarten. De eerste twee fasen bevinden zich in de code van het opstartblok dat zich aan het begin van de opstartslice van FreeBSD op de opstartschijf bevindt. Het opstartblok laadt vervolgens de opstartlader (/boot/loader) en draait als de code van de derde fase.

Om de seriële console gereed te maken moeten de code in het opstartblok, de code van de opstartlader en de kernel worden ingesteld.

27.6.2. De seriële console instellen, korte versie

Deze sectie neemt aan dat de standaard opstelling wordt gebruikt en dat een kort overzicht voor het opzetten van de seriële console gewenst is.

  1. Verbind de seriële kabel met COM1 en de leidende terminal;

  2. Om alle opstartmeldingen op de seriële console te zien, dient het volgende commando als supergebruiker uitgevoerd te worden:

    # echo 'console="comconsole"' >> /boot/loader.conf
    
  3. Bewerk /etc/ttys en wijzig off in on en dialup in vt100 voor de regel ttyu0. Indien dit niet gebeurt is er geen wachtwoord nodig om met de seriële console te verbinden, wat tot een mogelijk beveiligingslek leidt;

  4. Start het systeem opnieuw op om te zien of de veranderingen effect hebben.

Indien een andere instelling nodig is, is er een diepgaandere uitleg over instellingen beschikbaar in Paragraaf 27.6.3.

27.6.3. De seriële console instellen

  1. Bereid een seriële kabel voor.

    Benodigd zijn een nulmodem-kabel òf een standaard seriële kabel samen met een nulmodem-adapter. Zie Paragraaf 27.2.2 voor een beschrijving van seriële kabels.

  2. Ontkoppel het toetsenbord.

    De meeste PC-systemen zoeken naar het toetsenbord tijdens de Power-On Self-Test (POST) en geven een foutmelding als het toetsenbord niet is gevonden. Sommige systemen klagen luid over het ontbreken van een toetsenbord en gaan niet verder met opstarten totdat het is aangesloten.

    Indien de computer klaagt over de fout, maar desondanks opstart, is het niet nodig iets speciaals te doen. Sommige machines waarop Phoenix BIOS is geïnstalleerd melden enkel “Toetsenbord faalde” en gaan normaal door met opstarten.

    Indien de machine weigert zonder toetsenbord op te starten dient het BIOS ingesteld te worden zodat het deze fout negeert (als het dit kan). Raadpleeg het handboek van het moederbord voor verdere aanwijzingen.

    Tip: Stel het toetsenbord in op “Niet geïnstalleerd” in de BIOS-instellingen. Het is dan nog steeds mogelijk om het toetsenbord te gebruiken. Dit zorgt er alleen voor dat het BIOS niet naar een toetsenbord zoekt tijdens het aanzetten. Het BIOS dient niet te klagen als het toetsenbord ontbreekt. Het is mogelijk om het toetsenbord aangesloten te laten, zelfs als deze vlag is ingesteld op “Niet geïnstalleerd” en het toetsenbord werkt nog steeds. Kijk, als de bovenstaande optie niet in het BIOS aanwezig is, naar een optie “Halt on Error”. Het instellen van deze optie op “All but keyboard” of zelfs op “No Errors” zal hetzelfde effect hebben.

    Opmerking: Als een systeem een PS/2®-muis heeft, is het goed mogelijk dat naast het toetsenbord ook de muis losgekoppeld moet worden. Dit komt doordat PS/2-muizen wat hardware met het toetsenbord delen. Als de muis aangesloten blijft, kan het zoeken naar het toetsenbord als resultaat hebben dat het toetsenbord er nog steeds is. Een Gateway 2000 Pentium 90 MHz systeem met een AMI BIOS schijnt zich op deze manier te gedragen. Over het algemeen is dit geen probleem aangezien een muis zonder toetsenbord sowieso weinig nut heeft.

  3. Sluit een domme terminal aan op COM1 (sio0).

    Indien er geen domme terminal aanwezig is, kan een oude PC met een modemprogramma of de seriële poort van een andere UNIX® machine gebruikt worden. Indien er geen COM1 (sio0) aanwezig is dient deze geregeld te worden. Op dit moment is er geen manier om een andere poort dan COM1 voor de opstartblokken te selecteren, afgezien van deze opnieuw te compileren. Indien COM1 al voor een ander apparaat gebruikt wordt, verwijder dat apparaat dan tijdelijk en installeer een nieuw opstartblok en een nieuwe kernel zodra FreeBSD werkt. Er wordt aangenomen dat COM1 sowieso beschikbaar is op een bestands-/reken-/terminalserver. Als COM1 ècht voor iets anders nodig is (en het niet mogelijk is om dat op COM2 (sio1) over te zetten), is het sowieso al onverstandig om hiermee bezig te zijn.)

  4. Controleer of het instellingenbestand van de kernel de juiste vlaggen ingesteld heeft voor COM1 (sio0).

    Relevante vlaggen zijn:

    0x10

    Zet console-ondersteuning voor deze eenheid aan. De andere consolevlaggen worden genegeerd tenzij deze is aangezet. Momenteel kan ten hoogste één eenheid console-ondersteuning hebben. De eerste (in de volgorde van het instellingenbestand) waarvan deze vlag is aangezet heeft de voorkeur. Deze optie zelf maakt de seriële poort geen console. Stel de volgende vlag in of gebruik de onderstaande optie -h samen met deze vlag.

    0x20

    Dwingt deze eenheid om de console te zijn (tenzij er een andere console met hogere prioriteit is), ongeacht de onderstaande optie -h. De vlag 0x20 dient samen met de vlag 0x10 gebruikt te worden.

    0x40

    Reserveert deze eenheid (in samenwerking met 0x10) en maakt de eenheid ontoegankelijk voor normale toegang. Deze vlag dient niet aangezet te worden op de seriële poort van de eenheid die als seriële console gebruikt gaat worden. De enige functie van deze vlag is de eenheid voor het debuggen van de kernel op afstand aan te merken. Zie het Ontwikkelaarshandboek voor meer informatie over debuggen op afstand.

    Voorbeeld:

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

    Zie de hulppagina sio(4) voor meer details.

    Indien de vlaggen niet waren ingesteld, dient UserConfig gedraaid te worden (op een andere console) of de kernel opnieuw gecompileerd te worden.

  5. Maak boot.config aan in de hoofdmap van de partitie a van de opstartschijf.

    Dit bestand instrueert de code op het opstartblok hoe het systeem opgestart dient te worden. Om de seriële console te activeren, zijn één of meer van de volgende opties nodig. Indien meerdere opties gewenst zijn, dienen ze allemaal op dezelfde regel te staan:

    -h

    Wisselt tussen de interne en de seriële console. Indien bijvoorbeeld vanaf de interne (video)console opgestart wordt, kan -h gebruikt worden om het console-apparaat van de opstartlader en de kernel om te leiden naar de seriële console. Indien vanaf de seriële poort opgestart wordt, kan -h gebruikt worden om de opstartlader en de kernel het videoscherm als console te laten gebruiken.

    -D

    Wisselt tussen opstellingen met een enkele en een dubbele console. In opstellingen met een enkele console is de console òfwel de interne console (videoscherm) òfwel de seriële poort, afhankelijk van bovenstaande optie -h. In opstellingen met een dubbele console worden zowel het videoscherm als de seriële poort tegelijkertijd console, ongeacht de toestand van de optie -h. De opstelling met een dubbele console heeft alleen effect als het opstartblok draait. Zodra de opstartlader het overneemt, wordt de console die met de optie -h gespecificeerd is de enige console.

    -P

    Zorgt ervoor dat het opstartblok naar het toetsenbord zoekt. Als er geen toetsenbord wordt gevonden, worden de opties -D en -h automatisch ingesteld.

    Opmerking: Vanwege ruimtebeperkingen in de huidige versie van het opstartblok, is de optie -P alleen in staat om uitgebreide toetsenborden te detecteren. Toetsenborden met minder dan 101 toetsen (en zonder de toetsen F11 en F12) worden mogelijk niet gedetecteerd. Toetsenborden op sommige laptops worden vanwege deze beperking mogelijk niet correct gevonden. Indien dit het geval is met een systeem, vermijd dan de optie -P. Helaas is er geen mogelijkheid om dit probleem te omzeilen.

    Gebruik om de console automatisch te selecteren òfwel de optie -P òfwel de optie -h om de seriële console te activeren.

    De andere opties beschreven in boot(8) kunnen ook gebruikt worden.

    De opties, behalve -P, worden aan de opstartlader (/boot/loader doorgegeven. De opstartlader bepaalt of de interne videopoort of de seriële poort de console wordt door enkel naar de toestand van de optie -h te kijken. Dit betekent dat als de optie -D, maar niet de optie -h in /boot.config gespecificeerd wordt, de seriële poort alleen tijdens het opstartblok als console gebruikt kan worden, de opstartlader gebruikt het interne videoscherm als console.

  6. Start de machine op.

    Als FreeBSD gestart wordt, tonen de opstartblokken de inhoud van /boot.config op de console. Bijvoorbeeld:

    /boot.config: -P
    Keyboard: no
    

    De tweede regel verschijnt alleen als -P in /boot.config staat en aangegeven wordt of het toetsenbord aanwezig of afwezig is. Deze berichten gaan of naar de seriële of interne console of naar beide, afhankelijk van de optie in /boot.config.

    Opties Bericht gaat naar
    geen interne console
    -h seriële console
    -D seriële en interne consoles
    -Dh seriële en interne consoles
    -P, toetsenbord aanwezig interne console
    -P, toetsenbord afwezig seriële console

    Na de bovenstaande berichten is er een korte pauze voordat de opstartblokken doorgaan met het laden van de opstartlader en voordat er verdere berichten op de console worden afgebeeld. Normaalgesproken hoeven de opstartblokken niet onderbroken te worden, maar het kan gedaan worden om er zeker van te zijn dat alles goed is ingesteld.

    Om het opstartproces te onderbreken, kan op elke andere toets dan Enter gedrukt worden. De opstartblokken vragen dan om verdere actie. Er verschijnt iets als het volgende:

    >> FreeBSD/i386 BOOT
    Default: 0:ad(0,a)/boot/loader
    boot:
    

    Controleer of de bovenstaande boodschap naar de seriële of interne console of beide gaat, naar gelang de opties in /boot.config. Indien de boodschap op de juiste console verschijnt kan op Enter gedrukt worden om het opstartproces voort te zetten.

    Als de seriële console gewenst is maar de prompt niet op de seriële terminal verschijnt, is er iets mis met de instellingen. Voer in de tussentijd -h in en druk op Enter of Return (indien mogelijk) om aan het opstartblok (en vervolgens de opstartlader en de kernel) te vertellen dat de seriële poort console moet worden. Controleer als het systeem draait wat er verkeerd ging.

Nadat de opstartlader is geladen en het derde stadium van het opstartproces bereikt is, kan er nog steeds gewisseld worden tussen de interne console en de seriële console door de juiste omgevingsvariabelen in de opstartlader in te stellen. Zie Paragraaf 27.6.6.

27.6.4. Samenvatting

Hieronder volgt een samenvatting van de verschillende instellingen die in deze sectie en de uiteindelijk gekozen console beschreven zijn.

27.6.4.1. Geval 1: vlaggen ingesteld op 0x10 voor sio

device sio0 at isa? port IO_COM1 flags 0x10 irq 4
Opties in /boot.config Console tijdens de opstartblokken Console tijdens de opstartlader Console in kernel
niets intern intern intern
-h serieel serieel serieel
-D serieel en intern intern intern
-Dh serieel en intern serieel serieel
-P, toetsenbord aanwezig intern intern intern
-P, toetsenbord afwezig serieel en intern serieel serieel

27.6.4.2. Geval 2: vlaggen ingesteld op 0x30 voor sio

device sio0 at isa? port IO_COM1 flags 0x30 irq 4
Opties in /boot.config Console tijdens de opstartblokken Console tijdens de opstartlader Console in kernel
niets intern intern serieel
-h serieel serieel serieel
-D serieel en intern intern serieel
-Dh serieel en intern serieel serieel
-P, toetsenbord aanwezig intern intern serieel
-P, toetsenbord afwezig serieel en intern serieel serieel

27.6.5. Tips voor de seriële console

27.6.5.1. Een hogere snelheid voor de seriële poort instellen

Standaard zijn de instellingen van de seriële poort: 9600 baud, 8 bits, geen pariteit, en 1 stopbit. Indien het wenselijk is om de snelheid te veranderen, zijn de volgened opties beschikbaar:

  • Hercompileer de opstart blokken met BOOT_COMCONSOLE_SPEED ingesteld op de nieuwe console snelheid. Zie Paragraaf 27.6.5.2 voor gedetailleerde instructies over het bouwen en installeren van nieuwe opstartblokken.

    Als de seriële poort anders is gespecificeerd dan met -h bij het opstarten, of als de seriële console die gebruikt wordt door de kernel anders is dan die gebruikt wordt door de opstart blokken, dan moet de volgende optie aan het kernel instellingen bestand worden toegevoegd en moet de kernel opnieuw gecompileerd worden:

    options CONSPEED=19200
    
  • Gebruik de -S opstartoptie van de kernel. De optie -S kan worden toegevoegd aan het bestand /boot.config. Zie de handleiding boot(8) voor een beschrijving over hoe opties kunnen worden toegevoegd aan /boot.conf, en welke opties ondersteund worden.

  • Zet de comconsole_speed optie in het /boot/loader.conf bestand.

    Deze optie is ervan afhankelijk dat de console, boot_serial en boot_multicons ingesteld staan in /boot/loader.conf. Een voorbeeld van hoe comconsole_speed gebruikt kan worden om de console snelheid aan te passen:

    boot_multicons="YES"
    boot_serial="YES"
    console_speed="115200"
    console="comconsole,vidconsole"
    

27.6.5.2. Een andere seriële poort dan sio0 voor de console gebruiken

Het gebruik van een andere poort dan sio vergt wat hercompileren. Indien het gewenst is om een andere seriële poort te gebruiken, hercompileer dan de opstartblokken, de opstartlader en de kernel als volgt:

  1. De broncode van de kernel moet beschikbaar zijn. Zie Hoofdstuk 25;

  2. Bewerk /etc/make.conf en stel BOOT_COMCONSOLE_PORT in op het adres van de te gebruiken poort (0x3F8, 0x2F8, 0x3E8 of 0x2E8). Alleen sio0 tot en met sio3 (COM1 tot en met COM4) zijn te gebruiken. Seriële kaarten met meerdere poorten werken niet. Interrupts instellen is niet nodig;

  3. Maak een aangepast kernelinstellingenbestand aan en voeg de juiste vlaggen toe voor de te gebruiken seriële poort. Als bijvoorbeeld sio1 (COM2) de console moet worden:

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

    Alternatief:

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

    Stel de consolevlaggen voor de andere seriële poorten niet in;

  4. Hercompileer en installeer de opstartblokken en de opstartlader:

    # cd /sys/boot
    # make clean
    # make
    # make install
    
  5. Herbouw en installeer de kernel;

  6. Schrijf de opstartblokken met disklabel(8) naar de opstartschijf en start met de nieuwe kernel op.

27.6.5.3. De debugger DDB gebruiken via de seriële verbinding

Als het wenselijk is om vanuit de seriële console in de kerneldebugger te vallen - nuttig voor diagnose op afstand, maar ook gevaarlijk indien een onbedoelde BREAK op de seriële poort wordt gegenereerd! - compileer de kernel dan met de volgende opties:

options BREAK_TO_DEBUGGER
options DDB

27.6.5.4. Een aanmeldprompt op de seriële console krijgen

Hoewel dit niet nodig is, kan het gewenst zijn om een aanmeldprompt over de seriële lijn te krijgen, nu het mogelijk is om opstartboodschappen te zien en de kerneldebugsessie door de seriële console betreden kan worden. Hier volgt hoe het te doen.

Open het bestand /etc/ttys met een tekstverwerker en zoek de volgende regels:

ttyu0 "/usr/libexec/getty std.9600" unknown off secure
ttyu1 "/usr/libexec/getty std.9600" unknown off secure
ttyu2 "/usr/libexec/getty std.9600" unknown off secure
ttyu3 "/usr/libexec/getty std.9600" unknown off secure

ttyu0 tot en met ttyu3 komen overeen met COM1 tot en met COM4. Wijzig off in on voor de gewenste poort. Als de snelheid van de seriële poort is gewijzigd, wijzig dan std.9600 zodat het met de huidige instelling overeenkomt, bijvoorbeeld std.19200.

Het kan ook wenselijk zijn om het terminaltype te wijzigen van unknown naar het eigenlijke type van de seriële terminal.

Voer kill -HUP 1 uit na het wijzigen van het bestand om de wijzigingen actief te maken.

27.6.6. De console vanuit de opstartlader veranderen

De vorige secties beschreven hoe de seriële console ingesteld kan worden door het instellen van het opstartblok. Deze sectie toont dat het mogelijk is om de console te specificeren door het invoeren van enkele opdrachten en omgevingsvariabelen in de opstartlader. Aangezien de opstartlader tijdens het derde stadium van het opstartproces wordt geactiveerd, na het opstartblok, overheersen de instellingen in de opstartlader de instellingen in het opstartblok.

27.6.6.1. De seriële console instellen

Het is mogelijk om de opstartlader en de kernel gebruik te laten maken van de seriële console door slechts één regel naar /boot/loader.conf te schrijven:

console="comconsole"

Dit heeft effect ongeacht de instellingen in het opstartblok die in de vorige sectie zijn besproken.

Het is verstandig om bovenstaande regel de eerste regel van /boot/loader.conf te maken om de opstartboodschappen zo vroeg mogelijk op de seriële console te kunnen zien.

Evenzo kan de interne videoconsole worden gespecificeerd met:

console="vidconsole"

Indien de omgevingsvariabele console van de opstartlader niet ingesteld wordt, gebruikt de opstartlader, en vervolgens de kernel, de console die door de optie -h in het opstartblok wordt aangegeven.

De console kan worden gespecificeerd in /boot/looader.conf.local of in /boot/loader.conf.

Zie loader.conf(5) voor meer informatie.

Opmerking: Momenteel heeft de opstartlader een optie die gelijk is aan de optie -P van het opstartblok en is er geen voorziening om automatisch de interne console en de seriële console te selecteren afhankelijk van de aanwezigheid van een toetsenbord.

27.6.6.2. Een andere seriële poort dan sio voor de console gebruiken

Compileer de opstartlader opnieuw om een andere seriële poort dan sio voor de seriële console te gebruiken. Volg de procedure zoals beschreven in Paragraaf 27.6.5.2.

27.6.7. Valkuilen

De doelstelling van dit stuk is beheerders in staat te stellen om toegewijde servers te installeren die geen grafische hardware of aangesloten toetsenborden nodig hebben. Hoewel de meeste systemen zonder toetsenbord opstarten, zijn er helaas aardig wat die niet zonder een grafische adapter opstarten. Machines met een AMI BIOS kunnen ingesteld worden om zonder grafische adapter op te starten door de instelling “graphics adapter” in de CMOS-instellingen te wijzigen in “Not installed”.

De meeste systemen ondersteunen deze optie echter niet en weigeren om zonder weergavehardware op te starten. Voor deze machines is het nodig om een of andere grafische kaart in een systeem te laten (zelfs al is het een aftandse monochrome kaart) hoewel het niet nodig is om een beeldscherm aan te sluiten. Ook kan geprobeerd worden om een AMI BIOS te installeren.