Home
Accesso / Registrazione
 di 

PortuxG20 Embedded Linux Getting Started

PortuxG20

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.

 

 

Scrivi un commento all'articolo esprimendo la tua opinione sul tema, chiedendo eventuali spiegazioni e/o approfondimenti e contribuendo allo sviluppo dell'argomento proposto. Verranno accettati solo commenti a tema con l'argomento dell'articolo stesso. Commenti NON a tema dovranno essere necessariamente inseriti nel Forum creando un "nuovo argomento di discussione". Per commentare devi accedere al Blog
ritratto di linus

bravo

Bravo, mi è piaciuto molto questo articolo che più che una presentazione del prodotto (ma c'è?) è una guida su come installare linux molto dettagliata ed esaustiva e che da un idea dell'ambiente linux e delle sue risorse anche con un po' di umorismo ;).

ritratto di Ciro Tranchino

Ciao linus. Si il prodotto

Ciao linus.
Si il prodotto c'è ...nel mio laboratorio.
Al più presto inizierò a collegare le interfacce.
Grazie, Ciro.

ritratto di divivoma

si bravo semplice ed efficace

si bravo semplice ed efficace ;).. magari si poteva vedere anche come mettere in fash l'immagine del kernel e il boot loader ;) in modo tale da partire da zerissimo :) però vabbè alla fine quella si ha sempre e per chi vuole sviluppare basta partire da questi passi qui...

quanto costa questa scheda?

ritratto di Ciro Tranchino

Ciao divivoma, Il kit di

Ciao divivoma,
Il kit di sviluppo costa 199 EUR. La scheda poco meno, ma il prezzo cala per quantità superiori.
Occorrere aggiungere IVA e spedizione, però.
Tornerò sull'argomento PortuxG20 con una serie di articoli, così gradualmente cercherò di dare "soddisfazione" a tutti. Nell'articolo non ho parlato di Uboot, che ci consente di partire da zerissimo. In effetti bisogna trasferire l'immagine con TFTP e copiarla in flash. E' un'operazione un pò meccanica, nulla di più.
Presto ci divertiremo con la programmazione in ANSI C e lì ci sarà più spazio per la fantasia.

ritratto di divivoma

ok ok :) io mi diverto tt i

ok ok :) io mi diverto tt i giorni col C :) ben venga.. hai in mente già qualche applicazione da realizzare?

ritratto di Ciro Tranchino

...qualche applicazione che

...qualche applicazione che utilizzi le funzionalità multi-task di Linux e la memoria condivisa. Vorrei procedere per gradi in modo da coinvolgere il maggior numero possibile di appassionati. Poi ci sarebbe il File-System, lo stack IP, l'USB, il bus PXB, ecc. ecc. Nelle schede Linux Embedded c'è un mondo tutto da scoprire, programmando e condividendo il codice.
Aspetto comunque proposte da tutti voi! Non fatele mancare.

ritratto di divivoma

ok vedremo allora dai..! a

ok vedremo allora dai..! a presto

ritratto di qualtroll

Aggiornamenti

Ciao a tutti,
il post è di mio grande interesse, non ci credo una guida di Linux embedded interamente in italiano. Vi volevo chiedere quale fosse la frequenza di aggiornamento dei contenuti pianificata

Grazie

ritratto di Ciro Tranchino

Ciao, a breve la seconda

Ciao, a breve la seconda parte dove manderemo in esecuzione il programma di prova.
A quali applicazioni in particolare sei interessato?
Ciro.

ritratto di qualtroll

Ciao, sono interessato alla

Ciao,
sono interessato alla lettura di sensori con valori in mV come termocoppie e controllo di uscite PWM, il tutto con una comunicazione con un PC di interfaccia esterno.

Grazie

 

 

Login   
 Twitter Facebook LinkedIn Youtube Google RSS

Chi è online

Ci sono attualmente 5 utenti e 53 visitatori collegati.

Ultimi Commenti