Carte Acme Fox sous OpenWrt

De MicElectroLinGenMet.

(Retour Accueil ou Liste des articles)

Sommaire

Description

Conçue par la société Acme Systems. Elle est architecturée autour d’un processeur RISC 32 bits ETRAX 100LX MCM 8+16 du fabricant Axis. La platine "FOX" est un système embarqué tournant sous un Linux développé par la société Acme systems.


Voir page Carte Linux Acme Fox pour plus de détails sur la carte Fox, son Linux et son SDK fourni.

Depuis peu, une branche destinée à cette carte (processeur Etrax) est disponible sous OpenWrt.


Installer l'image OpenWrt

Inspiré de l'article: OpenWrt sur Acme Fox de Linux-Mag HS n°47

Télécharger l'image disponible sur OpenWrt

$ wget http://downloads.openwrt.org/snapshots/trunk/etrax/openwrt-etrax-jffs2-64k-fimage


Flasher l'image sur la carte

  • Carte hors tension.
  • Lancer boot_linux sur le PC .
    $ sudo ./bin/etrax/boot_linux -F -S 8 -i openwrt-etrax-jffs2-64k-fimage	=> "-S 8" correspond à la taille flash: 8Mo.
  • Positionner cavalier en J8 .
  • Mettre carte sous tension, et le boot-linux doit commencer le "flashage".
  • Apres quelques secondes, la LED rouge clignote.
  • Mettre la carte hors tension.
  • Enlever J8
  • Remettre la carte sous tension (Ou utiliser le reset).
  • Attendre plus deux minutes au moins après le reboot de fin de flash avant de ce connecter en telnet.


Premier boot sous OpenWrt

# telnet 192.168.1.1
Trying 192.168.1.1...
Connected to 192.168.1.1.
Escape character is '^]'.
 === IMPORTANT ============================
  Use 'passwd' to set your login password
  this will disable telnet and enable SSH
 ------------------------------------------


BusyBox v1.16.2 (2010-06-26 14:19:23 CDT) built-in shell (ash)
Enter 'help' for a list of built-in commands.

  _______                     ________        __
 |       |.-----.-----.-----.|  |  |  |.----.|  |_
 |   -   ||  _  |  -__|     ||  |  |  ||   _||   _|
 |_______||   __|_____|__|__||________||__|  |____|
          |__| W I R E L E S S   F R E E D O M
 KAMIKAZE (bleeding edge, r21959) ------------------				=> Revision: r21959 (06/2010)
  * 10 oz Vodka       Shake well with ice and strain
  * 10 oz Triple sec  mixture into 10 shot glasses.
  * 10 oz lime juice  Salute!
 ---------------------------------------------------



Compiler l'image à partir de KAMIKAZE (trunk)

Installation de kamikaze trunk

