input: Add generic keyboard input handler
[oweals/u-boot.git] / board / lwmon / README.keybd
1
2 Tastaturabfrage:
3
4 Die Implementierung / Decodierung beruht auf den Angaben aus dem  Do-
5 kument  "PIC LWE-Tastatur" in der Fassung vom 9. 3. 2001, insbesonde-
6 re Tabelle 3 im Kapitel 4.3 Tastencodes. In  U-Boot  werden  die  vom
7 Keyboard-Controller  gelesenen Daten hexadezimal codiert in der auto-
8 matisch angelegten Environment-Variablen "keybd" übergeben. Ist  kei-
9 ne Taste gedrückt worden, steht dort:
10
11         keybd=000000000000000000
12
13 Der decodierte Tastencode ("keybd") kann mit den  "bootargs"  an  den
14 Linux-Kernel  übergeben  und  dort z. B. in einem Device-Treiber oder
15 einer Applikation ausgewertet werden.
16
17
18 Sonderfunktionen beim Booten:
19
20 Es lassen sich eine oder mehrere (beliebig viele) Tasten oder Tasten-
21 kombinationen definieren, die Sonderfunktionen auslösen,  wenn  diese
22 Tasten beim Booten (Reset) gedrückt sind.
23
24 Wird eine eingestellte Taste bzw. Tastenkombination erkannt, so  wird
25 in  U-Boot noch vor dem Start des "Countdown" und somit vor jedem an-
26 deren Kommando der Inhalt einer dieser Taste  bzw.  Tastenkombination
27 zugeordneten Environment-Variablen ausführen.
28
29
30 Die Environment-Variable "magic_keys" wird als Liste von Zeichen ver-
31 standen, die als Suffix an den Namen "key_magic" angefügt werden  und
32 so  die  Namen  der  Environment-Variablen  definieren, mit denen die
33 Tasten (-kombinationen) festgelegt werden:
34
35 Ist "magic_keys" NICHT definiert, so wird nur die in der Environment-
36 Variablen "key_magic" codierte  Tasten  (-kombination)  geprüft,  und
37 ggf.  der  Inhalt der Environment-Variablen "key_cmd" ausgeführt (ge-
38 nauer: der Inhalt von "key_cmd" wird der Variablen "preboot" zugewie-
39 sen, die ausgeführt wird, unmittelbar bevor die interaktive Kommando-
40 interpretation beginnt).
41
42 Enthält "magic_keys" z. B.  die  Zeichenkette  "0123CB*",  so  werden
43 nacheinander folgende Aktionen ausgeführt:
44
45         prüfe Tastencode       ggf. führe aus Kommando
46         in Variable             in Variable
47         -----------------------------------
48         key_magic0      ==>     key_cmd0
49         key_magic1      ==>     key_cmd1
50         key_magic2      ==>     key_cmd2
51         key_magic3      ==>     key_cmd3
52         key_magicC      ==>     key_cmdC
53         key_magicB      ==>     key_cmdB
54         key_magicA      ==>     key_cmdA
55         key_magic*      ==>     key_cmd*
56
57 Hinweis: sobald ein aktivierter Tastencode erkannt  wurde,  wird  die
58 Bearbeitung  abgebrochen; es wird daher höchstens eines der definier-
59 ten Kommandos ausgeführt, wobei die Priorität durch  die  Suchreihen-
60 folge  festgelegt wird, also durch die Reihenfolge der Zeichen in der
61 Varuiablen "magic_keys".
62
63
64 Die Codierung der Tasten, die beim Booten gedrückt werden müssen, um
65 eine Funktion auszulösen, erfolgt nach der Tastaturtabelle.
66
67 Die Definitionen
68
69         => setenv key_magic0 3a+3b
70         => setenv key_cmd0 setenv bootdelay 30
71
72 bedeuten dementsprechend, daß die Tasten mit den  Codes  0x3A  (Taste
73 "F1")  und 0x3B (Taste "F2") gleichzeitig gedrückt werden müssen. Sie
74 können dort eine beliebige  Tastenkombination  eintragen  (jeweils  2
75 Zeichen für die Hex-Codes der Tasten, und '+' als Trennzeichen).
76
77 Wird die eingestellte Tastenkombination erkannt, so  wird  in  U-Boot
78 noch  vor  dem Start des "Countdown" und somit vor jedem anderen Kom-
79 mando das angebene Kommando ausgeführt und  somit  ein  langes  Boot-
80 Delay eingetragen.
81
82 Praktisch könnten Sie also in U-Boot "bootdelay"  auf  0  setzen  und
83 somit  stets  ohne  jede  User-Interaktion automatisch booten, außer,
84 wenn die beiden Tasten "F1" und "F2"  beim  Booten  gedrückt  werden:
85 dann würde ein Boot-Delay von 30 Sekunden eingefügt.
86
87
88 Hinweis: dem Zeichen '#' kommt innerhalb von "magic_keys" eine beson-
89 dere Bedeutung zu: die dadurch definierte  Key-Sequenz  schaltet  den
90 Monitor in den "Debug-Modus" - das bedeutet zunächst, daß alle weite-
91 ren  Meldungen  von  U-Boot  über  das LCD-Display ausgegeben werden;
92 außerdem kann man durch das mit dieser  Tastenkombination  verknüpfte
93 Kommando  z. B. die Linux-Bootmeldungen ebenfalls auf das LCD-Display
94 legen, so daß der Boot-Vorgang direkt und  ohne  weitere  Hilfsmittel
95 analysiert werden kann.
96
97 Beispiel:
98
99 In U-Boot werden folgende Environment-Variablen gesetzt und abgespei-
100 chert:
101
102 (1)     => setenv magic_keys 01234#X
103 (2)     => setenv key_cmd# setenv addfb setenv bootargs \\${bootargs} console=tty0 console=ttyS1,\\${baudrate}
104 (3)     => setenv nfsargs setenv bootargs root=/dev/nfs rw nfsroot=\${serverip}:\${rootpath}
105 (4)     => setenv addip setenv bootargs \${bootargs} ip=\${ipaddr}:\${serverip}:\${gatewayip}:\${netmask}:\${hostname}::off panic=1
106 (5)     => setenv addfb setenv bootargs \${bootargs} console=ttyS1,\${baudrate}
107 (6)     => setenv bootcmd bootp\;run nfsargs\;run addip\;run addfb\;bootm
108
109 Hierbei wird die Linux Commandline (in der Variablen  "bootargs")  im
110 Boot-Kommando  "bootcmd"  (6)  schrittweise zusammengesetzt: zunächst
111 werden die für Root-Filesystem über NFS erforderlichen  Optionen  ge-
112 setzt  ("run  nfsargs", vgl. (3)), dann die Netzwerkkonfiguration an-
113 gefügt ("run addip", vgl. (4)),  und  schließlich  die  Systemconsole
114 definiert ("run addfb").
115
116 Dabei wird im Normalfall die Definition (5)  verwendt;  wurde  aller-
117 dings  beim  Reset die entsprechende Taste gedrückt gehalten, so wird
118 diese Definition bei der Ausführung des in (2) definierten  Kommandos
119 überschrieben,  so  daß  Linux die Bootmeldungen auch über das Frame-
120 buffer-Device (=LCD-Display) ausgibt.
121
122 Beachten Sie die Verdoppelung der '\'-Escapes in der  Definition  von
123 "key_cmd#" - diese ist erforderlich, weil der String _zweimal_ inter-
124 pretiert  wird:  das  erste  Mal  bei der Eingabe von "key_cmd#", das
125 zweite Mal, wenn der String (als  Inhalt  von  "preboot")  ausgeführt
126 wird.