mirror of
https://github.com/brain-hackers/u-boot-brain
synced 2024-09-13 00:03:26 +09:00
127 lines
5.4 KiB
Plaintext
127 lines
5.4 KiB
Plaintext
![]() |
|
|||
|
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" <20>bergeben. Ist kei-
|
|||
|
ne Taste gedr<64>ckt worden, steht dort:
|
|||
|
|
|||
|
keybd=000000000000000000
|
|||
|
|
|||
|
Der decodierte Tastencode ("keybd") kann mit den "bootargs" an den
|
|||
|
Linux-Kernel <20>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<73>sen, wenn diese
|
|||
|
Tasten beim Booten (Reset) gedr<64>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<73>hren.
|
|||
|
|
|||
|
|
|||
|
Die Environment-Variable "magic_keys" wird als Liste von Zeichen ver-
|
|||
|
standen, die als Suffix an den Namen "key_magic" angef<65>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<70>ft, und
|
|||
|
ggf. der Inhalt der Environment-Variablen "key_cmd" ausgef<65>hrt (ge-
|
|||
|
nauer: der Inhalt von "key_cmd" wird der Variablen "preboot" zugewie-
|
|||
|
sen, die ausgef<65>hrt wird, unmittelbar bevor die interaktive Kommando-
|
|||
|
interpretation beginnt).
|
|||
|
|
|||
|
Enth<EFBFBD>lt "magic_keys" z. B. die Zeichenkette "0123CB*", so werden
|
|||
|
nacheinander folgende Aktionen ausgef<65>hrt:
|
|||
|
|
|||
|
pr<70>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<65>hrt, wobei die Priorit<69>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<64>ckt werden m<>ssen, um
|
|||
|
eine Funktion auszul<75>sen, erfolgt nach der Tastaturtabelle.
|
|||
|
|
|||
|
Die Definitionen
|
|||
|
|
|||
|
=> setenv key_magic0 3a+3b
|
|||
|
=> setenv key_cmd0 setenv bootdelay 30
|
|||
|
|
|||
|
bedeuten dementsprechend, da<64> die Tasten mit den Codes 0x3A (Taste
|
|||
|
"F1") und 0x3B (Taste "F2") gleichzeitig gedr<64>ckt werden m<>ssen. Sie
|
|||
|
k<EFBFBD>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<65>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<61>er,
|
|||
|
wenn die beiden Tasten "F1" und "F2" beim Booten gedr<64>ckt werden:
|
|||
|
dann w<>rde ein Boot-Delay von 30 Sekunden eingef<65>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<75>chst, da<64> alle weite-
|
|||
|
ren Meldungen von U-Boot <20>ber das LCD-Display ausgegeben werden;
|
|||
|
au<EFBFBD>erdem kann man durch das mit dieser Tastenkombination verkn<6B>pfte
|
|||
|
Kommando z. B. die Linux-Bootmeldungen ebenfalls auf das LCD-Display
|
|||
|
legen, so da<64> 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<75>chst
|
|||
|
werden die f<>r Root-Filesystem <20>ber NFS erforderlichen Optionen ge-
|
|||
|
setzt ("run nfsargs", vgl. (3)), dann die Netzwerkkonfiguration an-
|
|||
|
gef<EFBFBD>gt ("run addip", vgl. (4)), und schlie<69>lich die Systemconsole
|
|||
|
definiert ("run addfb").
|
|||
|
|
|||
|
Dabei wird im Normalfall die Definition (5) verwendt; wurde aller-
|
|||
|
dings beim Reset die entsprechende Taste gedr<64>ckt gehalten, so wird
|
|||
|
diese Definition bei der Ausf<73>hrung des in (2) definierten Kommandos
|
|||
|
<EFBFBD>berschrieben, so da<64> Linux die Bootmeldungen auch <20>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<65>hrt
|
|||
|
wird.
|