Micro2440
Micro2440
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)
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)
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
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