| 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. |