Micro2440

Aus der Mikrocontroller.net Artikelsammlung, mit Beiträgen verschiedener Autoren (siehe Versionsgeschichte)
Wechseln zu: Navigation, Suche

Micro2440

Micro2440 von FriendlyARM

Das Micro2440 ist im Prinzip wie das Mini2440 nur das es keine 64/128MB Flash Variante gibt. Aufgebaut ist es als Stamp-Modul, welches meistens mit einem SDK-Bord, der Peripherie und wahlweise einem 3,5" / 7" TFT oder einen LCD2VGA Adapter kombiniert wird.

Technische Daten (Stamp Modul)

Micro2440.jpg
Dimension: 63 x 52 mm
CPU: 400 MHz Samsung S3C2440A ARM920T (Max freq. 533 MHz)
RAM: 64 MB SDRAM, 32 bit 100 MHz Bus
Flash: 64 MB / 128 MB / 256 MB / 1GB NAND Flash and 2 MB NOR Flash with BIOS
User Outputs: 4x LEDs Expansion headers (2.0mm)
Debug: 10 pin JTAG (2.0mm)
OS Support: Android, Linux 2.6, Windows CE 5 and 6

Technische Daten (SDK-Board)

Micro2440-SDK.jpg
Dimension: 180 x 130 mm
EEPROM: 1024 Byte 24C08 (I2C)
Ext. Memory: SD-Card socket
Serial Ports: 3x DB9 connector (RS232)
USB: 4x USB-A Host, 1x USB-B Device
Audio Output: 3.5 mm stereo jack
Audio Input: 3.5mm jack (mono)
Ethernet: RJ-45 10/100M (DM9000)
RTC: Real Time Clock with battery
Beeper: PWM buzzer
Camera: 20 pin Camera interface
LCD: Connector for FriendlyARM Displays (3,5" and 7") and VGA Board
Touch Panel: 4 pin
User Inputs: 6x push buttons and 1x A/D pot
Expansion header (2.0mm)
Power: 5V connector, power switch and LED

U-Boot

U-Boot aus den Quellen bauen

Leider kann der vivi-Bootlader nicht viel. Vivi unterstützt nur yaffs2 Kernel Images, daher ist es sinnvoll diesen durch den U-Boot-Bootloader auszutauschen. Ich benutze U-Boot aus dem OPENMOKO Projekt für das Micro2440 mit 256MB.

Der compilierte U-Boot-Bootloader ist zu finden unter:Datei:UBoot-256MB.bin.

Für den Anfang sollte abgewogen werden, ob der vivi-Bootloader reicht. Im Fehlerfall kann dieser per JTAG wieder eingespielt werden.

Voraussetzungen dafür ist ein Cross-Compiler z.B. der von Codesourcery.

Im ersten Schritt muss das Build-Verzeichnis angelegt werden und das git-Repository heruntergeladen werden.. Das geschieht mit den Befehlen: <c> mkdir uboot ; cd uboot git clone git://repo.or.cz/u-boot-openmoko/mini2440.git </c> Danach müssen die Source-Dateien für das micro2440 eingestellt und compiliert werden: <c> cd mini2440 export CROSS_COMPILE=arm-none-linux-gnueabi- make mini2440_config make all </c>

U-Boot Flash’en

Den Bootswitch S2 auf NOR stellen, sobald vivi erscheint "q" (in der vivi Konsole) drücken.

