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.