123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126 |
- Tastaturabfrage:
- Die Implementierung / Decodierung beruht auf den Angaben aus dem Do-
- kument "PIC LWE-Tastatur" in der Fassung vom 9. 3. 2001, insbesonde-
- re Tabelle 3 im Kapitel 4.3 Tastencodes. In U-Boot werden die vom
- Keyboard-Controller gelesenen Daten hexadezimal codiert in der auto-
- matisch angelegten Environment-Variablen "keybd" übergeben. Ist kei-
- ne Taste gedrückt worden, steht dort:
- keybd=000000000000000000
- Der decodierte Tastencode ("keybd") kann mit den "bootargs" an den
- Linux-Kernel übergeben und dort z. B. in einem Device-Treiber oder
- einer Applikation ausgewertet werden.
- Sonderfunktionen beim Booten:
- Es lassen sich eine oder mehrere (beliebig viele) Tasten oder Tasten-
- kombinationen definieren, die Sonderfunktionen auslösen, wenn diese
- Tasten beim Booten (Reset) gedrückt sind.
- Wird eine eingestellte Taste bzw. Tastenkombination erkannt, so wird
- in U-Boot noch vor dem Start des "Countdown" und somit vor jedem an-
- deren Kommando der Inhalt einer dieser Taste bzw. Tastenkombination
- zugeordneten Environment-Variablen ausführen.
- Die Environment-Variable "magic_keys" wird als Liste von Zeichen ver-
- standen, die als Suffix an den Namen "key_magic" angefügt werden und
- so die Namen der Environment-Variablen definieren, mit denen die
- Tasten (-kombinationen) festgelegt werden:
- Ist "magic_keys" NICHT definiert, so wird nur die in der Environment-
- Variablen "key_magic" codierte Tasten (-kombination) geprüft, und
- ggf. der Inhalt der Environment-Variablen "key_cmd" ausgeführt (ge-
- nauer: der Inhalt von "key_cmd" wird der Variablen "preboot" zugewie-
- sen, die ausgeführt wird, unmittelbar bevor die interaktive Kommando-
- interpretation beginnt).
- Enthält "magic_keys" z. B. die Zeichenkette "0123CB*", so werden
- nacheinander folgende Aktionen ausgeführt:
- prüfe Tastencode ggf. führe aus Kommando
- in Variable in Variable
- -----------------------------------
- key_magic0 ==> key_cmd0
- key_magic1 ==> key_cmd1
- key_magic2 ==> key_cmd2
- key_magic3 ==> key_cmd3
- key_magicC ==> key_cmdC
- key_magicB ==> key_cmdB
- key_magicA ==> key_cmdA
- key_magic* ==> key_cmd*
- Hinweis: sobald ein aktivierter Tastencode erkannt wurde, wird die
- Bearbeitung abgebrochen; es wird daher höchstens eines der definier-
- ten Kommandos ausgeführt, wobei die Priorität durch die Suchreihen-
- folge festgelegt wird, also durch die Reihenfolge der Zeichen in der
- Varuiablen "magic_keys".
- Die Codierung der Tasten, die beim Booten gedrückt werden müssen, um
- eine Funktion auszulösen, erfolgt nach der Tastaturtabelle.
- Die Definitionen
- => setenv key_magic0 3a+3b
- => setenv key_cmd0 setenv bootdelay 30
- bedeuten dementsprechend, daß die Tasten mit den Codes 0x3A (Taste
- "F1") und 0x3B (Taste "F2") gleichzeitig gedrückt werden müssen. Sie
- können dort eine beliebige Tastenkombination eintragen (jeweils 2
- Zeichen für die Hex-Codes der Tasten, und '+' als Trennzeichen).
- Wird die eingestellte Tastenkombination erkannt, so wird in U-Boot
- noch vor dem Start des "Countdown" und somit vor jedem anderen Kom-
- mando das angebene Kommando ausgeführt und somit ein langes Boot-
- Delay eingetragen.
- Praktisch könnten Sie also in U-Boot "bootdelay" auf 0 setzen und
- somit stets ohne jede User-Interaktion automatisch booten, außer,
- wenn die beiden Tasten "F1" und "F2" beim Booten gedrückt werden:
- dann würde ein Boot-Delay von 30 Sekunden eingefügt.
- Hinweis: dem Zeichen '#' kommt innerhalb von "magic_keys" eine beson-
- dere Bedeutung zu: die dadurch definierte Key-Sequenz schaltet den
- Monitor in den "Debug-Modus" - das bedeutet zunächst, daß alle weite-
- ren Meldungen von U-Boot über das LCD-Display ausgegeben werden;
- außerdem kann man durch das mit dieser Tastenkombination verknüpfte
- Kommando z. B. die Linux-Bootmeldungen ebenfalls auf das LCD-Display
- legen, so daß der Boot-Vorgang direkt und ohne weitere Hilfsmittel
- analysiert werden kann.
- Beispiel:
- In U-Boot werden folgende Environment-Variablen gesetzt und abgespei-
- chert:
- (1) => setenv magic_keys 01234#X
- (2) => setenv key_cmd# setenv addfb setenv bootargs \\${bootargs} console=tty0 console=ttyS1,\\${baudrate}
- (3) => setenv nfsargs setenv bootargs root=/dev/nfs rw nfsroot=\${serverip}:\${rootpath}
- (4) => setenv addip setenv bootargs \${bootargs} ip=\${ipaddr}:\${serverip}:\${gatewayip}:\${netmask}:\${hostname}::off panic=1
- (5) => setenv addfb setenv bootargs \${bootargs} console=ttyS1,\${baudrate}
- (6) => setenv bootcmd bootp\;run nfsargs\;run addip\;run addfb\;bootm
- Hierbei wird die Linux Commandline (in der Variablen "bootargs") im
- Boot-Kommando "bootcmd" (6) schrittweise zusammengesetzt: zunächst
- werden die für Root-Filesystem über NFS erforderlichen Optionen ge-
- setzt ("run nfsargs", vgl. (3)), dann die Netzwerkkonfiguration an-
- gefügt ("run addip", vgl. (4)), und schließlich die Systemconsole
- definiert ("run addfb").
- Dabei wird im Normalfall die Definition (5) verwendt; wurde aller-
- dings beim Reset die entsprechende Taste gedrückt gehalten, so wird
- diese Definition bei der Ausführung des in (2) definierten Kommandos
- überschrieben, so daß Linux die Bootmeldungen auch über das Frame-
- buffer-Device (=LCD-Display) ausgibt.
- Beachten Sie die Verdoppelung der '\'-Escapes in der Definition von
- "key_cmd#" - diese ist erforderlich, weil der String _zweimal_ inter-
- pretiert wird: das erste Mal bei der Eingabe von "key_cmd#", das
- zweite Mal, wenn der String (als Inhalt von "preboot") ausgeführt
- wird.
|