howtos:devboards

Boards de développement

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

  • WiFi
  • Bluetooth
  • Possibilité d'exécution de code sur les Cortex M3
  • Possibilité d'exécution de code sur le DSP C64
  • I2C

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).

From : http://omappedia.org/wiki/PandaBoard_FAQ#What_are_the_specs_of_the_Power_supply_I_should_use_with_a_PandaBoard.3F

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.

  • howtos/devboards.txt
  • Dernière modification : 2022/05/05 20:01
  • de hackens