PortuxG20 Embedded Linux Getting Started

In questo articolo vedremo cosa occorre per iniziare a sviluppare un'applicazione con la scheda Linux Embedded PortuxG20. Partendo dal presupposto di essere già in possesso di uno Starter Kit, inizieremo con qualche semplice test, con la configurazione del sistema di sviluppo e poi, insieme, esploreremo le principali funzionalità del prodotto, con esempi pratici e codice da implementare. Non sarà un solo articolo, ma divideremo in più post la descrizione di un prodotto che mostra grandi potenzialità e ...qualche inevitabile complessità.

Benvenuti nel blog e benvenuti in PortuxG20, una scheda Linux Embedded che ci condurrà nell'esplorazione della distribuzione Angstrom per microprocessori ARM.

La scheda PortuxG20, prodotta dalla casa tedesca Taskit GmbH, nonostante le sue ridotte dimensioni, è un vero e proprio computer personale basato sul Kernel 2.6.31 e, con i suoi 400MHz di CPU RISC e le molteplici interfacce, è adatta per numerose applicazioni industriali. Essa viene fornita con una immagine del kernel ed un root file system, precaricati. Pertanto, potremo da subito iniziare a sperimentare le sue molteplici funzionalità.

Non ci resta che iniziare con ...Power ON.

U-Boot 2009.08 (Mai 05 2011 - 11:44:53)

DRAM: 64 MB
NAND: 128 MiB
In:    serial
Out:   serial
Err:   serial
Net:   macb0
macb0: Starting autonegotiation...
macb0: Autonegotiation complete
macb0: link up, 100Mbps full-duplex (lpa: 0x4de1)
Hit any key to stop autoboot: 0

NAND read: device 0 offset 0xa0000, size 0x200000
2097152 bytes read: OK
## Booting kernel from Legacy Image at 22000000 ...
Image Name:   Angstrom/2.6.31/portuxg20
Image Type:   ARM Linux Kernel Image (uncompressed)
Data Size:    1522520 Bytes = 1.5 MB
Load Address: 20008000
Entry Point: 20008000
Verifying Checksum ... OK
Loading Kernel Image ... OK
OK

Starting kernel ...
Uncompressing Linux...... done, booting the kernel.

Ecco cosa ci appare sulla Porta Seriale RS232 DBUG durante le prime fasi del Boot.

Vi risparmio le 150 righe di avvisi per ogni evento riportato in "console", ma, al termine del caricamento del kernel, sarete invitati ad effettuare il login. Digitate il nome utente (root) e la password (taskit).

D'ora in avanti il vostro prompt sarà: root@portuxg20:

Una sessione di shell sarà il vostro interlocutore e, attraverso la moltitudine di comandi implementati da BusyBox, potrete interagire con il sistema, esplorando ogni risorsa in esso contenuta (...sono davvero tante!).

Iniziamo con un semplice comando, digitando:

busybox

BusyBox v1.13.2 (2009-06-11 11:17:49 UTC) multi-call binary
Copyright (C) 1998-2008 Erik Andersen, Rob Landley, Denys Vlasenko
and others. Licensed under GPLv2.
See source distribution for full notice.

Usage: busybox [function] [arguments]...
or: function [arguments]...

BusyBox is a multi-call binary that combines many common Unix
utilities into a single executable. Most people will create a
link to busybox for each function they wish to use and BusyBox
will act like whatever it was invoked as!

