blob: 5e5144e56974aed3a7f442da8a897e2da691e48d [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-
Albert ARIBAUDfa82f872011-08-04 18:45:45 +02008matisch angelegten Environment-Variablen "keybd" übergeben. Ist kei-
9ne Taste gedrückt worden, steht dort:
wdenkcc1c8a12002-11-02 22:58:18 +000010
11 keybd=000000000000000000
12
13Der decodierte Tastencode ("keybd") kann mit den "bootargs" an den
Albert ARIBAUDfa82f872011-08-04 18:45:45 +020014Linux-Kernel übergeben und dort z. B. in einem Device-Treiber oder
wdenkcc1c8a12002-11-02 22:58:18 +000015einer 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-
Albert ARIBAUDfa82f872011-08-04 18:45:45 +020021kombinationen definieren, die Sonderfunktionen auslösen, wenn diese
22Tasten beim Booten (Reset) gedrückt sind.
wdenkcc1c8a12002-11-02 22:58:18 +000023
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
Albert ARIBAUDfa82f872011-08-04 18:45:45 +020027zugeordneten Environment-Variablen ausführen.
wdenkcc1c8a12002-11-02 22:58:18 +000028
29
30Die Environment-Variable "magic_keys" wird als Liste von Zeichen ver-
Albert ARIBAUDfa82f872011-08-04 18:45:45 +020031standen, die als Suffix an den Namen "key_magic" angefügt werden und
wdenkcc1c8a12002-11-02 22:58:18 +000032so 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-
Albert ARIBAUDfa82f872011-08-04 18:45:45 +020036Variablen "key_magic" codierte Tasten (-kombination) geprüft, und
37ggf. der Inhalt der Environment-Variablen "key_cmd" ausgeführt (ge-
wdenkcc1c8a12002-11-02 22:58:18 +000038nauer: der Inhalt von "key_cmd" wird der Variablen "preboot" zugewie-
Albert ARIBAUDfa82f872011-08-04 18:45:45 +020039sen, die ausgeführt wird, unmittelbar bevor die interaktive Kommando-
wdenkcc1c8a12002-11-02 22:58:18 +000040interpretation beginnt).
41
Albert ARIBAUDfa82f872011-08-04 18:45:45 +020042Enthält "magic_keys" z. B. die Zeichenkette "0123CB*", so werden
43nacheinander folgende Aktionen ausgeführt:
wdenkcc1c8a12002-11-02 22:58:18 +000044
Albert ARIBAUDfa82f872011-08-04 18:45:45 +020045 prüfe Tastencode ggf. führe aus Kommando
wdenkcc1c8a12002-11-02 22:58:18 +000046 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
Albert ARIBAUDfa82f872011-08-04 18:45:45 +020058Bearbeitung abgebrochen; es wird daher höchstens eines der definier-
59ten Kommandos ausgeführt, wobei die Priorität durch die Suchreihen-
wdenkcc1c8a12002-11-02 22:58:18 +000060folge festgelegt wird, also durch die Reihenfolge der Zeichen in der
61Varuiablen "magic_keys".
62
63
Albert ARIBAUDfa82f872011-08-04 18:45:45 +020064Die Codierung der Tasten, die beim Booten gedrückt werden müssen, um
65eine Funktion auszulösen, erfolgt nach der Tastaturtabelle.
wdenkcc1c8a12002-11-02 22:58:18 +000066
67Die Definitionen
68
69 => setenv key_magic0 3a+3b
70 => setenv key_cmd0 setenv bootdelay 30
71
Albert ARIBAUDfa82f872011-08-04 18:45:45 +020072bedeuten 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).
wdenkcc1c8a12002-11-02 22:58:18 +000076
77Wird die eingestellte Tastenkombination erkannt, so wird in U-Boot
78noch vor dem Start des "Countdown" und somit vor jedem anderen Kom-
Albert ARIBAUDfa82f872011-08-04 18:45:45 +020079mando das angebene Kommando ausgeführt und somit ein langes Boot-
wdenkcc1c8a12002-11-02 22:58:18 +000080Delay eingetragen.
81
Albert ARIBAUDfa82f872011-08-04 18:45:45 +020082Praktisch 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.
wdenkcc1c8a12002-11-02 22:58:18 +000086
87
88Hinweis: dem Zeichen '#' kommt innerhalb von "magic_keys" eine beson-
89dere Bedeutung zu: die dadurch definierte Key-Sequenz schaltet den
Albert ARIBAUDfa82f872011-08-04 18:45:45 +020090Monitor 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
wdenkcc1c8a12002-11-02 22:58:18 +000093Kommando z. B. die Linux-Bootmeldungen ebenfalls auf das LCD-Display
Albert ARIBAUDfa82f872011-08-04 18:45:45 +020094legen, so daß der Boot-Vorgang direkt und ohne weitere Hilfsmittel
wdenkcc1c8a12002-11-02 22:58:18 +000095analysiert 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 Denkfe126d82005-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
Albert ARIBAUDfa82f872011-08-04 18:45:45 +0200110Boot-Kommando "bootcmd" (6) schrittweise zusammengesetzt: zunächst
111werden die für Root-Filesystem über NFS erforderlichen Optionen ge-
wdenkcc1c8a12002-11-02 22:58:18 +0000112setzt ("run nfsargs", vgl. (3)), dann die Netzwerkkonfiguration an-
Albert ARIBAUDfa82f872011-08-04 18:45:45 +0200113gefügt ("run addip", vgl. (4)), und schließlich die Systemconsole
wdenkcc1c8a12002-11-02 22:58:18 +0000114definiert ("run addfb").
115
116Dabei wird im Normalfall die Definition (5) verwendt; wurde aller-
Albert ARIBAUDfa82f872011-08-04 18:45:45 +0200117dings 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-
wdenkcc1c8a12002-11-02 22:58:18 +0000120buffer-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
Albert ARIBAUDfa82f872011-08-04 18:45:45 +0200125zweite Mal, wenn der String (als Inhalt von "preboot") ausgeführt
wdenkcc1c8a12002-11-02 22:58:18 +0000126wird.