$ svn co svn://svn.openwrt.org/openwrt/trunk/
$ cd trunk
$ make defconfig						=> (Configuration par defaut, Voir Linux-Mag HS n°47: OpenWrt sur Acme Fox 


Ajouts de packages dans feed

  • Recherche de packages:
$ ./scripts/feeds update	# Met à jour list packages, Voir Linux-Mag HS n°47: OpenWrt sur Acme Fox.
$ ./scripts/feeds list		# Affiche la liste de package dispo. dans feeds.
$ ./scripts/feeds search owfs
Search results in feed 'packages':
libow                           OWFS - common shared library
libow-capi                      OWFS - C-API library
owfs                            OWFS - fuse file system
owftpd                          OWFS - ftp server
owhttpd                         OWFS - http server
owserver                        OWFS - network server
owshell                         OWFS - shell utilities


  • Installation de packages:
$ ./scripts/feeds install -d y owserver owshell owfs 		=> ('-d y' => compilé et intégré dans l'image, sélection '*' dan menuconfig)
$ ./scripts/feeds install -d m setserial 			=> ('-d m' => compilé et disponible dans repértoire: ./bin/etrax/packages/, sélection 'M' dan menuconfig)
$ ./scripts/feeds install -d y sqlite3-cli
$ ./scripts/feeds install -d y usbutils
$ ./scripts/feeds install -d m ser2net


  • Exemple d'ajout de package dans le fichier .config:
$ grep -i ser2net .config
CONFIG_PACKAGE_ser2net=m


Config. et compilation

Fichier .config: trunk/.config

$ make menuconfig

OpenWrt Kamikaze (r19223) Configuration => Rajout driver usb-serial ftdi / cp210x / pl2303 inclus dans image. Target System (Foxboard (ETRAX 100LX)) => Arch Etrax

$ make								=> Necessaire pour compilé les outils avant le " make kernel_menuconfig"


Fichier .config kernel: trunk/build_dir/linux-etrax/linux-2.6.32.14/.config

 $ make kernel_menuconfig					=> Rajout driver usb-serial ftdi / cp210x / pl2303 en modules
	Drivers for built-in interfaces -->
		I2C support
			I2C uses PB not PB-I2C 			=> http://geertvancompernolle.be/myjoomla/index.php?option=com_content&view=article&id=45:foxboard-and-openwrt&catid=6:foxboard&Itemid=18
				(PB0 = SDA, PB1 = SCL)
	Hardware setup  --->   
		Processor type (ETRAX-100LX-v2)  ---> 
		(16) DRAM size (dec, in MB)
		(0) FLASH1 size (dec, in MB. 0 = Unknown)
$ make
...


Aprés fin compilation:

$ l ./bin/etrax/
total 31M
-rwxr-xr-x 1 dan dan  15K 28 juin  20:25 boot_linux*
-rwxr-xr-x 1 dan dan 130K 28 juin  20:25 etrax100boot*
-rw-r--r-- 1 dan dan  379 28 juin  20:25 md5sums
-rw-r--r-- 1 dan dan 4,0M 28 juin  20:25 openwrt-etrax-jffs2-64k-fimage 			=> Image à flasher
-rw-r--r-- 1 dan dan 4,0M 28 juin  20:25 openwrt-etrax-squashfs-fimage
-rw-r--r-- 1 dan dan 820K 28 juin  20:25 openwrt-etrax-zImage
-rw-r--r-- 1 dan dan  22M 28 juin  20:25 OpenWrt-SDK-etrax-for-Linux-x86_64-gcc-4.3.3_uClibc-0.9.30.1.tar.bz2
drwxr-xr-x 2 dan dan 4,0K 28 juin  20:24 packages/
$ l ./bin/etrax/packages/
total 1008K
-rw-r--r-- 1 dan dan  29K 28 juin  19:34 base-files_49-r21969_etrax.ipk
-rw-r--r-- 1 dan dan 213K 28 juin  19:35 busybox_1.16.2-1_etrax.ipk
-rw-r--r-- 1 dan dan  83K 28 juin  19:36 dropbear_0.52-5_etrax.ipk
-rw-r--r-- 1 dan dan  13K 28 juin  19:36 hotplug2_1.0-beta-2_etrax.ipk
-rw-r--r-- 1 dan dan 193K 28 juin  19:34 libc_0.9.30.1-49_etrax.ipk
-rw-r--r-- 1 dan dan  24K 28 juin  19:34 libgcc_4.3.3-49_etrax.ipk
-rw-r--r-- 1 dan dan 180K 28 juin  20:24 libow_2.7p21-1_etrax.ipk
-rw-r--r-- 1 dan dan 7,5K 28 juin  20:24 libow-capi_2.7p21-1_etrax.ipk
-rw-r--r-- 1 dan dan  19K 28 juin  20:21 libpthread_0.9.30.1-49_etrax.ipk
-rw-r--r-- 1 dan dan 2,1K 28 juin  20:21 librt_0.9.30.1-49_etrax.ipk
-rw-r--r-- 1 dan dan  17K 28 juin  19:39 libuci_12012009.5-2_etrax.ipk
-rw-r--r-- 1 dan dan 8,3K 28 juin  19:36 mtd_13_etrax.ipk
-rw-r--r-- 1 dan dan  54K 28 juin  19:38 opkg_528-1_etrax.ipk
-rw-r--r-- 1 dan dan  26K 28 juin  20:24 owftpd_2.7p21-1_etrax.ipk		<=== packages rajoutés avec la commande $ ./scripts/feeds install -d y owserver owshell
-rw-r--r-- 1 dan dan  12K 28 juin  20:24 owhttpd_2.7p21-1_etrax.ipk
-rw-r--r-- 1 dan dan  13K 28 juin  20:24 owserver_2.7p21-1_etrax.ipk
-rw-r--r-- 1 dan dan  16K 28 juin  20:24 owshell_2.7p21-1_etrax.ipk
-rw-r--r-- 1 dan dan  13K 28 juin  20:25 Packages
-rw-r--r-- 1 dan dan 2,6K 28 juin  20:25 Packages.gz
-rw-r--r-- 1 dan dan 7,2K 28 juin  20:24 setserial_2.17-1_etrax.ipk		<=== package rajoutés avec la commande ./scripts/feeds install -d m setserial
-rw-r--r-- 1 dan dan 6,9K 28 juin  19:39 uci_12012009.5-2_etrax.ipk
-rw-r--r-- 1 dan dan 8,4K 28 juin  19:39 udevtrigger_106-1_etrax.ipk


Flash de l'image OpenWrt compilée

$ cd bin/etrax
$ sudo ./boot_linux -F -S 8 -i openwrt-etrax-jffs2-64k-fimage

Carte hors tension / Mettre J8 / Mettre carte sous tension / Le flashage boot-linux se lance / Après qq secondes, la LED rouge clignote / Enlever J8 / Bouton reset


Premier boot sous OpenWrt compilé

dan@vesta:~$ telnet fox
Trying 192.168.0.90...
Connected to fox.
Escape character is '^]'.
 === IMPORTANT ============================
  Use 'passwd' to set your login password					=> Passwd à initialser pour utiliser ssh.
  this will disable telnet and enable SSH
 ------------------------------------------


BusyBox v1.16.2 (2010-07-19 00:55:10 CEST) built-in shell (ash)
Enter 'help' for a list of built-in commands.

  _______                     ________        __
 |       |.-----.-----.-----.|  |  |  |.----.|  |_
 |   -   ||  _  |  -__|     ||  |  |  ||   _||   _|
 |_______||   __|_____|__|__||________||__|  |____|
          |__| W I R E L E S S   F R E E D O M
 KAMIKAZE (bleeding edge, r22286) ------------------				=> Revision: r22286 (trunk du 6/2010)
  * 10 oz Vodka       Shake well with ice and strain
  * 10 oz Triple sec  mixture into 10 shot glasses.
  * 10 oz lime juice  Salute!
 ---------------------------------------------------
root@OpenWrt:/# 
root@OpenWrt:/# uname -a
Linux OpenWrt 2.6.32.14 #11 Mon Jul 19 18:33:13 CEST 2010 cris GNU/Linux
root@OpenWrt:/# df -h
Filesystem                Size      Used Available Use% Mounted on
/dev/root                 7.1M      2.1M      5.0M  29% /
tmpfs                     6.9M     32.0K      6.8M   0% /tmp
tmpfs                   512.0K         0    512.0K   0% /dev
root@OpenWrt:/# mount
rootfs on / type rootfs (rw)
/dev/root on / type jffs2 (rw,relatime)
proc on /proc type proc (rw,relatime)
sysfs on /sys type sysfs (rw,relatime)
tmpfs on /tmp type tmpfs (rw,nosuid,nodev,relatime,size=7040k)
tmpfs on /dev type tmpfs (rw,relatime,size=512k)
devpts on /dev/pts type devpts (rw,relatime,mode=600)
debugfs on /sys/kernel/debug type debugfs (rw,relatime)
none on /proc/bus/usb type usbfs (rw,relatime)
OWFS on /tmp/owfs type fuse.OWFS (rw,nosuid,nodev,relatime,user_id=0,group_id=0,allow_other)
root@OpenWrt:/# free
              total         used         free       shared      buffers
  Mem:        14072         8808         5264            0            0
 Swap:            0            0            0
Total:        14072         8808         5264
root@OpenWrt:/# opkg list-installed
base-files - 50-r22286
busybox - 1.16.2-1
dropbear - 0.52-5
fdisk - 2.13.0.1-4
fuse-utils - 2.8.4-1
hotplug2 - 1.0-beta-2
i2c-tools - 3.0.2-1
kernel - 2.6.32.14-1
kmod-fs-ext2 - 2.6.32.14-1
kmod-fs-ext3 - 2.6.32.14-1
kmod-fs-mbcache - 2.6.32.14-1
kmod-fs-nfs - 2.6.32.14-1
kmod-fs-nfs-common - 2.6.32.14-1
kmod-fs-vfat - 2.6.32.14-1
kmod-fuse - 2.6.32.14-1
kmod-scsi-core - 2.6.32.14-1
kmod-usb-serial - 2.6.32.14-1
kmod-usb-serial-cp210x - 2.6.32.14-1
kmod-usb-serial-ftdi - 2.6.32.14-1
kmod-usb-serial-pl2303 - 2.6.32.14-1
kmod-usb-storage - 2.6.32.14-1
libc - 0.9.30.1-50
libfuse - 2.8.4-1
libgcc - 4.3.3-50
libow - 2.7p21-1
libow-capi - 2.7p21-1
libpthread - 0.9.30.1-50
librt - 0.9.30.1-50
libuci - 12012009.5-2
mtd - 13
opkg - 528-1
owfs - 2.7p21-1
owftpd - 2.7p21-1
owhttpd - 2.7p21-1
owserver - 2.7p21-1
owshell - 2.7p21-1
setserial - 2.17-1
uci - 12012009.5-2
udevtrigger - 106-1



Compiler ces programmes sous OpenWrt

Préparation de sources

Les programmes peuvent être compiler directement dans trunk (SDK pas nécessaire).
(Copie exemple "test" en trunk/package/test-perso)

$ find package/test-perso
package/test-perso
package/test-perso/Makefile
package/test-perso/src
package/test-perso/src/test-perso.c
package/test-perso/src/Makefile


Pour que le package/programme soit compilé, il doit être sélectionné dans menuconfig "Utilities" (car le Makefile contient "CATEGORY:=Utilities") ou faire:

$ echo 'CONFIG_PACKAGE_test-perso=y' >> .config


Lancer la compilation

dan@vesta:trunk$ make package/test-perso/compile
++ mkdir -p /usr/local/tampon/fox-sdk/openwrt/trunk/staging_dir/toolchain-cris_gcc-4.3.3_uClibc-0.9.30.1
++ cd /usr/local/tampon/fox-sdk/openwrt/trunk/staging_dir/toolchain-cris_gcc-4.3.3_uClibc-0.9.30.1
++ mkdir -p stamp lib usr/include usr/lib
make[4]: Entering directory `/usr/local/tampon/fox-sdk/openwrt/trunk/target/linux'
make[5]: Entering directory `/usr/local/tampon/fox-sdk/openwrt/trunk/target/linux/etrax'
make[6]: Entering directory `/usr/local/tampon/fox-sdk/openwrt/trunk/target/linux/etrax/image'
make[6]: Leaving directory `/usr/local/tampon/fox-sdk/openwrt/trunk/target/linux/etrax/image'
make[5]: Leaving directory `/usr/local/tampon/fox-sdk/openwrt/trunk/target/linux/etrax'
make[4]: Leaving directory `/usr/local/tampon/fox-sdk/openwrt/trunk/target/linux'
make[1] package/test-perso/compile
make[2] -C package/test-perso compile


Résultat de la compilation

dan@vesta:trunk$ find . -name "test-perso*"
./staging_dir/target-cris_uClibc-0.9.30.1/root-etrax/usr/bin/test-perso
./build_dir/linux-etrax/test-perso
./build_dir/linux-etrax/test-perso/test-perso.c
./build_dir/linux-etrax/test-perso/test-perso						=> Programme compilé
./build_dir/linux-etrax/test-perso/test-perso.o
./build_dir/linux-etrax/test-perso/ipkg-etrax/test-perso
./build_dir/linux-etrax/test-perso/ipkg-etrax/test-perso/usr/bin/test-perso
./package/test-perso
./package/test-perso/src/test-perso.c
./bin/etrax/packages/test-perso_1_etrax.ipk						=> Programme packagé
$ file ./build_dir/linux-etrax/test-perso/test-perso
./build_dir/linux-etrax/test-perso/test-perso: ELF 32-bit LSB executable, Axis cris, version 1 (SYSV), dynamically linked (uses shared libs), not stripped


Test du programme sur la Fox

  • Copie sur la Fox:
dan@vesta:trunk$ scp ./build_dir/linux-etrax/test-perso/test-perso root@fox:/tmp
root@fox's password: 
test-perso                                                                                                                    100% 6243     6.1KB/s   00:00    


  • Lancement du programme sur la Fox:
root@OpenWrt:/tmp# ./test-perso 
Hello world!


$ cd trunk
$ find package/xpl-owfs
package/xpl-owfs
package/xpl-owfs/Makefile
package/xpl-owfs/src
package/xpl-owfs/src/xpl-owfs.c
package/xpl-owfs/src/Makefile


Exemple menconfig avec programmes test-perso et xpl-owfs dans trunk/pakage:

OpenWrt Kamikaze (r22286) Configuration
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
 ------------------------------------------------------------------------------- Utilities -------------------------------------------------------------------------------   
 |  Arrow keys navigate the menu.  <Enter> selects submenus --->.  Highlighted letters are hotkeys.  Pressing <Y> includes, <N> excludes, <M> builds as package.  Press  |   
 |  <Esc><Esc> to exit, <?> for Help, </> for Search.  Legend: [*] built-in  [ ] excluded  <M> package  < > package capable                                              |   
 |                                                                                                                                                                       |   
 |                                                                                                                                                                       |   
 | -- (-)--------------------------------------------------------------------------------------------------------------------------------------------------------------- |   
 | | < > dropbearconvert.......................... Utility for converting SSH keys                                                                                     | |   
 | | < > ds1621-kerneli2c........................................ DS1621-kerneli2c                                                                                     | |   
 | | < > fconfig..................................... RedBoot configuration editor                                                                                     | |   
 | | < > flock............................... Manage file locks from shell scripts                                                                                     | |   
 | | < > hwclock........................ Utilities for managing the hardware clock                                                                                     | |   
 | | <*> i2c-tools............................................ I2C tools for Linux                                                                                     | |   
 | | < > ldconfig............................... Shared library path configuration                                                                                     | |   
 | | < > ldd.................................................... LDD trace utility                                                                                     | |   
 | | < > losetup....................... Loopback devices setup and control utility                                                                                     | |   
 | | < > mount-utils........................... Devices mount/unmounting utilities                                                                                     | |   
 | | < > mountd.......................................... OpenWrt automount daemon                                                                                     | |   
 | | < > ocf-crypto-headers............................ OCF-Linux cryptodev header                                                                                     | |   
 | | < > openssl-util........................... Open source SSL toolkit (utility)                                                                                     | |   
 | | < > px5g.............................. Standalone X.509 certificate generator                                                                                     | |   
 | | < > robocfg....................... BCM5325E/536x switch configuration utility                                                                                     | |   
 | | < > spidev-test.......................................... SPI testing utility                                                                                     | |   
 | | <*> test-perso.......................................................... Test    => Package perso. compilé et installé dans l'image au prochain make.             | |   
 | | < > uboot-envtools................. read/modify U-Boot bootloader environment                                                                                     | |   
 | | <*> xpl-owfs........................................................ xPL-owfs    => Choix dans menu rajouté dés la presence du répertoire trunk/pakage/xpl-owfs   | |
 | --------------------------------------------------------------------------------------------------------------------------------------------------------------------- |   
 -------------------------------------------------------------------------------------------------------------------------------------------------------------------------   
 |                                                                   <Select>    < Exit >    < Help >                                                                    |   
 -------------------------------------------------------------------------------------------------------------------------------------------------------------------------   


Source du programme test-perso

Fichier source et Makefile: test-perso.tgz


Entrées/sorties GPIO sur carte Fox avec OpenWrt

Voir explications sur les GPIOs de la carte Fox sur GPIO General purpose I/O et Using the I/O lines in C.
Voir aussi exemple de programme C utilisant les GPIO avec un LCD de type HD44780: LCD display et le source exemple: rssreader.c

Notes importantes concernant les GPIOs

  • The direction of IOG0,IOG24, PA0-7 and PB0-7 lines can be set indipendently.
  • The direction of IOG8-15 and IOG16-23 lines can be set as a whole 8 bit bus and not bit by bit.
  • Some lines are available as input on a pin and as output on another pin (i.e. IG25 and OG25).
  • Some other lines can be switched by program as input or output on the same pin (i.e. IOG24, IOG0, IOG8-15 and IOG16-23).


Electrical characteristics

  • All the logical levels are at 3.3 volt
  • The input lines are 5 volt tolerant
  • PA line can deliver and sink up to 12 mA.
  • PB and all the other GPIO have a limit of 4mA source and sink.


Exemple de programme

Source C simple pilotant la sortie IOG12 sur port G avec lib "etraxgpio.h" et device "/dev/gpiog"


/*
 Test I/O GPIOG    (25/11/2010)
 Repris exemple LCD (rssreader.c) site acme http://foxlx.acmesystems.it/?id=8021
 
 Rajout define "CONFIG_ETRAX_ARCH_V10" sinon erreur à la compilation pour ETRAXGPIO_IOCTYPE.
*/
 
#define CONFIG_ETRAX_ARCH_V10		// ETRAXGPIO_IOCTYPE déclaré dans etraxgpio.h mais sous condition "#ifdef" !
 
#include "stdio.h"     
#include "stdlib.h"     
#include "unistd.h"    
#include "fcntl.h" 
#include "errno.h"
#include "sys/ioctl.h"
#include "asm/etraxgpio.h"
 
 
int main(void) 
{
  int fd, res ;
  unsigned long data, mask;
 
  printf("Test sortie GPIO en boucle ...\n");
  data = mask = 0xFF << 8 ;
 
  if ( (fd = open("/dev/gpiog", O_RDWR)) < 0) 
  {
	printf("Erreur ouverture /dev/gpiog\n");
	exit(1);
  }
 
  errno = 0 ;
  res = ioctl(fd, _IO(ETRAXGPIO_IOCTYPE, IO_SETGET_OUTPUT), &mask) ;		// bits set in mask is set to output, mask updated with current output pins.
  if ( res < 0) { printf("Erreur IO_SETGET_OUTPUT: %s\n", strerror(errno)) ; exit(1) ; }
  if ((mask & data) != data) {  printf("Erreur IO_SETGET_OUTPUT, voir la config. kernel !\n") ; exit(1) ; }
 
 
  while(1) 
  {
	sleep(1) ;
	res = ioctl(fd, _IO(ETRAXGPIO_IOCTYPE, IO_SETBITS), 1 << 12) ;	// Set port IOG12 (J6-18)
	if ( res < 0) { printf("Erreur IO_SETBITS: %s\n", strerror(errno)) ; exit(1) ; }
 	sleep(1) ;
	res = ioctl(fd, _IO(ETRAXGPIO_IOCTYPE, IO_CLRBITS), 1 << 12) ;	// Clear port IOG12 (J6-18)
	if ( res < 0) { printf("Erreur IO_CLRBITS: %s\n", strerror(errno)) ; exit(1) ; }
  }
  close(fd);
  exit(0);
}


Bus I2C sur carte Fox avec OpenWrt

Impossible de faire fonctionner le bus i2c sous OpenWrt avec le "driver" du noyau !


Reprise de la méthode "User Space" en accédant directement au GPIO. (Repris de l'exemple Using the I2C bus - User space method sur le site d'Acme ainsi que de l'exemple fourni par un utilisateur: Lecture de température (Lettura della temperatura)


  • Shéma du cablâge:


  • Photos
Carte Fox et circuits sur Lab-dec
Chips i2c pcf8574, ds1621 et pcf8591


Liens ressources

http://crisos.org/dokuwiki/doku.php


FoxBoard and OpenWrt:

Magazine:

  • Linux-Mag HS n°47: OpenWrt sur Acme Fox



20/7/2010