wdenk | cc1c8a1 | 2002-11-02 22:58:18 +0000 | [diff] [blame] | 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- |
Albert ARIBAUD | 60fbc8d | 2011-08-04 18:45:45 +0200 | [diff] [blame] | 8 | matisch angelegten Environment-Variablen "keybd" übergeben. Ist kei- |
| 9 | ne Taste gedrückt worden, steht dort: |
wdenk | cc1c8a1 | 2002-11-02 22:58:18 +0000 | [diff] [blame] | 10 | |
| 11 | keybd=000000000000000000 |
| 12 | |
| 13 | Der decodierte Tastencode ("keybd") kann mit den "bootargs" an den |
Albert ARIBAUD | 60fbc8d | 2011-08-04 18:45:45 +0200 | [diff] [blame] | 14 | Linux-Kernel übergeben und dort z. B. in einem Device-Treiber oder |
wdenk | cc1c8a1 | 2002-11-02 22:58:18 +0000 | [diff] [blame] | 15 | einer Applikation ausgewertet werden. |
| 16 | |
| 17 | |
wdenk | cc1c8a1 | 2002-11-02 22:58:18 +0000 | [diff] [blame] | 18 | Sonderfunktionen beim Booten: |
| 19 | |
| 20 | Es lassen sich eine oder mehrere (beliebig viele) Tasten oder Tasten- |
Albert ARIBAUD | 60fbc8d | 2011-08-04 18:45:45 +0200 | [diff] [blame] | 21 | kombinationen definieren, die Sonderfunktionen auslösen, wenn diese |
| 22 | Tasten beim Booten (Reset) gedrückt sind. |
wdenk | cc1c8a1 | 2002-11-02 22:58:18 +0000 | [diff] [blame] | 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 |
Albert ARIBAUD | 60fbc8d | 2011-08-04 18:45:45 +0200 | [diff] [blame] | 27 | zugeordneten Environment-Variablen ausführen. |
wdenk | cc1c8a1 | 2002-11-02 22:58:18 +0000 | [diff] [blame] | 28 | |
| 29 | |
| 30 | Die Environment-Variable "magic_keys" wird als Liste von Zeichen ver- |
Albert ARIBAUD | 60fbc8d | 2011-08-04 18:45:45 +0200 | [diff] [blame] | 31 | standen, die als Suffix an den Namen "key_magic" angefügt werden und |
wdenk | cc1c8a1 | 2002-11-02 22:58:18 +0000 | [diff] [blame] | 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- |
Albert ARIBAUD | 60fbc8d | 2011-08-04 18:45:45 +0200 | [diff] [blame] | 36 | Variablen "key_magic" codierte Tasten (-kombination) geprüft, und |
| 37 | ggf. der Inhalt der Environment-Variablen "key_cmd" ausgeführt (ge- |
wdenk | cc1c8a1 | 2002-11-02 22:58:18 +0000 | [diff] [blame] | 38 | nauer: der Inhalt von "key_cmd" wird der Variablen "preboot" zugewie- |
Albert ARIBAUD | 60fbc8d | 2011-08-04 18:45:45 +0200 | [diff] [blame] | 39 | sen, die ausgeführt wird, unmittelbar bevor die interaktive Kommando- |
wdenk | cc1c8a1 | 2002-11-02 22:58:18 +0000 | [diff] [blame] | 40 | interpretation beginnt). |
| 41 | |
Albert ARIBAUD | 60fbc8d | 2011-08-04 18:45:45 +0200 | [diff] [blame] | 42 | Enthält "magic_keys" z. B. die Zeichenkette "0123CB*", so werden |
| 43 | nacheinander folgende Aktionen ausgeführt: |
wdenk | cc1c8a1 | 2002-11-02 22:58:18 +0000 | [diff] [blame] | 44 | |
Albert ARIBAUD | 60fbc8d | 2011-08-04 18:45:45 +0200 | [diff] [blame] | 45 | prüfe Tastencode ggf. führe aus Kommando |
wdenk | cc1c8a1 | 2002-11-02 22:58:18 +0000 | [diff] [blame] | 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 |
Albert ARIBAUD | 60fbc8d | 2011-08-04 18:45:45 +0200 | [diff] [blame] | 58 | Bearbeitung abgebrochen; es wird daher höchstens eines der definier- |
| 59 | ten Kommandos ausgeführt, wobei die Priorität durch die Suchreihen- |
wdenk | cc1c8a1 | 2002-11-02 22:58:18 +0000 | [diff] [blame] | 60 | folge festgelegt wird, also durch die Reihenfolge der Zeichen in der |
| 61 | Varuiablen "magic_keys". |
| 62 | |
| 63 | |
Albert ARIBAUD | 60fbc8d | 2011-08-04 18:45:45 +0200 | [diff] [blame] | 64 | Die Codierung der Tasten, die beim Booten gedrückt werden müssen, um |
| 65 | eine Funktion auszulösen, erfolgt nach der Tastaturtabelle. |
wdenk | cc1c8a1 | 2002-11-02 22:58:18 +0000 | [diff] [blame] | 66 | |
| 67 | Die Definitionen |
| 68 | |
| 69 | => setenv key_magic0 3a+3b |
| 70 | => setenv key_cmd0 setenv bootdelay 30 |
| 71 | |
Albert ARIBAUD | 60fbc8d | 2011-08-04 18:45:45 +0200 | [diff] [blame] | 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). |
wdenk | cc1c8a1 | 2002-11-02 22:58:18 +0000 | [diff] [blame] | 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- |
Albert ARIBAUD | 60fbc8d | 2011-08-04 18:45:45 +0200 | [diff] [blame] | 79 | mando das angebene Kommando ausgeführt und somit ein langes Boot- |
wdenk | cc1c8a1 | 2002-11-02 22:58:18 +0000 | [diff] [blame] | 80 | Delay eingetragen. |
| 81 | |
Albert ARIBAUD | 60fbc8d | 2011-08-04 18:45:45 +0200 | [diff] [blame] | 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. |
wdenk | cc1c8a1 | 2002-11-02 22:58:18 +0000 | [diff] [blame] | 86 | |
| 87 | |
| 88 | Hinweis: dem Zeichen '#' kommt innerhalb von "magic_keys" eine beson- |
| 89 | dere Bedeutung zu: die dadurch definierte Key-Sequenz schaltet den |
Albert ARIBAUD | 60fbc8d | 2011-08-04 18:45:45 +0200 | [diff] [blame] | 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 |
wdenk | cc1c8a1 | 2002-11-02 22:58:18 +0000 | [diff] [blame] | 93 | Kommando z. B. die Linux-Bootmeldungen ebenfalls auf das LCD-Display |
Albert ARIBAUD | 60fbc8d | 2011-08-04 18:45:45 +0200 | [diff] [blame] | 94 | legen, so daß der Boot-Vorgang direkt und ohne weitere Hilfsmittel |
wdenk | cc1c8a1 | 2002-11-02 22:58:18 +0000 | [diff] [blame] | 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 |
Wolfgang Denk | 86eb3b7 | 2005-11-20 21:40:11 +0100 | [diff] [blame] | 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} |
wdenk | cc1c8a1 | 2002-11-02 22:58:18 +0000 | [diff] [blame] | 107 | (6) => setenv bootcmd bootp\;run nfsargs\;run addip\;run addfb\;bootm |
| 108 | |
| 109 | Hierbei wird die Linux Commandline (in der Variablen "bootargs") im |
Albert ARIBAUD | 60fbc8d | 2011-08-04 18:45:45 +0200 | [diff] [blame] | 110 | Boot-Kommando "bootcmd" (6) schrittweise zusammengesetzt: zunächst |
| 111 | werden die für Root-Filesystem über NFS erforderlichen Optionen ge- |
wdenk | cc1c8a1 | 2002-11-02 22:58:18 +0000 | [diff] [blame] | 112 | setzt ("run nfsargs", vgl. (3)), dann die Netzwerkkonfiguration an- |
Albert ARIBAUD | 60fbc8d | 2011-08-04 18:45:45 +0200 | [diff] [blame] | 113 | gefügt ("run addip", vgl. (4)), und schließlich die Systemconsole |
wdenk | cc1c8a1 | 2002-11-02 22:58:18 +0000 | [diff] [blame] | 114 | definiert ("run addfb"). |
| 115 | |
| 116 | Dabei wird im Normalfall die Definition (5) verwendt; wurde aller- |
Albert ARIBAUD | 60fbc8d | 2011-08-04 18:45:45 +0200 | [diff] [blame] | 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- |
wdenk | cc1c8a1 | 2002-11-02 22:58:18 +0000 | [diff] [blame] | 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 |
Albert ARIBAUD | 60fbc8d | 2011-08-04 18:45:45 +0200 | [diff] [blame] | 125 | zweite Mal, wenn der String (als Inhalt von "preboot") ausgeführt |
wdenk | cc1c8a1 | 2002-11-02 22:58:18 +0000 | [diff] [blame] | 126 | wird. |