README.keybd 5.4 KB

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