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