Trail Sheevaplug OpenBSD
From Tmplab
(port freebsd) |
(related thread on openbsd-misc) |
||
| (6 intermediate revisions not shown.) | |||
| Line 74: | Line 74: | ||
</pre> | </pre> | ||
| - | Pour utiliser omconsole, vous devez désactiver le driver uftdi. Vous pouvez faire ca au démarrage en utilisant boot(8) et UKC, ou de façon permanente en utilisant config(8). | + | Pour utiliser omconsole, vous devez désactiver le driver uftdi. Vous pouvez faire ca au démarrage en utilisant boot(8) et UKC, ou de façon permanente en utilisant config(8). Pour se connecter au sheevaplug : |
| + | |||
| + | <pre> | ||
| + | omconsole -v 0x9e88 -p 0x9e8f | ||
| + | </pre> | ||
== configuration d'OpenOCD == | == configuration d'OpenOCD == | ||
| Line 114: | Line 118: | ||
Maintenant branchez le sheevaplug, et lancez OpenOCD depuis le repertoire contenant les binaires juste produits. Connectez vous sur la console telnet et chargez l'image elf avec les commandes suivantes : | Maintenant branchez le sheevaplug, et lancez OpenOCD depuis le repertoire contenant les binaires juste produits. Connectez vous sur la console telnet et chargez l'image elf avec les commandes suivantes : | ||
| - | reset | + | reset |
| + | attendre ~2 sec | ||
load_image bare.elf | load_image bare.elf | ||
resume 0x15000000 | resume 0x15000000 | ||
| Line 130: | Line 135: | ||
* [http://plugcomputer.org/index.php/us/resources/downloads?func=fileinfo&id=83 schemas du sheevaplug] | * [http://plugcomputer.org/index.php/us/resources/downloads?func=fileinfo&id=83 schemas du sheevaplug] | ||
* [http://infocenter.arm.com/help/topic/com.arm.doc.ddi0100i/index.html manuel de reference ARMv5] ATTENTION, enregistrement nécessaire. | * [http://infocenter.arm.com/help/topic/com.arm.doc.ddi0100i/index.html manuel de reference ARMv5] ATTENTION, enregistrement nécessaire. | ||
| + | * [http://www.openbsd.org/papers/ven05-niallo-uwe/slides.pdf Slide sur le portage OpenBSD/Zaurus] | ||
| + | == Flattened Device Tree == | ||
| + | Dans les sources de FreeBSD, voir : | ||
| + | * sys/dev/fdt | ||
| + | * sys/contrib/libfdt | ||
| - | * [http:// | + | Autres documents : |
| + | * [http://elinux.org/images/b/b6/ARM_Device_Tree_Status_Report.pdf présentation sur le fdt] | ||
| + | * [http://lists.ozlabs.org/pipermail/devicetree-discuss/2010-January/001549.html passage du fdt au kernel] | ||
| + | * [http://www.mail-archive.com/devicetree-discuss@lists.ozlabs.org/msg00884.html rfc pour le passage de fd au kernel] | ||
| + | * [http://wiki.freebsd.org/FlattenedDeviceTree wiki FreeBSD sur le fdt] | ||
| + | == OpenBSD Internals == | ||
| + | [http://www.atmnis.com/~proger/openkyiv/openkyiv2009_proger_sys.pdf|OpenBSD Kernel Internals - The Hitchhiker's Guide] | ||
| + | |||
| + | == Thread "OpenBSD on plugcomputers" on -misc == | ||
| + | http://marc.info/?l=openbsd-misc&m=129763115709406&w=2 | ||
== Port NetBSD == | == Port NetBSD == | ||
| Line 140: | Line 159: | ||
== Port FreeBSD == | == Port FreeBSD == | ||
http://www.bsdcan.org/2008/schedule/attachments/50_2008_marvell_freebsd.pdf | http://www.bsdcan.org/2008/schedule/attachments/50_2008_marvell_freebsd.pdf | ||
| + | |||
| + | http://wiki.freebsd.org/FreeBSDMarvell | ||
= Notes = | = Notes = | ||
* Le Mbus des processeurs kirkwood est a la racine de l'arborescence des périphériques et doit être configuré en premier. Une fois qu'il est configuré, on a directement accès aux GPIO. | * Le Mbus des processeurs kirkwood est a la racine de l'arborescence des périphériques et doit être configuré en premier. Une fois qu'il est configuré, on a directement accès aux GPIO. | ||
Current revision
Objectif
- Faire démarrer un kernel ramdisk OpenBSD sur un Sheevaplug, et afficher le dmesg sur le port série.
- Se familiariser avec
- l'architecture physique des ordinateurs
- l'architecture propriétaire ARM
- le debugging JTAG
- la chaine de compilation et le systeme OpenBSD
Modus operandi
Le Code Trail proprement dit commencera le vendredi 1 oct. au soir et se terminera le dimanche 3 oct dans l'apres-midi. Chaque personne qui a des tutos et des docs intéressantes est fortement invitée à les publier ou les référencer sur cette page. n'hésitez pas à utiliser la mailing-list pour poser des questions.
Gestion du code
Il y aura un dépot git à disposition pour la publication des modifications. Le code de base utilisé sera celui d'OpenBSD 4.7.
Couchage
Le /tmp/lab dispose de 3 canapés confortables, ainsi que d'une chambre dotée de 3 places. Réservez !
Repas
Si le temps s'y prete, pourquoi ne pas faire un barbecue samedi ou dimanche ?
Participants + matériel
- dermiste (2 sheevaplug)
- James (1 guruplug) - Réserve une place pour dormir au /tmp/lab
- nizox
- Colin (1 sheevaplug esata)
- kiwi - Réserve une place pour dormir
Docs
Cross-compilation sur OpenBSD
Il faut d'abord récupérer l'arborescence des sources tel qu'indiqué dans la FAQ 5.3.3, et upgrader le système au snapshot le plus récent (FAQ 5.1 et FAQ 5.3.2).
Il faut ensuite construire la chaine de compilation. Il existe pour cela une infrastructure complète, bien que non documentée. Voici par exemple la procedure a suivre pour une chaine ciblant les machines mvme88k :
# cd /usr/src # TARGET=mvme88k make -f Makefile.cross cross-tools
Vous pouvez aller vous prendre un ou plusieurs café en attendant la fin de la compilation. Votre chaine se retrouvera dans /usr/cross/$TARGET.
Cross-compiler un noyau se fait alors de la meme maniere qu'une compilation standard, à une différence près : il faut rajouter /usr/cross/${TARGET}/usr/${TARGET_ARCH}-unknown-openbsd/bin en tête du PATH. Ce répertoire contient les liens symboliques vers les versions cross- des outils de compilation classiques.
Stub de cross-compilation pour sheevaplug
OpenBSD dispose deja de ports sur ARM. Les headers du port armish semblent convenir pour générer des executables pour le sheevaplug.
# cp -R /usr/src/sys/arch/armish /usr/src/sys/arch/sheeva
Il faut ensuite éditer le fichier /usr/src/Makefile.cross et rajouter ${TARGET} == "sheeva" dans le test qui énumère les différentes cibles basées sur ARM.
Dans un premier temps, il est possible de juste générer la chaine de cross-compilation armish et de l'utiliser telle quelle pour générer des binaires pour sheevaplug.
ATTENTION, IL SEMBLE Y AVOIR QUELQUES PROBLEMES AVEC -current, UTILISEZ -release OU -stable
omconsole
omconsole est un petit utilitaire écrit par matthieu@ qui permet d'accéder au port série du neo freerunner via la libftdi. Le sheevaplug a le meme circuit que le neo freerunner, il suffit donc de rajouter les options kivonbien (c). Pour ce faire, récupérez le patch Image:Omconsole.tgz, décompressez l'archive, et installez omconsole comme indiqué :
cd /usr/ports/misc/omconsole make patch cd `make show=WRKSRC` patch -Np1 -i ~/omconsole.diff cd - make install
Pour utiliser omconsole, vous devez désactiver le driver uftdi. Vous pouvez faire ca au démarrage en utilisant boot(8) et UKC, ou de façon permanente en utilisant config(8). Pour se connecter au sheevaplug :
omconsole -v 0x9e88 -p 0x9e8f
configuration d'OpenOCD
source [find board/sheevaplug.cfg] gdb_port 4453 tcl_port 4456 telnet_port 4454 arm7_9 fast_memory_access enable
patches pour libusb
L'acces au port serie et au port JTAG du sheevaplug se fait via la libftdi, qui utilise la libusb. Pour utiliser simultanément ces deux ports, il faut d'abord récupérer l'arborescence des ports tel qu'indiqué dans la FAQ, récupérer le patch Image:Libusb.tgz et le décompresser, puis contruire la libusb de la facon suivante :
cd /usr/ports/devel/libusb make patch cd `make show=WRKSRC` patch -Np1 -i ~/libusb.diff cd - make install
test de la chaine
Installez, à l'aide des documents ci dessus, la chaine de cross-compilation pour sheevaplug, la libusb patchée, omconsole patché, et openocd.
Récupérez Image:Test chaine sheeva.tgz et décompressez l'archive. Elle devrait contenir les fichiers suivants :
- init.S
- main.c
- ldscript
- Makefile
Cette commande devrait compiler l'ensemble :
PATH=/usr/cross/armish/usr/arm-unknown-openbsd`uname -r`/bin:$PATH make
Maintenant branchez le sheevaplug, et lancez OpenOCD depuis le repertoire contenant les binaires juste produits. Connectez vous sur la console telnet et chargez l'image elf avec les commandes suivantes :
reset
attendre ~2 sec
load_image bare.elf resume 0x15000000
Normalement, la LED bleue du sheevaplug devrait clignoter.
Vous pouvez changer la valeur de delay. Pour cela récupérez l'adresse mémoire de delay avec readelf -s, et utilisez la console telnet d'OpenOCD pour changer sa valeur.
mww <adresse de delay en hexadécimal> <nouvelle valeur de delay en hexadecimal>
Datasheets
Dans la mesure du possible, épluchez un peu ces docs avant le trail.
- hardware 88f6281
- programmation du 88f6281
- reference design du sheevaplug
- schemas du sheevaplug
- manuel de reference ARMv5 ATTENTION, enregistrement nécessaire.
- Slide sur le portage OpenBSD/Zaurus
Flattened Device Tree
Dans les sources de FreeBSD, voir :
- sys/dev/fdt
- sys/contrib/libfdt
Autres documents :
- présentation sur le fdt
- passage du fdt au kernel
- rfc pour le passage de fd au kernel
- wiki FreeBSD sur le fdt
OpenBSD Internals
Kernel Internals - The Hitchhiker's Guide
Thread "OpenBSD on plugcomputers" on -misc
http://marc.info/?l=openbsd-misc&m=129763115709406&w=2
Port NetBSD
http://mail-index.netbsd.org/port-arm/2010/09/25/msg001028.html
Port FreeBSD
http://www.bsdcan.org/2008/schedule/attachments/50_2008_marvell_freebsd.pdf
http://wiki.freebsd.org/FreeBSDMarvell
Notes
- Le Mbus des processeurs kirkwood est a la racine de l'arborescence des périphériques et doit être configuré en premier. Une fois qu'il est configuré, on a directement accès aux GPIO.