Currently defined functions:
[, [[, addgroup, adduser, ar, ash, awk, basename, blkid,
bunzip2, bzcat, cat, chattr, chgrp, chmod, chown, chpasswd,
chroot, chvt, clear, cmp, cp, cpio, cryptpw, cut, date,
dc, dd, deallocvt, delgroup, deluser, df, dhcprelay, diff,
dirname, dmesg, du, dumpkmap, dumpleases, echo, egrep, env,
expr, false, fbset, fbsplash, fdisk, fgrep, find, free,
freeramdisk, fsck, fsck.minix, fuser, getopt, getty, grep,
gunzip, gzip, halt, head, hexdump, hostname, httpd, hwclock,
id, ifconfig, ifdown, ifup, init, insmod, ip, kill, killall,
klogd, last, less, linuxrc, ln, loadfont, loadkmap, logger,
login, logname, logread, losetup, ls, lsmod, makedevs, md5sum,
mdev, microcom, mkdir, mkfifo, mkfs.minix, mknod, mkswap,
mktemp, modprobe, more, mount, mv, nc, netstat, nice, nohup,
nslookup, od, openvt, passwd, patch, pidof, ping, ping6,
pivot_root, poweroff, printf, ps, pwd, rdate, rdev, readahead,
readlink, readprofile, realpath, reboot, renice, reset,
rm, rmdir, rmmod, route, rtcwake, run-parts, sed, seq, setconsole,
setfont, sh, showkey, sleep, sort, start-stop-daemon, strings,
stty, su, sulogin, swapoff, swapon, switch_root, sync, sysctl,
syslogd, tail, tar, tee, telnet, telnetd, test, tftp, time,
top, touch, tr, traceroute, true, tty, udhcpc, udhcpd, umount,
uname, uniq, unzip, uptime, usleep, vi, vlock, watch, wc,
wget, which, who, whoami, xargs, yes, zcat

...otterremo l’elenco dei comandi implementati. Infatti, BusyBox raggruppa in un unico eseguibile le utility Linux di uso comune quali ad es. mkdir (crea una nuova directory), cp (copia file), vi (un famoso editor), ecc.

Proviamo l’utility ping, digitando anche l’indirizzo di un host (avremo preventivamente connesso uno dei cavi Ethernet in dotazione al nostro router o al PC):

ping 192.168.0.1

PING 192.168.0.1 (192.168.0.1): 56 data bytes
64 bytes from 192.168.0.1: seq=0 ttl=64 time=9.537 ms
64 bytes from 192.168.0.1: seq=1 ttl=64 time=0.840 ms
64 bytes from 192.168.0.1: seq=2 ttl=64 time=0.835 ms
64 bytes from 192.168.0.1: seq=3 ttl=64 time=0.823 ms
(CTRL+C per interrompere)
--- 192.168.0.1 ping statistics ---
4 packets transmitted, 4 packets received, 0% packet loss
round-trip min/avg/max = 0.823/3.008/9.537 ms

Cio significa che abbiamo uno Stack TCP/IP perfettamente funzionante. Ottimo! Ci tornerà molto utile in futuro.

 

Due parole sulla dotazione hardware:

Microprocessore: ATMEL AT91SAM9G20, core ARM926EJ-S, MMU, 396MHz di clock, 4 x USART, 2 x USB 2.0 host, 32K I-Cache, 32K D-Cache ...e molto altro... La scheda ospita: 64Mbyte di SDRAM, 128Mbyte NAND flash, Ethernet 10/100 MHz, USB host/device, slot microSSD e bus PXB, il tutto in un comodo formato half-Eurocard 72x100 mm, idoneo ad essere alloggiato all'interno di Subrack 19'' compatibili con lo standard IEC-297-1, risparmiandovi il gravoso compito di disegnare una meccanica custom per i vostri prototipi, conferendo così, da subito, un aspetto più che professionale alle vostre applicazioni.

Nel seguito vi elenco, per comodità, i principali elementi contenuti nel kit:

  • scheda PortuxG20
  • connettori IDC e DIN41612 da saldare sul lato "bus" della scheda
  • microSD con Root File System precaricato
  • adattatore DB9 per porta RS232 DBUG
  • corredo di cavi Ethernet e Seriale Cross
  • alimentatore 5V con connettore USB
  • CD con software, esempi e documenti

 

Come svilupperemo le nostre applicazioni?

Dovremo, come primo passo, disporre di un PC con una distribuzione Linux installata (nota: la casa madre consiglia e supporta solo Debian). Nei nostri esempi utilizzeremo un PC Netbook con Ubuntu installato e proveremo a risolvere tutte le piccole incompatibilità che dovessero verificarsi. Inoltre, risulterà indispensabile un adattatore USB-RS232, se non disponiamo nativamente di tale interfaccia a bordo del PC (il Netbook ne è sprovvisto ...peccato!).

Nel mio setup ho utilizzato una seconda postazione con Windows per la sola porta DBUG e ho registrato con HyperTerminal tutti i comandi e messaggi di risposta, tra la scheda PortuxG20 e il PC, per facilitare il lavoro di documentazione sul blog. Ma, per chi preferisce l'emulatore di terminale VT100 Minicom, è possibile usare la sola postazione PC con Ubuntu. Tuttavia, potendo accedere da remoto alla scheda target attraverso una connessione ssh, cercheremo di limitare il più possibile l'utilizzo della connessione RS232 DBUG.

Iniziamo a configurare Ubuntu, seguendo tutti i passaggi così come elencati nel documento a corredo del kit linuxguide.pdf. I comandi verranno digitati in una sessione di Terminale (Gnome Terminal nella dotazione di Ubuntu).

Dopo aver copiato il contenuto del CD su di una pen-drive USB (il Netbook è sprovvisto anche del lettore CD ...naturalmente), guadagniamo i diritti di amministratore e procediamo con l'installazione della toolchain, digitando:

su

Password:<la vs. password di root>

cd /media/<id della pen-drive>/toolchain

tar -xvjf angstrom-2009.X-stable-armv5te-linux-gnueabi-toolchain.tar.bz2 -C /

Tutto qui, tar farà il lavoro per noi!

E' importante che non vengano riportati messaggi di errore, segno che qualche operazione non è andata a buon fine.

A questo punto dovremo solo aggiungere il path del nuovo cross-compilatore, appena installato, nel nostro script di login (nota: il manuale indica il file ~/.profile, ma Ubuntu preferisce ~/.bashrc). Usciamo dalla sessione su con exit e andiamo a modificare il nostro script (...nella $HOME) aggiungendovi la riga...

export PATH=/usr/local/angstrom/arm/bin/:$PATH

Per l'editing dello script possiamo usare il comando:

vi .bashrc

A questo punto, al prossimo login, potremo utilizzare i comandi del compilatore ARM di Angstrom.

Verifichiamo che il compilatore sia "in linea", digitando il seguente comando:

arm-angstrom-linux-gnueabi-gcc -v

Tutto ok? Avete il terminale invaso da messaggi di errore?

Spero di no!

Ma se ciò è accaduto vuol dire che state sperimentando le gioie e i dolori di Linux. Con calma e pazienza, ripartite dall'inizio e vedrete che poi non è così difficile come sembra! Comunque la versione del compilatore è la 4.2.4 e ricordate che è un cross-compilatore (codice ARMv5 compilato e "linkato" su i686) e, pertanto, il codice prodotto non potrà essere eseguito in locale sul PC.

Adesso, non resta che scrivere il nostro primo programma per sancire che tutto effettivamente funzioni.

/* PortuxG20 - Primo programma */

#include <stdio.h>
int main()
{
printf("Hello!\n");
return 0;
}

Programma che compileremo con il comando:

arm-angstrom-linux-gnueabi-gcc -Wall hello.c -o hello

Nessun messaggio di risposta? ...significa che tutto è ok!

Abbiamo compilato il nostro primo programma per ARMv5 e nel prossimo post vedremo come fare per eseguire tale programma sul target.

A presto, Ciro.

Scarica subito una copia gratis

8 Commenti

  1. Avatar photo Ciro Tranchino 8 Novembre 2011
  2. Avatar photo linus 8 Novembre 2011
  3. Avatar photo Ciro Tranchino 8 Novembre 2011
  4. Avatar photo divivoma 8 Novembre 2011
  5. Avatar photo Ciro Tranchino 8 Novembre 2011
  6. Avatar photo divivoma 8 Novembre 2011
  7. Avatar photo divivoma 8 Novembre 2011
  8. Avatar photo Ciro Tranchino 21 Novembre 2011

Scrivi un commento

Seguici anche sul tuo Social Network preferito!

Send this to a friend