Beagleboard

Aus Matthias Wiki
Zur Navigation springen Zur Suche springen

Links[Bearbeiten]

Benötigtes Material[Bearbeiten]

Hardware[Bearbeiten]

  • Beagleboard
  • Netzteil 5V
  • Highspeed USB Hub
  • SD-Karte (mindestens 1GB)
  • SD-Kartenleser
  • Serielles Adapterkabel (IDC10 auf DB9M)
  • USB zu Seriell Adapter (oder physikalischen seriellen Port am PC)
  • Nullmodemkabel
  • Monitor mit Verbindungskabel zu HDMI Buchse

Software[Bearbeiten]

  • VMWare Player [1]
  • Ubuntu Linux [2]
  • Angstrom SDK für arm7 & Qt [3]
  • Angstrom Linux als tar-Archiv für Beagleboard [4] (liefert auch einen Link zum Download des SDK)

Entwicklungs-VM[Bearbeiten]

  • In VMWare Player
  • 10GB Festplatte
  • Ubuntu 11.04
  • Zusätzlich installierte Pakete:
    • keine
  • Login:
    • Benutzername: beagle
    • Passwort: beagle

U-Boot[Bearbeiten]

Der Zugang zur Shell des Bootloaders erfolgt mit Hilfe eines Kabels IDC10 auf DB9M, das am auf dem Pfostenstecker auf dem Beagleboard angeschlossen wird. Ein Nullmodemkabel verbindet dann das Beagleboard mit dem PC.

Mit dem Kommando printenv können die Einstellungen des Bootloarders betrachtet werden. Die Standardeinstellungen sind:

bootcmd=if mmc init; then if run loadbootscript; then run bootscript; else if run loaduimage; then run mmcboot; else run nandboot; fi; fi; else run nandboot; fi
bootdelay=10
baudrate=115200
loadaddr=0x82000000
console=ttyS2,115200n8
vram=12M
dvimode=1024x768MR-16@60
defaultdisplay=dvi
mmcroot=/dev/mmcblk0p2 rw
mmcrootfstype=ext3 rootwait
nandroot=/dev/mtdblock4 rw
nandrootfstype=jffs2
mmcargs=setenv bootargs console=${console} vram=${vram} omapfb.mode=dvi:${dvimode} omapfb.debug=y omapdss.def_disp=${defaultdisplay} root=${mmcroot} rootfstype=${mmcrootfstype}
nandargs=setenv bootargs console=${console} vram=${vram} omapfb.mode=dvi:${dvimode} omapfb.debug=y omapdss.def_disp=${defaultdisplay} root=${nandroot} rootfstype=${nandrootfstype}
loadbootscript=fatload mmc 0 ${loadaddr} boot.scr
bootscript=echo Running bootscript from mmc ...; source ${loadaddr}
loaduimage=fatload mmc 0 ${loadaddr} uImage
mmcboot=echo Booting from mmc ...; run mmcargs; bootm ${loadaddr}
nandboot=echo Booting from nand ...; run nandargs; nand read ${loadaddr} 280000 400000; bootm ${loadaddr}
stdin=serial
stdout=serial
stderr=serial
dieid#=542e0004000000000403a3810301300c

Hilfreiche Einstellungen[Bearbeiten]

  • Verzögerung beim Boot (bootdelay): Zeit in Sekunden
  • Bildschirmauflösung (dvimode):
    • 1024x768MR-16@60 (default)
    • hd720-16 (HD 720p in 16 Bit - momentan keine höhere Farbtiefe möglich)
    • 1360x768MR-16@50
    • Weitere Modi
  • Bildausgabe auf DVI/S-Video (defaultdisplay):
    • DVI (omapfb.mode=dvi)
    • S-Video PAL (omapfb.mode=tv:pal)
    • S-Video NTSC (omapfb.mode=tv:ntsc)
  • Videospeicher: vram=8M omapfb.vram=0:8M[5]

System auf SD-Karte einrichten[Bearbeiten]

Die Einrichtung der SD-Karte erfolgt mit Hilfe des Angstrom SDKs innerhalb der Entwicklungs VM.

Ångström SDK einrichten[Bearbeiten]

Alle Operationen als root ausführen:

beagle@ubuntu:~$ sudo bash

Nach / entpacken und Umgebung initialisieren:

