Dieser ArtikelBenutzerSuche |
AVR32 Grasshopper
[bearbeiten] Über das BoardAVR32-Board, ab 85 Euro (Version ohne CD) im Mikrocontroller.net-Shop erhältlich. Technische Daten:
[bearbeiten] Ressourcen
[bearbeiten] Speicherlayout
[bearbeiten] Austausch von Dateien mit dem BoardEs 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-SpeichersDie 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 LinuxZunä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 LinuxAus 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
[bearbeiten] Booten via NFSMan 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.
|