Buildroot c'est bien !
La pandaboard n'est plus supportée par personne et ce n'est pas facile de trouver comment faire pour obtenir un système qui marche. En pratique, on a un setup fonctionnel avec
L'image avec tout cela est disponible sur notre site ici, et les instructions ci-dessous expliquent comment elle a été crée (et donc, comment la recréer). L'image est pour une carte SD de 8Go et doit tout d'abord être décompressée avec gunzip. TODO: Explications sur comment cross-compiler pour et utiliser ducati (les cortex M3) et tesla (le DSP). Et surtout mettre un dump de trucs qui marchent.
Buildroot c'est bien, mais ça ne boot pas sur la panda. Il faut donc utiliser l'image Ubuntu disponible à https://wiki.ubuntu.com/ARM/OMAP. Attention, bien évidemment, cette version d'Ubuntu n'est plus supportée (je vous l'avais dit), et il faut à priori éviter de faire un do-release-upgrade… La version à choisir est “Texas Instruments OMAP4 (Hard-Float) preinstalled server image” (vous pouvez prendre le desktop image si vous voulez X11). Il faut ensuite extraire le fichier .img, puis copier son contenu sur la carte SD avec dd.
Si la carte SD est montée en /dev/mmcblk0, il vous suffit donc d'exécuter les commandes suivantes :
$ wget http://cdimage.ubuntu.com/releases/12.04/release/ubuntu-12.04-preinstalled-server-armhf+omap4.img.gz $ gunzip ubuntu-12.04-preinstalled-server-armhf+omap4.img.gz $ dd if=ubuntu-12.04-preinstalled-server-armhf+omap4.img of=/dev/mmcblk0 bs=8M
Ensuite, mettez la carte SD dans la Panda, connectez-là par le port serial avec minicom (attention le serial est /dev/ttyO2), n'oubliez pas de la brancher en ethernet, et enfin branchez-là.
Suivez les étapes d'installation d'Ubuntu à travers minicom. Attention, les sélections dans les menus d'installation ne sont pas facile. Je m'en suis sorti un peu au hasard en utilisant le fait que taper la première lettre d'une option cycle entre les différentes options qui commencent par cette lettre. Installez au moins le “serveur Ubuntu de base” et le “serveur SSH”. Une fois l'installation terminée, connectez-vous en SSH, parceque c'est 1000 fois plus agréable que par minicom.
Une fois connecté, la première chose à faire c'est de mettre le kernel custom TI à la place de celui d'Ubuntu. Pour ce faire, suivre les instructions de https://groups.google.com/forum/#!topic/pandaboard/vKunvhMNV8k, puis de http://askubuntu.com/questions/201981/pandaboard-crash-on-startup-or-freeze-after-minutes AVANT de faire le reboot pour éviter un crash. En pratique, il faut commencer par faire un apt-get update (pour des raisons de certificats SSL), et installer apt-add-repository (si vous avez des problèmes essayez de redémarrer la board juste avant le apt-add-repository) :
$ sudo su # apt-get update # apt-get upgrade # apt-get install apt-add-repository # apt-add-repository ppa:tiomap-dev/release # apt-get update # apt-get dist-upgrade # apt-get install ubuntu-omap4-extras # reboot # /usr/bin/alsaucm -c Panda set _verb HiFi # /usr/sbin/flash-kernel --update-bootloader # apt-get install --reinstall pvr-omap4-dkms # vim /etc/init.d/ondemand Commenter la ligne "echo -n ondemand > $CPUFREQ" # reboot
Ensuite on installe le bluetooth en suivant http://elinux.org/PandaBoard/Ubuntu_Tips, c'est-à-dire qu'on fait
$ sudo apt-get install git bluez bluez-utils --no-install-recommends $ git clone git://gitorious.org/uim/uim.git $ cd uim $ make $ sudo mv uim /usr/bin $ sudo modprobe btwilink $ sudo uim &
Il faut répéter les deux dernières étapes (modprobe btwilink && uim &
) à chaque fois qu'on veut activer le bluetooth.
Enfin, pensez à installer et configurer le wifi par la méthode de votre choix (par exemple, wicd-curses).
Ducati est le nom correspondant aux 2 cortex M3 disponibles sur la panda, et Tesla est le nom du DSP. Le fichier /lib/firmware/ducati-m3-core0.xem3
est uploadé sur les 2 processeurs de Ducati au démarrage, et /lib/firmware/tesla-dsp.xe64T
est uploadé sur Tesla.
Pour programmer sur les cœurs de Ducati on utilise https://github.com/n-aizu/freertos-multicore
Pour programmer sur Tesla, c'est plus compliqué. Il faut utiliser git://git.omapzoom.org/repo/sysbios-rpmsg.git
et suivre les instructions dans le README, télécharger les trucs sur TI, etc.
Je (elarnon) vais les installer sur les PCs de la cave.
Attention sysbios-rpmsg est conçu pour un système 32bits (sigh) donc il faut enlever les -m32
dans src/utils/Makefile
et src/utils/elfload/Makefile
si on est sur un système 64bits.
Il faut encore comprendre quels fichiers modifier pour changer l'exécutable…
La doc là-dessus est scarce, voir principalement les liens sur http://www.omappedia.org/wiki/Category:RPMsg (en particulier http://www.omappedia.org/wiki/RPMsg_Tesla).
The recommended power supply is rated at 5V (max) @ 4A. Power Supply: 5V Barrel Measurements: 2.1mm ID, 5.5mm OD - Tip Positive
^ L'extérieur du câble est à la masse, l'intérieur est à 5V.
En pratique j'ai eu du succès (ahem) avec l'USB-OTG sur un port USB 3.0 (E_NOBOOT sur de l'USB 2.0).
Pour la Panda, il y a un fichier de configuration pré-disponible :
git clone git://git.buildroot.net/buildroot make pandaboard_defconfig make
Lancer ensuite le script suivant (attention à la locale !) :
#!/bin/sh if [ ! "$1" = "/dev/sda" ] ; then DRIVE=$1 if [ -b "$DRIVE" ] ; then dd if=/dev/zero of=$DRIVE bs=1024 count=1024 SIZE=`fdisk -l $DRIVE | grep Disk | awk '{print $5}'` echo DISK SIZE - $SIZE bytes CYLINDERS=`echo $SIZE/255/63/512 | bc` echo CYLINDERS - $CYLINDERS { echo ,9,0x0C,* echo ,,,- } | sfdisk -D -H 255 -S 63 -C $CYLINDERS $DRIVE mkfs.vfat -F 32 -n "boot" ${DRIVE}1 mke2fs -j -L "rootfs" ${DRIVE}2 fi fi
(trouvé ici http://elinux.org/Panda_How_to_buildroot)
Pour tester que la SD est bien formatée, compiler et lancer :
#include <stdio.h> #include <sys/types.h> #include <unistd.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> int main( int argc, char **argv ) { if ( argc < 2 ) { printf("check /dev/sdX you must be root too \n"); return 1; } int fd = open( argv[1], O_RDONLY ); lseek( fd, 0 + 446 + 8, SEEK_SET ); int start; int num_mbr; read( fd, &start, 4 ); read( fd, &num_mbr, 4 ); int num_bpb = 0; lseek( fd, start * 512 + 0x13, SEEK_SET ); read( fd, &num_bpb, 2 ); if( num_bpb == 0 ) { lseek( fd, start * 512 + 0x20, SEEK_SET ); read( fd, &num_bpb, 4 ); } printf( "start: %d mbr: %d bpb: %d -> %s\n", start, num_mbr, num_bpb, num_mbr == num_bpb ? "PASS" : "FAIL!" ); return num_mbr == num_bpb; }
(même source)
Copier MLO, u-boot.bin, uImage et le fichier .dtb sur la première partition et faire un dd du fichier .ext2 sur la deuxième partition.
J'ai eu un bug avec la partition système en ext2, qui provoquait un Kernel panic, cf https://bugs.busybox.net/post_bug.cgi. Utiliser tune2fs pour passer en ext3 ou éditer la configuration pour utiliser un fs en ext3.