root@ubuntu:~# tar -xjf beagleboard/Angstrom-2011.05-narcissus-beagleboard-i686-qt-development-image-sdk.tar.gz 
root@ubuntu:~# . /usr/local/angstrom/arm/environment-setup

Root Filesystem auf SD-Karte vorbereiten[Bearbeiten]

SD-Karte wie in {http://code.google.com/p/beagleboard/wiki/BeagleBootHwSetup} beschrieben partitionieren und formatieren, anschließend die Partitionen mounten und das Root Filesystem installieren:

root@ubuntu:~# tar -C /media/Angstrom -xzf qt-development-image-beagleboard.tar.gz  

Bootpartition vorbereiten (MLO & Kernel kopieren) :

root@ubuntu:~# cd /media/boot
root@ubuntu:/media/boot# wget http://www.angstrom-distribution.org/demo/beagleboard/MLO
root@ubuntu:/media/boot# wget http://www.angstrom-distribution.org/demo/beagleboard/uImage

Pakete ins RootFS des Targets installieren:

root@ubuntu:~# opkg-target update
root@ubuntu:~# opkg-target install mtd-utils -o /media/Angstrom/
root@ubuntu:~# opkg-target install mkfs-ubifs -o /media/Angstrom/

Zum Schluß noch das heruntergeladene RootFS für Qt auf die SD-Karte kopieren:

root@ubuntu:~# cp qt-development-image-beagleboard.tar.gz /media/Angstrom/

System auf internem Flash installieren[Bearbeiten]

Es gibt fünf verschiedene Bereiche im internen Flash:

root@beagleboard:~# cat /proc/mtd 

dev:    size   erasesize  name
mtd0: 00080000 00020000 "X-Loader"
mtd1: 001e0000 00020000 "U-Boot"
mtd2: 00020000 00020000 "U-Boot Env"
mtd3: 00400000 00020000 "Kernel"
mtd4: 0f980000 00020000 "File System"

Kernel installieren[Bearbeiten]

Zuerst muß der Flashbereich für den Kernel gelöscht werden:

root@beagleboard:~# flash_eraseall  /dev/mtd3
Erasing 128 Kibyte @ 3e0000 -- 96 % complete.

Anschließend wir das Kernel-Image ins Flash kopiert:

root@beagleboard:~# nandwrite -p /dev/mtd3 /media/mmcblk0p1/uImage
Writing data to block 0 at offset 0x0

RootFS im Flash erstellen[Bearbeiten]

root@beagleboard:~# ubiformat /dev/mtd4                                         
ubiformat: mtd4 (nand), size 261619712 bytes (249.5 MiB), 1996 eraseblocks of 131072 bytes (128.0 KiB), min. I/O size 2048 bytes
libscan: scanning eraseblock 1995 -- 100 % complete  
ubiformat: 1971 eraseblocks have valid erase counter, mean value is 2
ubiformat: 25 bad eraseblocks found, numbers: 114, 269, 394, 421, 448, 528, 549, 631, 639, 739, 754, 770, 789, 795, 824, 851, 866, 895, 924, 966, 1288, 1605, 1850, 1909, 1912
ubiformat: formatting eraseblock 1995 -- 100 % complete  

root@beagleboard:~# ubiattach /dev/ubi_ctrl -m 4  
[  432.679565] UBI: attaching mtd4 to ubi0
[  432.684295] UBI: physical eraseblock size:   131072 bytes (128 KiB)
[  432.690917] UBI: logical eraseblock size:    129024 bytes
[  432.696502] UBI: smallest flash I/O unit:    2048
[  432.701568] UBI: sub-page size:              512
[  432.706420] UBI: VID header offset:          512 (aligned 512)
[  432.712463] UBI: data offset:                2048
[  433.190551] UBI: attached mtd4 to ubi0
[  433.194335] UBI: MTD device name:            "File System"
[  433.200347] UBI: MTD device size:            249 MiB
[  433.205566] UBI: number of good PEBs:        1971
[  433.210296] UBI: number of bad PEBs:         25
[  433.215576] UBI: max. allowed volumes:       128
[  433.220428] UBI: wear-leveling threshold:    4096
[  433.225158] UBI: number of internal volumes: 1
[  433.229888] UBI: number of user volumes:     0
[  433.234344] UBI: available PEBs:             1948
[  433.239349] UBI: total number of reserved PEBs: 23
[  433.244323] UBI: number of PEBs reserved for bad PEB handling: 19
[  433.250457] UBI: max/mean erase counter: 3/3
[  433.255004] UBI: image sequence number: 1125815993
[  433.260009] UBI: background thread "ubi_bgt0d" started, PID 886
UBI device number 0, total 1971 LEBs (254306304 bytes, 242.5 MiB), available 1948 LEBs (251338752 bytes, 239.7 MiB), LEB size 129024 bytes (126.0 KiB)

root@beagleboard:~# ubimkvol /dev/ubi0  -N rootfs -m           
Set volume size to 251338752
Volume ID 0, size 1948 LEBs (251338752 bytes, 239.7 MiB), LEB size 129024 bytes (126.0 KiB), dynamic, name "rootfs", alignment 1

root@beagleboard:~# mount -t ubifs ubi0:rootfs /media/realroot
[  381.833190] UBIFS: mounted UBI device 0, volume 0, name "rootfs"
[  381.839355] UBIFS: file system size:   249790464 bytes (243936 KiB, 238 MiB, 1936 LEBs)
[  381.847442] UBIFS: journal size:       12515328 bytes (12222 KiB, 11 MiB, 97 LEBs)
[  381.855072] UBIFS: media format:       w4/r0 (latest is w4/r0)
[  381.860961] UBIFS: default compressor: lzo
[  381.865112] UBIFS: reserved for root:  4952683 bytes (4836 KiB)

root@beagleboard:~# tar -C /media/realroot -xzf /qt-development-image-beagleboard.tar.gz  

root@beagleboard:~# reboot

Wer möchte kann den beim Mounten des UbiFS eine stärkere Komprimierung einstellen:

root@beagleboard:~# mount -t ubifs ubi0:rootfs /media/realroot -o compr=zlib

UBoot rekonfigurieren[Bearbeiten]

Die folgenden Einstellungen müssen in UBoot vorgenommen werden:

OMAP3 beagleboard.org # setenv nandrootfstype ubifs
OMAP3 beagleboard.org # setenv nandroot ubi0:rootfs ubi.mtd=4 rootflags=compr=zlib
OMAP3 beagleboard.org # saveenv
OMAP3 beagleboard.org # reset

powervr.ini[Bearbeiten]

Über die Datei /etc/powervr.ini kann der SGX-Treiber konfiguriert werden. Der interessante Parameter ist WindowSystem, die folgenden Einstellungen sind möglich:

  • libpvrQWSWSEGL.so (Für Qt/Embedded)
  • libpvrPVR2D_FRONTWSEGL.so (kein vsync)
  • libpvrPVR2D_FLIPWSEGL.so (vsync)
  • libpvrPVR2D_BLITWSEGL.so (double buffered, vsync)
  • libpvrPVR2D_X11WSEGL.so (X11)

OPKG[Bearbeiten]

Vom SDK aus Pakete in ein auf einer SD-Karte gespeicherten System installieren. Abhängige Pakete werden automatisch mitkopiert:

root@ubuntu:~# opkg-target install [Paketname] -o [Ziel]

Vom SDK aus Pakete herunterladen um sie später auf dem Target installieren zu können

root@ubuntu:~# opkg-target install [Paketname] --download-only

Qt Embedded nutzen[Bearbeiten]

Vorbereitung auf dem Target[Bearbeiten]

Zuerst muß die Datei /etc/init.d/matrix-gui-e angepasst werden, da als Default die Verwendung eines hochkant ausgerichteten Touchscreen vorgesehen ist:

GUI_OPTS="-qws /usr/share/matrix/html/menu_main.html"

...

#export TSLIB_TSDEVICE=/dev/input/touchscreen0
#export QWS_MOUSE_PROTO=Tslib:/dev/input/touchscreen0

Der Grafikprozessor läuft nur auf halber Geschwindigkeit. Sie kann mit dem folgenden Kommando erhöht werden (bis zum nächsten Neustart)[6]:

root@beagleboard:~# devmem2 0x48004b40 w 0

Der Grafiktreiber muß noch auf Qt Embedded anepasst werden. Dazu den Inhalt der Datei /etc/powervr.ini durch den folgenden Text ersetzen[7]:

[default] WindowSystem=libpvrPVR2D_FRONTWSEGL.so.1

Anwendungen starten[Bearbeiten]

Anwendungen entwickeln[Bearbeiten]