Damit U-Boot ab der Adresse 0x32000000 programmiert wird, muss der folgende Befehl eingeben werden: <c> load ram 0x32000000 <uboot bin file grösse in bytes> u-boot </c> Nun wartet Vivi auf die Datei. In der Shell wird das hochladen mit dem folgenden Befehl initiiert. Die Dateiübertragung erfolgt über USB. <c> sudo s3c2410_boot_usb u-boot.bin </c> Als nächstes soll das U-Boot gestartet werden. Dazu muss an die Speicherstelle gesprungen werden, an der das U-Boot programmiert wurde. Dies wird mit dem folgendem Befehl erreicht: <c> go 0x32000000 </c> Waren alle vorherigen Schritte erfolgreich, sollte nun die U-Boot Konsole angezeigt werden.(MINI2440#). Anschließend wird nun der NAND-Flash vorbereitet

Zuerst muss das NAND-Flash gelöscht werden, dies wird mit dem folgendem Befehl erreicht: <c> nand scrub </c> Danach wird die Bad-Block Tabelle erstellt, dies kann etwas Zeit in Anspruch nehmen: <c> nand createbbt </c> Damit U-Boot in das Flash geschrieben wird, muss folgender Befehl ausgeführt werden. <c> nand write.e 0x32000000 0x0 <uBoot bin grösse in hex> </c> Für das Partitionieren des Flashs dient der Befehl: <c> dynpart </c> Environment Speicher einrichten: <c> dynenv set u-boot_env </c> Enviroment Parameter sichern: <c> saveenv </c> Nachdem alle Schritte durchgeführt wurden, muss nur noch das Bord ausgeschaltet werden und S2 wieder auf NAND gestellt werden. Nach dem Einschalten sollte euch nun das U-Boot begrüßen.

Kernel/Filesystem

Kernel aus den Quellen compilieren

Jetzt steht man vor der Wahl welchen Kernel man nimmt egal ob EMDebian, Gentoo oder Android brauchen tut man ihn so oder so, die fertigen Kernel von friendlyarm.net können nur VFAT,JFFS2 daher eignen sich diese nur bedingt für ein System z.b. auf SD/USBStick oder Ext. Platte, Also ist es sinnvoll diesen sich selber zu bauen dieses ist nicht wirklich schwer.

Als erstes Besorgen wir uns den Kernel und entpacken ihn: <c>

 mkdir micro2440
 cd micro2440
 git clone git://repo.or.cz/linux-2.6/mini2440.git linux-2.6.32-rc8

</c> Als nächstes laden wir die Default Config und erstellen die .Config für das Micro2440: <c>

  cd linux-2.6.32-rc8
  CROSS_COMPILE=arm-none-linux-gnueabi- ARCH=arm make mini2440_defconfig

</c> Wenn man noch etwas ändern möchte z.b. ext3 Kernelmodule etc.: <c>

  CROSS_COMPILE=arm-none-linux-gnueabi- ARCH=arm make menuconfig

</c> Den Kernel anschließend compilieren: <c>

  CROSS_COMPILE=arm-none-linux-gnueabi- ARCH=arm make

</c> Später kann man noch die Module auf die SD-Karte kopieren: <c>

  CROSS_COMPILE=arm-softfloat-linux-gnueabi- ARCH=arm INSTALL_MOD_PATH=/mnt make modules_install

</c> Als letztes muss das Kernel Image für U-Boot vorbereitet werden d.h. aus dem vImage(für vivi) wird ein uImage für U-Boot angelegt. <c>

  cd .../arch/arm/boot
  mkimage -A arm -O linux -T kernel -C none -a 0x30008000 -e 0x30008000 -d zImage uImage

</c>

Filesystem erstellen

Als erstes brauchen wir ein RootFS dieses brauchen wir um später die Partition damit zu füllen.

emDebian

<c> mkdir armel-rootfs debootstrap --verbose --arch armel --foreign lenny armel-rootfs http://ftp.de.debian.org/debian cd armel-rootfs tar cfjv ../armel-rootfs.tar.bz2 * </c>

Gentoo

http://distfiles.gentoo.org/releases/arm/autobuilds/current-stage3/armv4tl-softfloat-linux-gnueabi/stage3-armv4tl-20100620.tar.bz2

Android

http://www.friendlyarm.net/dl.php?file=android-fs_20090825.tgz

Speichermedien vorbereiten

SD-Karte und USB Medien

Als nächstes bereiten wir ein Speichermedium vor, wir brauchen 3 Partitionen, 2x EXT2 und einmal Swap das Beispiel gilt für eine 2GB SD-Karte.

Das machen wir am besten mit fdisk in der Konsole, man kann auch gparted(Grafisch) nutzen aber komischerweise mountet dann bei mir das RootFS nicht ebenso wenn das RootFS ext3 ist, so wie ich raus gefunden habe geht das nur mit SDHC Karten also SD-Karten mit Speicher der >2GB ist. <c> fdisk /dev/<Bezeichnung der SD-Karte> </c> Der Rest ist recht einfach, einfach folgendes eingeben: dp1 np1 <enter> +20MB <enter> np2 +1800MB <enter> np3 <enter> <enter>

Danach mit l schauen ob alle 3 Partitionen erstellt wurden und mit w Speichern und fdisk beenden.

Jetzt müssen wir noch die Partitionen Formatieren(für ext3 muss noch -j in der zweiten Zeile angegeben werden): <c> mke2fs /dev/<Bezeichnung der SD-Karte>1 mke2fs /dev/<Bezeichnung der SD-Karte>2 mkswap /dev/<Bezeichnung der SD-Karte>3 </c>

BootFS/RootFS einrichten

Dieses ist bei allen Distributionen gleich als erstes kopieren wir den Kernel auf das Speichermedium. <c> mount /dev/<Bezeichnung der SD-Karte>1 /mnt cp ../linux-2.6.32-rc8/arch/arm/boot/uImage /mnt sync umount /dev/<Bezeichnung der SD-Karte>1 </c> Jetzt muss noch das RootFS erstellt werden: <c> mount /dev/<Bezeichnung der SD-Karte>2 /mnt tar xvzfop /path/to/downloaded/<RootFSfile> -C /mnt sync umount /dev/<Bezeichnung der SD-Karte>2 </c>

uBoot ENVs einrichten

So jetzt sind wir fast fertig nur das Wichtigste fehlt noch, wir müssen dem Bootlader noch sagen wo er den Kernel findet und dem Kernel wo er das RootFS findet.

Dazu drücken wir eine Taste um denn Autoboot zu unterbrechen und stellen folgendes ein: <c> setenv bootcmd mmcinit ; ext2load mmc 0:1 0x31000000 uImage ; bootm 0x31000000 setenv bootargs noinitrd mini2440=1tb rootfstype=ext2 root=/dev/mmcblk0p2 rw rootwait saveenv </c>

So das war es wen ihr alles durchgearbeitet habt könnt ihr die SD-Karte in den Slot stecken und denn Reset drücken danach sollte das Bord booten.

Tips/Tricks/Files

emDebian/Gentoo

/etc/fstab

Beispiel der /etc/fstab: Datei:Fstab.txt

/etc/X11/xorg.conf

Beispiel xorg.conf fürs 7" Display: Datei:Xorg.conf.txt

Touchscreen Calibrieren

Folgende Zeile zur /etc/X11/xorg.conf hinzufügen. <c>

Option "Calibrate" "1"

</c> Und dann noch folgendes machen: <c>

apt-get install xserver-xorg-input-evtouch
cp /usr/share/xf86-input-evtouch/empty_cursor.xbm /
cd /usr/lib/xf86-input-evtouch
sh calibrate.sh

</c>

Android

Links/Downloads

s3c2410 USB DL Tool für Linux
Crosscompiler von CodeSourcery
Bezugsquelle Watterott