main index Le mie pagine sulla Beagleboard cominciano qui!


Nota bene: chiamiamo "validation" quella serie di procedure che si fanno per verificare che della Beagleboard appena comprata funzioni tutto... oltre che per vedere in azione ognuna delle feature.

La procedura di "validation" è indicata (in inglese) in questa pagina. In questa mia pagina di appunti sparsi mi limiterò perciò solo a pochi commenti ed osservazioni.


Dopo aver allestito un cavetto RS232, collegato alla seriale del mio tablet Linux, lanciato minicom -s e configurato per usare la seriale a 115200 e "8/N/1", dò alimentazione alla Beagleboard via USB OTG. Si avvia il sistema, trova una MMC con i file necessari per il boot (cioè MLO, u-boot, la kernel u-image, la ramdisk compressa, etc) e fa il boot.

Rinvio alla validation per maggiori dettagli; al momento mi sono limitato a non utilizzare lo script "reset.scr" ma ho utilizzato il "boot.scr" perché non volevo ancora fare alcuna modifica al boot della Beagleboard.

Nota: occhio ai filename e all'ordine in cui vengono copiati sulla memory card! È essenziale che immediatamente dopo la formattazione (e senza usare un'etichetta), il primo file si chiami esattamente MLO anche se al download era MLO_revc_v3; ricordiamoci che per evitare che venga alterato l'ordine fisico su memory card (non parlo dell'ordine "ordinato" che vediamo a video) è bene non rinominarle lì.

Commento qui sotto i messaggi del boot così come mi sono apparsi.


Texas Instruments X-Loader 1.4.2 (Feb 19 2009 - 12:01:24)
Reading boot sector
Error: reading boot sector
Loading u-boot.bin from nand

U-Boot 2009.01-dirty (Feb 19 2009 - 12:22:31)

I2C:   ready
OMAP3530-GP rev 2, CPU-OPP2 L3-165MHz
OMAP3 Beagle board + LPDDR/NAND
DRAM:  256 MB
NAND:  256 MiB
*** Warning - bad CRC or NAND, using default environment

All'accensione tenta di leggere un "u-boot" e di eseguirlo, dal primo posto in cui lo trova disponibile. Per default tenta prima sulla NAND, poi sulla USB (da una pen-drive? non ne ho nessuna per verificare, per il momento), quindi su UART3 e MMC1 (i segnali di UART3 e MMC1, cioè della terza porta seriale e del secondo slot MMC, stanno solo sull'expansion connector, per cui bisogna saldarsi da soli gli slot relativi).

Se il tasto USER risulta premuto durante i primi secondi dell'accensione, allora la sequenza di boot privilegia prima USB, poi UART, poi MMC1 e infine NAND.

Per ora i vari messaggi di warning al boot non sono importanti.

È uno spasso vedere segnalati lì 256Mb RAM e 256Mb di memoria flash in tecnologia NAND. Quel "MiB" è perché sono un filino meno dei 256Mb canonici (quando si tratta di dischi e memorie, i produttori arrotondano a modo loro...).



MUSB: using high speed
In:    serial usbtty
Out:   serial usbtty
Err:   serial usbtty

Vedo che utilizza sia la seriale RS232 ("serial", quello che ho connesso alla RS232 del computer... anche se quest'ultimo aveva fisicamente un adattatore da USB a RS232, qui continuerò a chiamarla "seriale RS232"), sia il canale USB OTG (che sebbene utilizzato per l'alimentazione, può contemporaneamente essere usato come canale seriale). L'input proveniente da entrambi viene mandato a Linux.



Board revision C
Serial #5af31ac1a5f13400000000034afff2ff
Hit any key to stop autoboot:  10 9 8 7 6 5 4 3 2 1 0

"Board revision C": è infatti una Beagleboard revisione "C2" (le pochissime "C1" prodotte erano solo per gli sviluppatori). La "C3" che uscirà a giugno 2009 avrà come unica differenza i quattro buchi agli angoli della board stagnati e a massa.

