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.