1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
|
---
titre: Déboguage EHCI sur le BeagleBone Black
...
Déboguage EHCI
==============
1. [Trouver un port USB sur la cible qui supporte le déboguage EHCI](#FindUSBportonthetargetthatsupportsEHCIdebug)
2. [Configuration initiale du BBB pour agir en tant que dongle de déboguage
EHCI](#InitialsetupofBBBtoactasEHCIdebugdongle)
3. [Patcher le module `g_dbgp` du BBB (optionnel, mais hautement recommandé)](#PatchBBBsgdbgpmoduleoptionalbuthighlyrecommended)
4. [Configurer libreboot pour le déboguage EHCI]((#ConfigurelibrebootwithEHCIdebug)
1. [Sélectionner `HCD Index` et `USB Debug port`](#SelectingHCDIndexandUSBDebugport)
5. [Comment obtenir les journaux de déboguage](#Howtogetthedebuglogs)
6. [Activer le déboguage EHCI sur le kernel cible (optionnel, recommandé)](#EnebleEHCIDebugonthetargetskerneloptionalrecommended)
7. [Réferences](#References)
*NOTE: cette documentation peut être périmé, et discute sur la configuration
du déboguage EHCI sur le système Debian de base que le BBB est parfois fournit
avec. Si vous voulez vous faciliter la taĉhe, utilisez juste le [tournevis
BBB](https://www.coreboot.org/BBB_screwdriver) qui est fournit pré-configuré.*
Si votre ordinateur ne démarre pas après avoir installé libreboot, il est très
utile d'obtenir ses journaux de debug, de la charge utile (grub) et/ou le
kernel (si ça arrive jusqu'à là). Tous diffusent leurs journaux de déboguage
sur le port série disponible (RS-232) par défaut. Cependant, la majorité des
ordinateurs portables d'aujourd'hui manquent d'un port RS-232.
L'autre option est de diffuser les journaux au port USB EHCI de déboguage.
Cette section explique étapes par étapes comment configurer le BBB comme
"Dongle de déboguage USB EHCI" et configure libreboot et le kernel linux pour
qu'ils diffusent les journaux dessus (TODO: grub).
Je ferais références à trois ordinateurs:
- *hôte* - c'est l'ordinateur que vous utilisez, qui a des outils,
compilateurs, Internet, etc
- *BBB* - Beaglebone Black (rév. B ou plus haut, j'utilise la révision C.)
- *cible* - l'ordinateur où on essaye d'installer libreboot
### Trouver le port USB sur la cible qui supporte le déboguage EHCI {#FindUSBportonthetargetthatsupportsEHCIdebug}
Pas tous les contrôleurs USB supportent le déboguage EHCI (voyez: [Port de
déboguage EHCI](http://www.coreboot.org/EHCI_Debug_Port#Hardware_capability) ).
Même, de plus, si un contrôleur USB supporte le déboguage EHCI, il est
disponible seulement *sur un port* qui peut ou ne peut pas être exposé à
l'extérieur.
- Vous avez besoin d'un système d'exploitation (GNU+Linux) en cours
d'exécution sur
votre cible pour cet étape (si vous avez flashé libreboot et ça ne démarre
pas, vous avez à flasher le bios d'usine).
- Vous avez besoin d'une clé USB mémoire (les données sur celle-ci ne seront
pas touchées).
- Le déboguage EHCI ne peut pas être fait depuis un concentrateur (*hub*) USB
externe, le BBB doit être connecté directement au port de déboguage du
contrôleur (donc, pas de concentrateurs).
- Téléchargez^[1](#___fn1)^
[ce](http://www.coreboot.org/pipermail/coreboot/attachments/20080909/ae11c291/attachment.sh)
script shell.
1. Branchez la clé USB sur le premier port USB disponible.
2. Exécutez le script, vous obtiendrez une sortie similaire au suivant:
3. The buses the support debug are Bus 3 (0000:00:1a.0) on Port 1 and
Bus 4 (0000:00:1d.0) on port 2. Your usb stick is plugged on Bus 1,
Port 3
(fr: Les bus supportant le déboguage sont le Bus 3 (0000:00:1a.0) sur le
Port 1, et Bus 4 (0000:00:1d.0) sur le port 2. Votre clé USB est branchée
sur le Bus 1, Port 3.
4. Répétez les étapes, en branchant la clé sur le port USB disponible
suivant.
5. Faites ça pour tout les ports disponibles et souvenez-vous (mettez sur
papier) de ceux dont le bus/port de la clé USB correspondent aux bus/port qui
support le déboguage (en gras).
Souvenez-vous (mettez sur papier) pour chaque port (branchement externe) que
vous avez trouvez qui supporte le déboguage:
*ID du périphérique PCI, id du bus, le numéro du port, et l'emplacement
physique du branchement USB*
Si vous n'avez pas trouvé de correspondant, vous ne pouvez pas déboguer à
travers EHCI. Désolé.
^1^ Les mecs de coreboot parlaient d'inclure le script dans la distribution de
coreboot (vérifiez le status de la discussion).
### Configuration initiale du BBB pour agir en tant que dongle de déboguage EHCI{#InitialsetupofBBBtoactasEHCIdebugdongle}
BBB doit être alimenté avec un [connecteur d'alimentation
coaxial](https://en.wikipedia.org/wiki/Coaxial_power_connector) puisque le
port USB mini-B sera utilisé pour la réception de la diffusion du déboguage
EHCI. Vous aurez donc besoin:
- d'une alimentation (5V, 2A(10W) est suffisant).
- un câble usb en plus: A à mini-B
(Sur le BBB) le kernel linux inclut le module g\_dbgp qui permet à un des
ports USB de l'ordinateur d'agir comme un dongle de déboguage EHCI.
Assurez-vous que vous avez ce module disponible sur votre BBB (Debian version
7.8 fournit avec le BBB devrait l'avoir), si non, vous devriez le compiler
vous-même (voir section suivante):
ls /lib/modules/3.8.13-bone70/kernel/drivers/usb/gadget/g_dbgp.ko
Déchargez tout les autres modules g\_\*
# lsmod
# rmmod g_multi
...
Puis chargez g`dbgp:
# modprobe g_dbgp
# lsmod # should show that g_dbgp is loaded, and no other g_*
Branchez le côté mini-B du câble USB dans votre BBB et le côté A dans votre
cible. Ensuite, un des périphériques USB sur votre cible (avec `lsusb`)
devrait être:
Bus 001 Device 024: ID 0525:c0de Netchip Technology, Inc.
Si vous voyez le périphérique sur la cible, vous êtes bon pour passer à l'étape
suivante.
### Patcher le module g\_dbgp du BBB (optionnel, mais hautement recommandé){#PatchBBBsgdbgpmoduleoptionalbuthighlyrecommended}
Sur les raisons de pourquoi vous avez besoin de ça, voyez: [Déboguage Gadget
EHCI](http://www.coreboot.org/EHCI_Gadget_Debug).\
Soyez sur que vous avez un environnement de compilation croisée configurée sur
votre hôte pour
l'architecture arm-linux-gnueabihf.
- Sur le BBB: `uname -r` vous donnera le numéro de la version, tel que
3.8.13-bone70 (je ferais référence à celà comme tel: \$mav.\$miv-\$lv: où
mav=3.8, miv=13, lv=bone70).
- Préparez le kernel BBB sur votre hôte pour la compilation croisée:
<!-- -->
$ cd $work_dir
$ git clone https://github.com/beagleboard/kernel.git
$ cd kernel
$ git checkout $mav (see above)
$ ./patch.sh
$ wget http://arago-project.org/git/projects/?p=am33x-cm3.git\;a=blob_plain\;f=bin/am335x-pm-firmware.bin\;hb=HEAD -O kernel/firmware/am335x-pm-firmware.bin
$ cp configs/beaglebone kernel/arch/arm/configs/beaglebone_defconfig
- Téléchargez la rustine (*patch*) depuis [coreboot.org](http://www.coreboot.org/images/8/88/Ehci-debug-gadget-patches.tar.gz)
- `tar -xf Ehci-debug-gadget-patches.tar.gz` (créera le répertoire:
usbdebug-gadget)
- Notez qu'il y a deux rustines (patch\_1 et patch\_2) pour chacune des
différentes versions du kernel (3.8 et 3.10). J'utiliserais le 3.8. (Si
vous utilisez le kernel 3.1, patch\_1 n'est pas nécessaire)
- `cd kernel` (vous devriez être dans \$rep\_de\_travail/kernel/kernel)
- Appliquez les rustines:
git apply ../usbdebug-gadget/v3.8-debug-gadget/0001-usb-dbgp-gadget-Fix-re-connecting-after-USB-disconne.patch
git apply ../usbdebug-gadget/v3.8-debug-gadget/0002-usb-serial-gadget-no-TTY-hangup-on-USB-disconnect-WI.patch
;
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- beaglebone_defconfig -j4@
- Vous devriez aussi appliquez les scripts *deblob* de linux-libre pour le
transformer le kernel en linux-libre (supprime tout les blobs du kernel
linux). [site web de fsfla](http://www.fsfla.org/ikiwiki/selibre/linux-libre/) -
jetez un coup d'oeil aux
[scripts](http://www.fsfla.org/svn/fsfla/software/linux-libre/scripts/).
- Obtenez la configuration actuelle du kernel de votre BBB depuis le fichier
`/boot/config-<version>`, puis copiez là sur votre hôte en tant que
\$rep\_de\_travail/kernel/kernel/.config .
- Mettez un numéro de version propre:
- Sur votre hôte, éditez le fichier de configuration du kernel que vous
venez juste de copier du BBB, trouvez la ligne
CONFIG\_LOCALVERSION="<qqch ou vide>" et changez là par
CONFIG\_LOCALVERSION="-\$lv", donc ça ressemblera à quelque chose comme:
CONFIG\_LOCALVERSION="-bone70"
- Aussi, assurez-vous que: CONFIG\_USB\_G\_DBGP=m (si non, exécutez `make
menuconfig` et définissez @Device Drivers-> USB Support -> USB
Gadget Support -> EHCI Debug Device Gadget=m
- Compilez le module:
$ make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- -j4 (is it possoble to build only the gadget modules)
$ mkdir ../tmp && make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- INSTALL_MOD_PATH=../tmp modules_install
- sur le BBB, sauvegardez
`/lib/modules/3.8.13-bone70/kernel/drivers/usb/gadget`
(p.ex en exécuant `mv /lib/modules/3.8.13-bone70/kernel/drivers/usb/gadget
\$HOME)
- copiez le dossier usb/gadget fraîchement compilé dans
`/lib/modules/3.8.13-bone70/kernel/drivers/usb`
- redémarrez le BBB
- Enlevez tout les modules g\_\* (`rmmod g\_<>`)
- `modprobe g\_dbgp` pour charger le module
### Configurer libreboot avec déboguage EHCI {#ConfigurelibrebootwithEHCIdebug}
Libreboot(coreboot) devrait être configuré avec le déboguage activé, et de
pousser les messages de déboguage vers le port de déboguage EHCI.\
Si vous avez téléchargé la distribution binaire, vous pouvez vérifier si elle
est proprement configurée de la manière suivante:
- Allez dans le répertoire racine `dist` de libreboot:
$ cd libreboot\_bin
- Situez l'image ROM destinée à votre cible (je l'appelerais: \$img\_path)
- Exécuter la commande suivante extraira la config dans un fichier nommé
./my\_config:
$ ./cbfstool/i686/cbfstool $img_path extract -n config -f ./my_config
- Soyez sûr que les paramètres suivants dans la config sont définis:
CONFIG_USBDEBUG=y (Generic Drivers -> USB 2.0 EHCI debug dongle support)
CONFIG_USBDEBUG_IN_ROMSTAGE=y (Generic Drivers -> Enable early (pre-RAM) usbdebug)
CONFIG_USBDEBUG_HCD_INDEX=<HCD Index of usb controller - see below> (Generic Drivers -> Index for EHCI controller to use with usbdebug)
CONFIG_USBDEBUG_DEFAULT_PORT=<USB Debug port - see below> (Generic Drivers -> Default USB port to use as Debug Port)
Les trois suivants sont derrières trois boutons radios dans le menu. Seulement
le premier ^[2](#___fn2)^ devrait être égal à 'y'
USBDEBUG_DONGLE_STD=y (Generic Drivers -> Type of dongle (Net20DC or compatible) -> Net20DC or compatible)
CONFIG_USBDEBUG_DONGLE_BEAGLEBONE=n (Generic Drivers -> Type of dongle (Net20DC or compatible) -> BeagleBone)
CONFIG_USBDEBUG_DONGLE_BEAGLEBONE_BLACK=n (Generic Drivers -> Type of dongle (Net20DC or compatible) -> BeagleBone Black)
^2^ Le module g\_dbpg sur le BBB (Rév. C) se rapporte lui-même en tant que
Net20DC, les autres options étant pour des BB(B) plus vieux - ver1. C'est
aussi testé, vérifié, et documenté [sur le blog de John Lewis](https://johnlewis.ie/coreboot-ehci-debug-gadget-demonstration/)
Ensuite:\
CONFIG_CONSOLE_USB=y (Console -> USB dongle console output)
Aussi, les options Debugging \---> Output verbose blahblahblah)
(*FIXME*: quelqu'un devrait vérifier celà)
CONFIG_DEBUG_CBFS=y (Output verbose CBFS debug messages )
CONFIG_HAVE_DEBUG_RAM_SETUP=y (??? What/where is this)
CONFIG_DEBUG_RAM_SETUP=y (Output verbose RAM init debug messages)
CONFIG_DEBUG_SMI=y (Output verbose SMI debug messages)
CONFIG_DEBUG_ACPI=y (Output verbose ACPI debug messages )
CONFIG_DEBUG_USBDEBUG=y (Output verbose USB 2.0 EHCI debug dongle messages)
Si certaines des options de configuration mentionnées ci-dessus ne sont pas
comme spécifiée de base, vous avez à configurer et compiler libreboot
vous-même.
#### Sélectionner l'Index HCD et le port de déboguage USB {#SelectingHCDIndexandUSBDebugport}
Ceci s'applique (et marche) seulement si le contrôleur USB qui supporte le
déboguage (trouvé dans la première section de ce guide) provient d'Intel.
Si l'ID du PCI du port que vous avez trouvé dans la première section est 0000:00:1a.0
ou 0000:00:1d.0 , vous êtes ok. Sinon vous devez réessayez sans garantie que
ça marchera.
Si le port exposé extérieurement est sur un bus avec un ID du PCI égal à 0000:00:1a.0
alors choisissez 2 pour l'option CONFIG\_USBDEBUG\_HCD\_INDEX dans le kernel
sinon 0.
Pour CONFIG\_USBDEBUG\_DEFAULT\_PORT choisissez le port qui correspond à l'ID
du PCI, trouvé aussi dans la première section de ce guide.
Notes:\
Le dessus est basé sur l'implémentation du code
coreboot/src/southbridge/intel/common/usb\_debug.c :
pci\_ehci\_dbg\_dev() .\
C'est suffisant car ça s'applique aux ThinkPads GM45/G45 supportés.
Coreboot supporte d'autres contrôleurs aussi, mais ils n'ont pas (pour
l'instant) d'importance pour libreboot.
- Sur le T500 (avec graphiques échangeables) les ports de déboguage pour les
deux contrôleurs Intel sont exposés.
- Sur le X200T les ports de déboguage pour les
deux contrôleurs Intel sont exposés.
### Comment obtenir les journaux de déboguage {#Howtogetthedebuglogs}
- Branchez le câble USB dans le port de déboguage de la cible (celui que
vous avez trouvé dans l'étape 1) et l'USB mini-B BBB (côté A) sur l'hôte.
- Soyez sûr qu'aucun autre modules des g\_\* à part le g\_dbpg est chargé.
- Sur le BBB:
$ stty -icrnl -inlcr -F /dev/ttyGS0
$ cat /dev/ttyGS0
- Allumez la cible avec Libreboot
- Vous devriez voir des journaux de déboguage s'afficher dans votre console
BBB
Notez que ce n'est pas permanent sur le BBB, si vous le redémarrez, vous avez
à `rmmod g\_\*` puis `modprobe g\_dbgp`
### Activer le déboguage EHCI sur le kernel cible (optionnel, recommandé {#EnebleEHCIDebugonthetargetskerneloptionalrecommended}
Vous devez savoir comment compiler le kernel pour votre cible.
1. Vérifiez si le déboguage précoce est déjà activé:
$ grep CONFIG\_EARLY\_PRINTK\_DBGP /boot/config-<version>
2. Si c'est activé, vous n'avez pas à compiler le kernel (sautez cette
étape). Sinon, préparez les sources du kernel pour votre distribution et
sélectionnez l'option (Kernel hacking -> Early printk via EHCI debug port).
Compilez et installez le nouveau kernel.
3. Éditez votre configuration GRUB (/etc/default/grub) et ajoutez le suivant aux paramètres du
kernel ^[20](#___fn20)[21](#___fn21)^: earlyprintk=dbgp,keep.
Aussi, essayez: earlyprintk=dbgp<N>,keep où N est l'ID du port de
déboguage si le premier ne marche pas.
### Réferences {#References}
^10^ [EHCI Debug Port](http://www.coreboot.org/EHCI_Debug_Port)
^11^ [coreboot EHCI debug gadget
demonstration](https://johnlewis.ie/coreboot-ehci-debug-gadget-demonstration/)
^12^ [EHCI Gadget Debug](http://www.coreboot.org/EHCI_Gadget_Debug)
^13^
[Ehci-debug-gadget-patches.tar.gz](http://www.coreboot.org/images/8/88/Ehci-debug-gadget-patches.tar.gz)
^14^ [Compiling the BeagleBone Black
Kernel](http://wiki.beyondlogic.org/index.php/BeagleBoneBlack_Building_Kernel)
^15^
http://dumb-looks-free.blogspot.ca/2014/06/beaglebone-black-bbb-compile-kernel.html
^16^
http://dumb-looks-free.blogspot.fr/2014/06/beaglebone-black-bbb-kernal-headers.html
^17^ [Building BBB Kernel](http://elinux.org/Building_BBB_Kernel)
^18^
http://komposter.com.ua/documents/USB-2.0-Debug-Port%28John-Keys%29.pdf
^19^ [Exploring USB at the Hardware/Software
Interface](http://cs.usfca.edu/~cruse/cs698s10/)
^20^ https://www.kernel.org/doc/Documentation/x86/earlyprintk.txt
^21^ https://wiki.ubuntu.com/Kernel/Debugging/USBearlyprintk
*TODO*:
1. GRUB n'envoie pas les messages au déboguage EHCI. Investiguer.
2. La section "Configurer Libreboot avec le déboguage EHCI" peut être
simplifiée/sautée si une configuration commune marchant pour toutes les cibles
concernées est sélectionnée par défaut.
3. Patcher et compiler le module g\_dbgp sur le BBB au lieu de faire de la
compilation croisée.
4. Trouver une simple façon d'envoyer les messages de débogage depuis
l'espace utilisateur.
Copyright © 2015 Alex David <opdecirkel@gmail.com>\
Permission est donnée de copier, distribuer et/ou modifier ce document
sous les termes de la Licence de documentation libre GNU version 1.3 ou
quelconque autre versions publiées plus tard par la Free Software Foundation
sans Sections Invariantes, Textes de Page de Garde, et Textes de Dernière de Couverture.
Une copie de cette license peut être trouvé dans [../fdl-1.3.md](fdl-1.3.md).
A copy of this license is found in [../fdl-1.3.md](../fdl-1.3.md)
|