www.mikrocontroller.net

AVR32 Grasshopper

Inhaltsverzeichnis

[bearbeiten] Über das Board

AVR32-Board, ab 85 Euro (Version ohne CD) im Mikrocontroller.net-Shop erhältlich.

Technische Daten:

  • 140 MHz (max. 200 MHz möglich)
  • 64 MB SDRAM (32 Bit breit angeschlossen)
  • 8 MB Flash
  • 10/100 MBit/s Netzwerk
  • 1 USB Highspeed Anschluss
  • 8 LED
  • 1 Taster
  • Power LED (kann auch angesteuert werden)
  • Reset Taster
  • Spannungsversorgung: 5-10V verpolungssicher oder USB Kabel oder über Pinleisten
  • über die Pinleisten sind alle wichtigen Ports herausgeführt


[bearbeiten] Ressourcen


[bearbeiten] Speicherlayout

  • Flash: 8MB ab Adresse 0x00000000
  • RAM: 64MB ab Adresse 0x10000000

[bearbeiten] Austausch von Dateien mit dem Board

Es gibt verschiedene Wege, Dateien mit dem Board auszutauschen. Standardmäßig läuft ein Webserver, der die Dateien unterhalb von /var/www bereitstellt. Auf dem Board ist wget installiert, mit dem Dateien von einem Webserver auf das Board geladen werden können. Ein TFTP-Server ist ebenfalls vorhanden. (Hinweis: Außer dem Namen hat TFTP (Trivial File Transfer Protocol) nichts mit dem bekannteren FTP gemeinsam.) Standardmäßig läuft der Server nicht. Man startet ihn mit folgendem Kommando und begrenzt den Zugriff sicherheitshalber auf Dateien in /tmp:

in.tftpd -l -c -s /tmp

Windows und die gängigen Linux-Distributionen bringen einen TFTP-Client mit, so dass man nun Dateien austauschen kann.

Sollte im LAN bereits ein NFS-Server (Network File System) existieren, kann auch er zum Datenaustausch mit dem Grasshopper dienen. Dazu muss auf dem Board nur portmap gestartet werden. Danach ist ein Mounten von NFS-Freigaben möglich.

[bearbeiten] Beschreiben des Flash-Speichers

Die 8 MiB Flash-Speicher auf dem Board sind in drei Bereiche aufgeteilt: In den untersten 128 kiB befindet sich der Bootloader U-Boot. Der Bereich von 128 - 192 kiB ist für die Umgebungsvariablen (environment) des Bootloaders reserviert. Das JFFS2-Dateisystem mit der Linuxumgebung (root file system) belegt den Rest.

Am sichersten lässt sich der Flash-Speicher über die auf dem Board vorhandene JTAG-Schnittstelle beschreiben. Offiziell unterstützt Atmel nur den firmeneigenen JTAGICE mkII. Es existieren auch Softwarelösungen, um das Board über ein JTAG-Interface nach Wiggler-Bauart anzusprechen: [[1]].

Ferner lässt sich der Flash-Speicher auch aus dem laufenden Linux heraus (als Benutzer root) oder durch den Bootloader U-Boot beschreiben. Hierbei besteht allerdings ein Risiko. Wird ein defektes JFFS2-Dateisystem geflasht, so läuft Linux nicht mehr, ist gar U-Boot gelöscht oder beschädigt, so startet u.U. das Board nicht einmal mehr. Dann kann es nur noch über JTAG erneut geflasht werden.

[bearbeiten] Flashen des JFFS2-Dateisystems unter Linux

Zunächst muss das neue Root-Dateisystem in das /tmp-Verzeichnis auf das Board geladen werden, z.B. mit wget oder über tftp. Dann wird das alte Dateisystem zur Sicherheit schreibgeschützt gemountet und durch das neue ersetzt. Danach ist Reset nötig.

mount / -o remount,ro
dd if=/tmp/neues-root-fs of=/dev/mtdblock2 bs=64k

[bearbeiten] Flashen des Bootloaders unter Linux