La revisione "A" era il primissimo prototipo; la "B" è quella lanciata a luglio 2008 (l'ultima fu la "B7"); le "A" e "B" avevano solo 128Mb RAM, mentre la "C" ha 256Mb.

Quel lunghissimo "serial number" è in realtà un numero unico impresso nel processore OMAP3530 in fase di produzione, che non può essere modificato in nessun modo. In parole povere, si potrebbe scrivere un software che funzioni solo ed esclusivamente sulla board che abbia quello specifico numero (oppure un software abilitato a funzionare solo su una precisa lista di board).



reading boot.scr

603 bytes read
Running bootscript from mmc ...

Legge un bootscript dalla MMC che contiene i setup per l'u-boot: in pratica, i comandi di inizializzazione che altrimenti verrebbero dati a mano: fatload mmc 0 80200000 uImage.bin ... nand read... setenv bootargs console=ttyS2,115200n8 ramdisk_size=32768...

Siccome stiamo "validando" la Beagleboard, non ci preoccupiamo del fatto che dei 256Mb RAM ben 32Mb vengono usati per la ramdisk...!



Running bootscript from mmc ...
## Executing script at 80200000
reading uImage.bin

2578044 bytes read
***** Kernel: /dev/mmcblk0p1/uImage.bin *****
reading ramdisk.gz

7999649 bytes read
***** RootFS: /dev/mmcblk0p1/ramdisk.gz *****
## Booting kernel from Legacy Image at 80200000 ...
   Image Name:   Linux-2.6.28-omap1
   Image Type:   ARM Linux Kernel Image (uncompressed)
   Data Size:    2577980 Bytes =  2.5 MB
   Load Address: 80008000
   Entry Point:  80008000
   Verifying Checksum ... OK
   Loading Kernel Image ... OK
OK

Starting kernel ...

Uncompressing Linux..........

Da qui vediamo che ha caricato il kernel Linux all'indirizzo 0x80008000, cioè dopo i primi 32k RAM. La RAM della Beagleboard è infatti all'indirizzo fisico 0x80000000 (cioè dopo i primi due giga indirizzabili).

A questo punto viene avviato il kernel Linux.



........ done, booting the kernel.
Linux version 2.6.28-omap1 (root@tiioss) (gcc version 4.2.1 (CodeSourcery
            Sourcery G++ Lite 2007q3-51)) #2 Thu Feb 19 12:45:34 IST 2009
CPU: ARMv7 Processor [411fc083] revision 3 (ARMv7), cr=10c5387f
CPU: VIPT nonaliasing data cache, VIPT nonaliasing instruction cache
Machine: OMAP3 Beagle Board
Memory policy: ECC disabled, Data cache writeback
OMAP3430 ES3.0
SRAM: Mapped pa 0x40200000 to va 0xd7000000 size: 0x100000
Reserving 15728640 bytes SDRAM for VRAM
Built 1 zonelists in Zone order, mobility grouping on.  Total pages: 65024
Kernel command line: console=ttyS2,115200n8 console=tty0 root=/dev/ram0
            rw ramdisk_size=32768 initrd=0x81600000,32M
Clocking rate (Crystal/DPLL/ARM core): 26.0/332/500 MHz
GPMC revision 5.0
IRQ: Found an INTC at 0xd8200000 (revision 4.0) with 96 interrupts
Total of 96 interrupts on 1 active controller
OMAP34xx GPIO hardware version 2.5
PID hash table entries: 1024 (order: 10, 4096 bytes)
OMAP clockevent source: GPTIMER12 at 32768 Hz

Vedo dalle prime righe del kernel di "validation" alcune informazioni interessanti:

Nota: l'OMAP3 è compatibile con la classe precedente (ARMv5, quella usata nei vari iPhone e simili) ma è a parità di clock il 30-40% più veloce.



Memory: 128MB 128MB = 256MB total
Memory: 206080KB available (4776K code, 425K data, 168K init)
Calibrating delay loop... 503.12 BogoMIPS (lpj=1966080)

La memoria è vista come due banchi contigui da 128Mb; al momento risultano circa 206Mb liberi perché avevamo 32Mb di cache (oltre ai 4.7Mb per il codice del kernel, più i suoi dati e init, più la memoria video "condivisa").



regulator: VMMC1: 1850 <--> 3150 mV normal standby
regulator: VDAC: 1800 mV normal standby
regulator: VUSB1V5: 1500 mV normal standby
regulator: VUSB1V8: 1800 mV normal standby
regulator: VUSB3V1: 3100 mV normal standby
regulator: VSIM: 1800 <--> 3000 mV normal standby
Bluetooth: Core ver 2.13
...
serial8250.0: ttyS0 at MMIO 0x4806a000 (irq = 72) is a ST16654
serial8250.0: ttyS1 at MMIO 0x4806c000 (irq = 73) is a ST16654
serial8250.0: ttyS2 at MMIO 0x49020000 (irq = 74) is a ST16654
console [ttyS2] enabled

Le tensioni di funzionamento sono varie:

Lo stack software Bluetooth e quello WiFi sono stati inseriti nel kernel perché prima o poi qualcuno vorrà provare una chiavetta USB-Bluetooth. Ma questo è solo un kernel minimale per la "validazione", per cui non lo utilizzeremo per altri scopi.

Sulla Beagleboard ci sono tre porte seriali, di cui però solo una immediatamente a portata di mano (cfr. qui) e che viene utilizzata come console.



g_ether gadget: using random self ethernet address
g_ether gadget: using random host ethernet address
usb0: MAC 12:34:56:78:90:ab
usb0: HOST MAC cd:ef:12:34:56:78
g_ether gadget: Ethernet Gadget, version: Memorial Day 2008
g_ether gadget: g_ether ready

Vedo che la USB da cui prende l'alimentazione (e che usa come porta seriale) è configurata anche come "Ethernet Gadget" (dunque può essere usata anche come porta network). Non vedo l'ora di provarla...



usbhid: v2.6:USB HID core driver
Advanced Linux Sound Architecture Driver Version 1.0.18rc3.
usbcore: registered new interface driver snd-usb-audio
ASoC version 0.13.2
OMAP3 Beagle SoC init
TWL4030 Audio Codec init 
asoc: twl4030 <-> omap-mcbsp-dai-(link_id) mapping ok
ALSA device list:
  #0: omap3beagle (twl4030)

La Beagleboard ha anche una scheda audio stereo. La cosa divertente è tale "scheda audio" è una feature del regolatore di tensione TWL4030; sarebbe come se uno pagasse la bolletta della luce e per premio gli regalassero l'ultimo CD di Ozzy Osbourne... :-)

Viene ovviamente vista dai driver ALSA.



Freeing init memory: 168K
mmc0: new high speed SD card at address 0002
mmcblk0: mmc0:0002 00000 971 MiB 
 mmcblk0: p1
udevd version 124 started
uncorrectable error : <3>end_request: I/O error, dev mtdblock0, sector 0
Buffer I/O error on device mtdblock0, logical block 0

Qui ha visto la Secure Digital (in realtà ci ho messo una microSD in uno slot adattatore da microSD a SD, e poi quest'ultimo nello slot SD della Beagleboard). È una card da un gigabyte, cioè 971Mb (ai produttori di dischi e memorycard piace sempre fare arrotondamenti a vantaggio loro), con una sola partizione (p1) formattata in FAT32 e sulla quale c'erano i file necessari per il boot di Linux.

Gli errori segnalati per adesso non sono importanti, poiché Linux (il kernel di questa minidistribuzione Angstrom Linux ridotta all'osso) riesce a fare il boot senza problemi:


uncorrectable error : <3>end_request: I/O error, dev mtdblock0, sector 0
Buffer I/O error on device mtdblock0, logical block 0

.-------.                                           
|       |                  .-.                      
|   |   |-----.-----.-----.| |   .----..-----.-----.
|       |     | __  |  ---'| '--.|  .-'|     |     |
|   |   |  |  |     |---  ||  --'|  |  |  '  | | | |
'---'---'--'--'--.  |-----''----''--'  '-----'-'-'-'
                -'  |
                '---'

The Angstrom Distribution beagleboard ttyS2

Angstrom 2008.1-test-20090127 beagleboard ttyS2

beagleboard login:

A questo punto si può dare root e cominciare a smanettare un po'... alé!!!


beagleboard login: root
root@beagleboard:~# df
Filesystem           1k-blocks      Used Available Use% Mounted on
rootfs                   15863     15735         0 100% /
/dev/root                15863     15735         0 100% /
none                    119644        72    119572   0% /dev
tmpfs                   119644        20    119624   0% /var/volatile
tmpfs                   119644         0    119644   0% /dev/shm
tmpfs                   119644         0    119644   0% /media/ram
/dev/mmcblk0p1          992736     10928    981808   1% /media/mmcblk0p1
root@beagleboard:~#

Oltre ai temporary file system (tmpfs) e al rootfs (contenente quella ramdisk), vedo che è stata montata anche la memory card, su cui vedo 981 megabytes liberi.


root@beagleboard:~# cat /proc/cpuinfo
Processor       : ARMv7 Processor rev 3 (v7l)
BogoMIPS        : 503.12
Features        : swp half thumb fastmult vfp edsp 
CPU implementer : 0x41
CPU architecture: 7
CPU variant     : 0x1
CPU part        : 0xc08
CPU revision    : 3

Hardware        : OMAP3 Beagle Board
Revision        : 0020
Serial          : 0000000000000000
root@beagleboard:~#

Il serial number del processore è leggibile da software, ma pare che nel kernel fornito per la "validation" (almeno quello che ho provato io), nell'u-boot si veda (cfr. sopra) e invece da kernel non si vede (qui escono tutti zeri): il tizio che ha compilato tale kernel deve aver dimenticato qualche patch per strada...

Il supporto "OMAP3 Beagle Board" non è entrato ancora nella mainline del kernel Linux (almeno fino a questo momento, aprile 2009, col kernel 2.6.29), ma le patch ci sono quasi tutte.


Just found a box! I have to drill a few holes...

home page - send e-mail