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