Aus Sicherheitsgründen ist der Bereich des Flashs, in dem sich U-Boot befindet, standardmäßig unter Linux schreibgeschützt. Vor dem Booten des Linuxkernels muss daher im alten U-Boot der Inhalt der Environmentvariable bootargs geändert werden. Der Teil

mtdparts=physmap-flash.0:128k(boot)ro,64k(env)ro,-(root)

muss durch

mtdparts=physmap-flash.0:128k(boot),64k(env)ro,-(root)

ersetzt werden. Insgesamt ergeben sich für ein U-Boot im Auslieferungszustand folgende zwei Zeilen, die am U-Boot-Prompt eingegeben werden müssen:

setenv bootargs console=ttyS0 root=1F02 rootfstype=jffs2 mtdparts=physmap-flash.0:128k(boot),64k(env)ro,-(root)
boot

Nun kann U-Boot unter Linux geladen und geflasht werden:

dd if=/tmp/neues-u-boot.bin of=/dev/mtdblock0 bs=4k
  • Achtung: Sollte bei dem letzten Befehl etwas schief laufen oder die neue U-Boot-Version defekt sein, so bootet das Board danach nicht mehr.
  • Hinweis: "Das U-Boot" hat unter Umständen Probleme damit, längere Einträge mit "setenv" zu übernehmen. Das "askenv" Kommando kennt diese Beschränkung nicht und sollte in diesen Fällen verwendet werden.

[bearbeiten] Booten via NFS

Man kann auch ein Rootfs über NFS mounten. Dieser Hinweis bezieht sich auf feste IP, nicht auf die Konfiguration mit DHCP. Mittels DHCP hab ich es nicht hinbekommen :(. Der Grasshopper ist im Beispiel auf die IP 10.10.10.23 und der Server auf 10.10.10.1 gesetzt.

Dazu sind ein laufender NFS-Server mit einer Freigabe mit der Option no_root_squash (RTFM ;) ) und ein Rootfs im ext2 Format nötig. Dass ein solches erstellt werden soll, kann man in der Buildroot-Umgebung mittels "make menuconfig" einstellen.

Die Datei rootfs.avr32.ext2 wird an z.B. /mnt gemountet

mount -o loop rootfs.avr32.ext /mnt

Sollte man das /mnt-Verzeichnis nicht direkt freigeben wollen, ist danach der Inhalt des Verzeichnisses in das über NFS freigegebene Verzeichnis zu kopieren (hier /nfs/root):

cp -avr /mnt/* /nfs/root/

Um die eingestellte IP zu nutzen, darf die Netzkonfiguration des Rootfs nicht gestartet werden:

rm /nfs/root/etc/rc.d/S10network.sh

Danach im Terminal am U-Boot-Prompt auf dem Hopper:

nfs 11000000 10.10.10.1:/nfs/root/boot/uImage
setenv bootargs root=nfs nfsroot=10.10.10.1:/nfs/root ip=10.10.10.23:10.10.10.1::255.255.255.0::eth0:none

Zu guter Letzt: bootm Thats all  ;)

(Die absolut angegebenen Pfade beziehen sich auf meine eigene Einstellung. Mein Hopper hängt an einer eigenen Netzwerkkarte.)

Solange der Hopper das rootfs gemounted hat, kann man es neu überschreiben auf dem Server, und der Hopper hat gleich die neue Version ohne ihn neustarten zu müssen. Funktioniert natürlich nicht mit dem Kernel.


Etwas einfacher geht es das rootfs direkt in das NFS-Root zu mounten, ohne Kopiererei. Dabei (TODO: Lösung wie es auch in tieferen Verzeichnissen funktioniert) sollte beachtet werden, daß nicht nach z.B. /nfs/root/ sondern nach /nfs gemounted wird, sonst gehts (noch) nicht. Der rest bleibt gleich, nur die Pfade muessen selbstverständlich angepasst werden. Wird der Hopper neugestartet, nachdem er via nfs gebootet hat, kann der Mountpunkt nur noch durch ein restart des Servers gelöst werden, sonst kommt die Meldung, daß er busy ist. .

webmaster@mikrocontroller.netImpressumWerbung auf Mikrocontroller.net