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