|
|
Mini2440Das Mini2440 ist ein ARM-Board mit s3c2440 System on Chip von Samsung. Das Board bietet:
[Bearbeiten] SoftwareAls das passende Entwicklungswerkzeug ist ein Linux-Rechner mit passendem Cross-Compiler sowie ein paar Tools vorgesehen. Was wirklich benötigt wird:
Empfehlenswert ausserdem noch:
[Bearbeiten] Vorbereitungen am/mit dem BoardGanz wichtig ist es, eine gute Spannungsversorgung zu verwenden. Es kam anscheinend schon öfter vor, dass kleine Spannungseinbrüche das Board aus dem Gleichgewicht bringen. Ich verwende normalerweise das mitgelieferte Netzteil oder ein 5V/2A Schaltnetzteil, funktionieren beide einwandfrei. Gerade das grosse, 7", Display braucht ein starkes Netzteil.
[Bearbeiten] Verbindung zum PCUm vernünftig arbeiten zu können, braucht man auf jeden Fall diese Kabel:
Einen Zugriff auf die Konsole hat man - nach Anpassung der IP - über Telnet sowie über die serielle Konsole. Die serielle Konsole ist in der Standardkonfiguration aktiviert und sollte auch während des Entwickelns immer aktiv sein - so verhindert man ein ungewolltes Ausperren. [Bearbeiten] NetzwerkEntweder klickt man sich quer durch die chinesische/japanische Software und stellt diese auf Englisch um, oder aber man klickt sich blind zu der Stelle, an der man IP Adresse, Gateway und Netzmaske angeben kann. Etwa genauso einfach sieht es über die Konsole aus. Es ist darauf zu achten, was bisher vielleicht schon in der /etc/resolv.conf steht. Das lässt sich einfach mit cat /etc/resolv.conf ansehen. Wenn diese bereits den richtigen Inhalt hat, kann man die echo "nam...-Anweisung weglassen. $ ifconfig eth0 192.168.0.55 netmask 255.255.255.0 $ route add default gw 192.168.0.1 $ echo "nameserver 192.168.0.1" > /etc/resolv.conf [Bearbeiten] BenutzeraccountsLinux legt wie alle Unix-artigen Betriebssysteme sehr grossen Wert auf eine ordentliche Benutzer- und Rechteverwaltung. [Bearbeiten] Anlegen eines neuen BenutzeraccountsIch gehe davon aus, dass ein Image mit busybox auf dem Board installiert ist. Wenn das Image von FriendlyARM installiert ist, ist das der Fall. Ein Auszug aus der Manpage von busybox: adduser
adduser [ OPTIONS ] user_name
Adds a user to the system
Options:
-h DIR Assign home directory DIR
-g GECOS Assign gecos field GECOS
-s SHELL Assign login shell SHELL
-G Add the user to existing group GROUP
-S create a system user (ignored)
-D Do not assign a password (logins still possible via ssh)
-H Do not create the home directory
Heisst um einen Benutzer banana_joe mit dem Heimatverzeichnis /home/banana_joe anzulegen, muss man folgendes als root eingeben: $ adduser -h /home/banana_joe -s /bin/sh banana_joe $ passwd banana_joe adduser legt den Benutzer an, passwd vergibt ein Passwort. [Bearbeiten] Übertragen von Daten/Programmen in den Flash-SpeicherDas übertragen gestaltet sich auf ganz unterschiedliche Weise. Aus Gründen der Einfachheit werde ich hier nur die sinnvollsten/einfachsten/schnellsten Wege beschreiben. Andere Möglichkeiten wären noch lrzsz, USB und JTAG. Wer zuviel Zeit hat, kann sich ja auch ein eigenes Protokoll auf TCP/IP Ebene basteln oder den Kristallspeicher erfinden ;) Wenn man eine Datei übertragen hat, muss man sich vergewissern, dass diese auch Ausführrechte besitzt, wenn sie ein Programm oder ein Ordner ist. Die Lese- und Schreibrechte müssen ebenfalls richtig gesetzt sein. Normalerweise stimmt dies alles so wie es ist, aber manchmal muss man ein wenig nachhelfen. Wenn sich ein Programm nicht ausführen lässt, oder man nicht in einen Ordner wechseln kann, fehlen die Rechte zum Ausführen. Geändert wird das so: $ chmod +x <datei/ordner> Da hier aber nicht die Unix-Rechte erklärt werden sollen, verweise ich hierauf [Bearbeiten] httpFür diese Methode muss natürlich das Netzwerk eingerichtet sein. Man braucht auf einem PC im Netz einen laufenden Werbserver, auf den man die zu übertragenden Dateien legt. Nun kann man diese in ein Verzeichnis seiner Wahl "herunterladen": $ cd /tmp $ wget http://10.2.5.29/datei [Bearbeiten] ftpSobald auf dem Board ein FTP-Server läuft, kann man sich "ganz normal" mit einem FTP-Client (zum Beispiel gftp oder ncftp) verbinden und die Dateien hochladen. Ebenso kann man sich auch vom Board auf einen FTP-Server verbinden. Nennenswerte Programme sind z.B. ftp für die Linux-Konsole, welches im FriendlyARM Image bereits enthalten ist oder der ncurses-basierende Client ncftp. Allerdings sollte man sich für ncurses-Programme per Telnet oder SSH einloggen, da die serielle Konsole nur rudimentäre Terminal-Emulation unterstützt und die Bildschirmausgabe nicht gerade schön wirkt. [Bearbeiten] scp/sshDazu muss zuerst einmal ein SSH Server auf dem Board laufen. openSSH ist dafür die erste Wahl. Mit dropbear gibt es einige Probleme, da man für SCP auch noch die SCP Binary von openSSH braucht. Sobald der ssh server läuft, ist alles ganz einfach: $ scp datei user@ziel:/pfad Bei einem Board mit der IP 10.0.0.69 und dem User root wäre das die Befehlszeile: $ scp datei root@10.0.0.69:/root ... und die Datei datei landet im Heimatverzeichnis von root Um nicht jedes mal das Passwort eingeben zu müssen, lohnt es sich SSH so zu konfigurieren, dass es mit Key-Files läuft. [Bearbeiten] ToolchainToolchains gibt es im Netz und auf der CD/DVD zum Board mehrere fertig übersetzte - natürlich lässt sich die Toolchain auch selbst compilieren. Das Risiko beim selbst compilieren einer Toolchain liegt darin, dass man eventuell einen fehlerhaften Compiler produziert. Gründe hierfür sind z.B.:
[Bearbeiten] old ABI / new EABI ?ABI steht für Application Binary Interface, also eine Art "Standard" wie das compilierte Programm, die Binärdatei, auszusehen hat. Die ABI ist schon etwas älter und wurde von der EABI (Embedded Application Binary Interface) abgelöst. Da nahezu jede verfügbare Toolchain auf der EABI aufbaut, würde ich diese auch nutzen. Alte, für die ABI, compilierte Programme, lassen sich mit der Kernel-Unterstützung zum Ausführen von ABI Programmen trotzdem noch verwenden. Durch das verwenden der EABI entstehen normalerweise keine unüberwindbaren Hürden, beim compilieren von älteren Quellcodes. Jedenfalls nicht durch den Unterschied ABI/EABI. [Bearbeiten] Kernel FPE / softfloat ?Irgendwann stolpert jeder, der mit ARM-CPUs und Linux arbeitet über mehrere Fragen.
Was ist softfloat/FPE Was ist schneller Da bei softfloat die Gleitkomma-Operationen vom Compiler soweit zerstückelt und wieder zusammengesetzt werden, dass gar keine Kommas mehr nötig sind, ist das in dem meisten Fällen flotter. Das schnellste, ist natürlich eine Hardware-FPU, die es aber auf dem mini2440 nicht gibt. Kann man beides nutzen? Also am besten eine FPE auswählen und mit einer softfloat-Toolchain compilieren. Das spart Zeit und Kopfzerbrechen über Invalid Opcode/Segfaults usw. ;) [Bearbeiten] Toolchain aufsetzenJenachdem, welche Toolchain man einsetzt, kann es sein, dass man den Compileraufruf anpassen muss. Wenn man eine Cross Toolchain installiert hat und nur gcc auf der Kommandozeile eintippt, wird man höchstwahrscheinlich beim lokalen gcc, keinem Cross-Compiler, landen. Überprüfen kann man das mit $ which gcc Die FriendlyARM Toolchain macht es uns da sehr leicht, sie verwendet aussagekräftige Namen für ihre Programme. Bei ihr wäre der gcc Aufruf der: $ arm-linux-gcc oder $ arm-none-linux-gnueabi-gcc Ich gehe im kompletten Artikel davon aus, dass man eine funktionierende Toolchain installiert hat, welche über arm-linux-... zu erreichen ist. Entweder passt man die gcc-Aufrufe von hier an, oder man kann sich auch symbolische Links anlegen. Zum Schluss sollte das dann ungefähr so aussehen, vom bin-Pfad der Toolchain aus! $ ls -al /usr/local/arm/4.3.2/bin/ ... lrwxrwxrwx 1 root root 25 2010-02-25 07:15 arm-linux-ld -> arm-none-linux-gnueabi-ld ... Ich selbst arbeite mit der FriendlyARM-Toolchain, werde mich hier also meistens auf diese beziehen, ausser anders vermerkt. [Bearbeiten] FriendlyARMHier als ARM-Linux-GCC zu finden. Entpackt verbraucht diese Toolchain ca. 295MB. Mit ihr liessen sich bei mir bereits der Kernel, uboot, sowie zahlreiche Programme kompilieren. Zuerst wird die Toolchain an die richtige Stelle entpackt, der Pfad mit angegeben und dann ist sie auch schon bereit.
Dieses Kommando sieht auf den ersten Blick etwas nach Dateisystem-Apokalypse aus, ist allerdings lage nicht so wild. Die Option -C / sagt, dass direkt ins Wurzelverzeichnis entpackt werden soll, daher benötigt man für diesen Schritt root-Rechte. Die FriendlyARM-Toolchain ist so aufgebaut, dass sie damit nach /usr/local/arm/4.3.2/ entpackt wird, unser Ziel :) $ tar xvfj arm-linux-gcc-4.3.2.tar.gz -C / Wenn wir das nun so haben, müssen wir natürlich auch noch sagen, wo er den Compiler findet. Dazu öffnet man am besten seine "autorun-Datei" der Shell. In der Konsole ganz einfach mit vim/nano/etc zu erreichen. $ vim /home/user/.bashrc Dort tragen wir dann ganz ans Ende dies ein: export PATH=$PATH:/usr/local/arm/4.3.2/bin Kaum gespeichert, startet man eine neue shell (Konsole) und überprüft ob die Pfade stimmen. Wenn /usr/local/arm/... im Pfad enthalten ist, müsste alles stimmen. $ echo $PATH Tippt man nun nur arm- und drückt zweimal die Tabtaste, so müsste eine ellenlange Liste mit Programmen wie z. B. arm-linux-gcc oder arm-linux-ld erscheinen. $ arm-linux-gcc -v [Bearbeiten] codesourcerycodesourcery arm-none-linux-gnueabi [Bearbeiten] buildrootVon http://www.buildroot.net das letzte stable Release holen, mini-2440 wird unterstützt. Der Build dauert zwar einige Zeit, aber nacher kann man sich an X11 erfreuen. [Bearbeiten] PTXdistPTXdist ist ähnlich wie BuildRoot und unterstützt das Mini2440 seit der Version 2011.05.0. PTXdist verwendet Barebox(UBoot-V2) als Bootloader. Die Projektseite zu dem Mini ist unter http://www.oselas.org/oselas/bsp/pengutronix/mini2440_bsp_en.html zu finden. Wichtige Links:
[Bearbeiten] Cross CompilingSobald die Toolchain richtig aufgesetzt ist kann man anfangen, seine Programme zu übersetzten. Hier folgt nur eine kurze Beschreibung, wer sowas genauer wissen will, sollte sich auf Seiten wie diesen umsehen:
Ausserdem findet man zu vielen embedded-nutzbaren Programmen direkt ein Cross-Compiling Howto mit ein wenig google. Ob diese nun für ARM, AVR32, PPC, MIPS, ... sind, ist im Grunde egal, da man ja meistens nur die Architektur anpassen muss. Es gibt mehrere Möglichkeiten. Die erste ist der direkte Aufruf vom Compiler oder mittels eines "festen" Makefiles. Die zweite, wahrscheinlich Häufigste, ist das ausführen eines configure-Scriptes bevor der make-Vorgang gestartet wird.
Dazu ein einfaches Hello-World Programm:
Compiliert wird das Programm ganz einfach so: $ arm-linux-gcc <name.c> -o <name> Danach wird die Datei <name> an das Board übertragen. Sobald <name> auf dem Board ist, kann es ausgeführt werden: $ ./<name> Eventuell fehlen die Rechte: $ chmod +x <name>
Hier sieht es schon ein klein wenig schwieriger aus, ist es aber eigentlich nicht. Normalerweise, aber nicht immer, sieht das compilieren eines Programms für das mini2440 so aus: $ HOST=arm-linux ARCH=arm ./configure --build=arm-linux --your-options $ make Man muss dem configure-Script lediglich angeben, für welche Architektur das Makefile konfiguriert werden soll und welchen Compiler er dafür nehmen soll. [Bearbeiten] Linux-KernelDen Kernel-Quellcode besorgt man sich am besten den Kernel-Fork von buserror. Verzeichnis: /mnt/mini2440 CHOST/CROSS-COMPILE: arm-softfloat-linux-gnueabi Starten wir damit, den Quellcode zu laden: $ cd /mnt/mini2440 $ git clone git://repo.or.cz/linux-2.6/mini2440.git linux-2.6.32-rc8 Dann ab ins Kernel-Verzeichnis und den Kernel mit den Defaults konfigurieren: $ cd linux-2.6.32-rc8 $ CROSS_COMPILE=arm-softfloat-linux-gnueabi- ARCH=arm make mini2440_defconfig Wenn man noch etwas manuell ändern möchte: $ CROSS_COMPILE=arm-softfloat-linux-gnueabi- ARCH=arm make menuconfig Den Kernel anschließend kompilieren: $ CROSS_COMPILE=arm-softfloat-linux-gnueabi- ARCH=arm make Die Module bekommen wir wie folgt nach /mnt/mini2440/lib/modules installiert: $ CROSS_COMPILE=arm-softfloat-linux-gnueabi- ARCH=arm INSTALL_MOD_PATH=/mnt/mini2440 make modules_install Wenn wir mit u-boot arbeiten, dann benötigen wir das zImage in /mnt/mini2440/kernel-2.6.32-rc8/arch/arm/boot, um daraus mittels mkimage (Siehe uboot) ein uImage zu erstellen.
mini2440=[0..9][t][b] [0..9] bestimmen die Display-Timings (varieren je nach verwendetem Kernel)
[t] Touchscreen ist vorhanden; [Bearbeiten] root-fsUm ein eigenes Root-Filesystem zu compilieren, gibt es mehrere Möglichkeiten. Die einfachsten sind Cross-Umgebungen wie buildroot und openembedded. [Bearbeiten] DebianAuch relativ einfach ist es, sich ein fertig compiliertes debian-arm zu installieren. Wenn man das Debian einmal auf seiner SD-Karte laufen hat, ist es kein Problem mehr, alles wie gewohnt mit apt zu installieren usw. usw. Ich habe auf meinem mini2440 seit einiger Zeit Debian am Laufen, habe aber sämtliche Init-Scripte durch eigene ersetzt, welche um einiges flotter laufen. Ebenso verzichte ich auf sysvinit und damit aber auch auf sehr nützliche Tools/Funktionen, wie die runlevels und shutdown oder reboot. Diese Funktionen müssen auch von meinen eigenen Scripten übernommen werden. Dafür läuft es um einiges schneller. Hier eine Anleitung für ein AT91-Linux Board mit Debian. Diese kann fast 1:1 übernommen werden. Mit X11, Lighttpd, PHP, Python, mc, vim, mpd, alsa, gcc, ... (und auch apache als leidige Abhängigkeit von PHP) braucht mein Debian etwa 550MB auf der SD-Karte. Schon ein ordentlicher Brummer, aber egal, es bootet mit eigenen Scripten innerhalb von 15 Sekunden. [Bearbeiten] GentooOoooh wer daran denkt, hat einfach nur zuviel Zeit. Gentoo in allen Ehren, aber allein PHP zu compilieren dauert gut 4 Stunden... danach habe ich es aufgegeben. Wer Gentoo installieren kann, wird sich auf dem Mini2440 auch nicht schwerer tun, als auf einem PC. Der Unterschied besteht nur darin, dass man die Stage auf SD Karte packen muss, am normalen Rechner natürlich, und dort dann schon die wichtigsten Einstellungen vornehmen muss. Mit Portage und den ganzen Dev-Files ist Gentoo ein riesen Gebilde für so ein schwachbrüstiges Board. Eine 4GB SD-Karte ist das Minimum. Außer man bootet zuerst in den Flash und dann chrootet man auf ein Gentoo auf einer USB-Festplatte. uboot kann das, soweit ich weiß, nicht. [Bearbeiten] sys-fsSysfs ist ein virtuelles Dateisystem, welches seit dem Linux Kernel 2.6. zur Verfügung gestellt wurde. Der Kernel stellt dabei Konfigurationen, Informationen über Vorrichtungen und Treiber im sogenannten userspace zur Verfügung. Dies Bedeutet einfach, dass Informationen/Geräte an einer festgelegten Stelle im Dateisystem stehen und ausgelesen oder beschrieben werden können. Über einige Dateien in diesem Dateisystem können GPIOs und z.B. auch LEDs angesteuert werden. [Bearbeiten] FramebufferDer Framebuffer ist von Haus aus im FriendlyARM Kernel aktiviert und ohne ihn lässt sich im Linux keine Ausgabe auf dem Display realisieren. Er ist unter /dev/fb0 zu erreichen. Eine Textausgabe geht ganz einfach über das Terminal, welche auf ihn gemappt ist: $ echo "hello world" > /dev/tty1 Man kann dem Framebuffer diverse Argumente mitgeben, die die Ausgabe auf dem Display beeinflussen. Diese werden über fbcon=... angeben. Man kann auch mehre Argumente angeben, das sähe zum Beispiel so aus: root=/dev/mmcblk0p1 console=ttySAC0 fbcon=rotate:1 fbcon=scrollback:0 Alternativ können mehrere fbcon-Parameter auch durch Komma getrennt werden: ... fbcon=rotate:1,scrollback:0 Der Scrollback-Buffer ist auf diesem Display eigentlich nicht nötig, da man hier auf dem Mini2440 auf keiner Konsole mit Tastatur usw. arbeitet. Daher schaltet man ihn mit fbcon=scrollback:0 ab, das spart gegenüber dem Standardwert 32kB RAM. Für die FB-Konsole gibt es einige weitere Möglichkeiten und viele Optionen lassen sich zur Laufzeit ändern. Hier habe ich nur das Wichtigste beschrieben. Wer darüber mehr erfahren will, sollte sich im Kernel-Quellcode die Datei Documentation/fb/fbcon.txt ansehen. [Bearbeiten] Font wählenDie voreingestellte VGA8x16 Font ist etwas groß und es passt nicht allzuviel Text auf das Display. Die am besten lesbare, kleine Schrift ist die Mac6x11 Font. In menuconfig folgendes einstellen:
-> Device Drivers
-> Graphics support
-> Console display driver support
-> Select compiled-in fonts
<*> Framebuffer Console support
[*] Map the console to the primary display device
[*] Framebuffer Console Rotation
[*] Select compiled-in fonts
[ ] VGA 8x8 font
[ ] VGA 8x16 font
[*] Mac console 6x11 font (not supported by all drivers)
[ ] console 7x14 font (not supported by all drivers)
[ ] Pearl (old m68k) console 8x8 font
[ ] Acorn console 8x8 font
[ ] Mini 4x6 font
[ ] Sparc console 8x16 font
[ ] Sparc console 12x22 font (not supported by all drivers)
[ ] console 10x18 font (not supported by all drivers)
Werden mehrere Fonts eincompiliert, können sie so ausgewählt werden: (Kernel-Commandline) ... fbcon=font:xxxx Mögliche Werte für xxxx sind:
Bei machen Fonts steht in der Kernel-Menuconfig not supported by all drivers. Dies erklärt sich so: Note, not all drivers can handle font with widths not divisible by 8, such as vga16fb. kernel-src/Documentation/fb/fbcon.txt Manche Treiber können nicht mit Fontbreiten/-höhen umgehen, welche nicht durch 8 teilbar sind. Da aber z.B. die MAC6x11 Font auch nicht durch 8 teilbar ist und das Mini2440 das anzeigen kann, gehe ich davon aus, dass alle funktionieren. [Bearbeiten] RotationUm das Display zu "drehen" folgendes einstellen:
-> Device Drivers
-> Graphics support
-> Console display driver support
-> Framebuffer Console support
[*] Framebuffer Console Rotation
Also Kernel-Parameter im Bootloader dann einstellen: fbcon=rotate:x Für x sind Werte von 0 bis 3 gültig. Jeweils wird um 90° im Uhrzeigersinn weitergedreht. Hinweis: [Bearbeiten] BootloaderDie beiden verfügbaren Bootloader sind vivi (ein "standard-s3c24xx-Linux-Bootloader") und u-boot, der Bootloader für embedded-Systeme schlechthin ;) Gemeinsam haben sie eigentlich nur, dass sie a) funktionieren und b) einen Linux-Kernel laden können. WARNUNG: An einem Bootloader herumzuspielen, kann sehr böse ausgehen, etwa mit dem unbootbar-mach-Vorgang, der durch zu wenig Nachdenken ausgelöst wird. Das mini2440 lässt sich zwar jederzeit per JTAG mit LPT-Adapter zurückholen, ist doch aber eigentlich unnötig ;) [Bearbeiten] ubootDer Bootloader uboot wurde von "buserror" soweit an das mini2440 angepasst, dass er mehr oder weniger läuft. Für die verschiedenen Boards gelten also auch leicht verschiedene Anweisungen um uboot ins Wasser zu bekommen. Das git und die Seite von "buserror" ist hier zu finden. Boards:
Den u-boot-Fork von buserror laden wir am besten mit git. Weiterhin benötigen wir einen Cross-Compiler (Siehe oben). Die letzte mir bekannte Version des GCC mit dem sich das "U-Boot" kompilieren lässt ist 4.3.4. Verzeichnis: /mnt/mini2440 CHOST/CROSS-COMPILE: arm-softfloat-linux-gnueabi Starten wir damit, den Quellcode zu laden: $ cd /mnt/mini2440 $ git clone git://repo.or.cz/u-boot-openmoko/mini2440.git u-boot Dann ab ins Source-Verzeichnis und mit den Defaults für das Mini2440 konfigurieren: $ cd u-boot $ CROSS_COMPILE=arm-softfloat-linux-gnueabi- make mini2440_config Wenn man noch etwas manuell ändern möchte, dann die Datei include/configs/mini2440.h bearbeiten, z. B. für das Mini2440-256MB: #define USE_920T_MMU 1 //#define CONFIG_USE_IRQ 1 /* Needed for USB device! */ (CONFIG_USE_IRQ auskommentieren, damit das Mini2440 u-boot aus dem RAM ausgeführt werden kann. Leider kann man dann im "U-Boot" kein USB-Gerät mehr ansprechen, um ggfl. mal wieder aufzutauchen). $ CROSS_COMPILE=arm-softfloat-linux-gnueabi- make
mkimage -A arm -O linux -T kernel -C none -a 0x30008000 -e 0x30008000 -d path-to/zImage path-to/uImage Jetzt haben wir ein von u-boot ausführbaren Linux-Kernel. [Bearbeiten] Multimedia[Bearbeiten] Abspielen von Audio-DatenMit dem FriendlyARM-Image gibt es zwei Möglichkeiten Audio-Dateien abzuspielen. Die andere ist, die Datei auf der Konsole mit madplay dateiname.mp3 abzuspielen. [Bearbeiten] MPD - der Music Player DaemonMit einem eigenen Image oder wenn man sich alles von Hand compilieren will ist der Music Player Daemon ein genialer Musik-Player. Er lässt sich durch sehr sehr viele verschiedene Clients steuern und braucht dabei nahezu kaum Rechenleistung. Mit gerade mal etwa 100 Zeilen Code lässt sich eine einfach zu nutzende Client-Lib in C programmieren um dann seine eigenen Clients zu schreiben. Damit lässt sich der MPD durch so ziemlich jedes Ereignis an einem Rechner steuern. hier habe ich einen Artikel erstellt, der das wichtige dafür beschreibt. [Bearbeiten] Aufnehmen von Audio-Daten[Bearbeiten] Abspielen von Video-DatenIch selbst habe noch keinen Player, bis auf den vom originalen Image mit Qtopia gesehen/compiliert, welcher Filme einigermaßen flüssig abspielt. Mein Ansatz momentan ist, den MPlayer mit fbdev, directfb und sdl mit Framebuffer Ausgabe direkt auf den Framebuffer schreiben zu lassen. Allerdings habe ich damit bisher nur sehr sehr magere Ergebnisse gehabt. [Bearbeiten] Kamera-Interface[Bearbeiten] HardwareNahezu alles ist über die verschiedenen Header auf dem Board zu erreichen [Bearbeiten] Pinouts
[Bearbeiten] SteckverbinderDigi-Key:
[Bearbeiten] onboard HardwareSobald man mal anfangen möchte, sich mit der Hardware auseinanderzusetzen, sollte man natürlich auch wissen wie, was und wo dran. ... an welchem EINT war ... Low oder High aktiv? ... [Bearbeiten] UARTDie S3C2440 besitzt insgesamt drei unabhängige UARTs. Die Spannungspegel der Rx und Tx Pins sind etwas verwirrend. Auf dem Stecker liegen 5V an, doch das Datenblatt sagt nicht, ob die Rx und Tx Pins auch 5V-Tolerant sind. Daher sollte man das ausschliessen. Ein Spannungsteiler aus 3k3 und 2k2 an der Rx-Leitung vom Prozessor sollte das Problem beheben, solange der Empfänger an der Tx-Leitung 3.3V noch als H-Signal versteht.
Über die Ansteuerung auf Hardwareebene braucht man sich, solange man ein Betriebssystem verwendet, keine Gedanken zu machen. Unter Linux sind die drei UARTs über ttySAC0, ttySAC1 und ttySAC2 zu erreichen. [Bearbeiten] LEDsWenn der Kerneltreiber für die LEDs mit eincompiliert wurde, ist es ein leichtes, die LEDs mit einer kleinen Hand voll C-Zeilen anzusprechen. Man öffnet die Gerätedatei und mittels ioctl() schreibt man die Werte in die Gerätedatei. Der Aufruf von ioctl sieht so aus:
Also muss man um zum Beispiel LED0 anzuschalten für AN/AUS 1 angeben und für LED_NUMMER die 0. Dafür habe ich im Abschnitt C-Code zwei Beispiel-Funktionen geschrieben. Die erste erwartet AN/AUS und LED_NUMMER als Argument, die Zweite erwartet eine Bitmaske, was mir persönlich doch besser gefällt ;) [Bearbeiten] C-Code
[Bearbeiten] LED-sysfsBei aktiviertem sys-fs Kerneltreiber für LEDs, kann man diese im Verzeichnis '/sys/class/leds/' finden und ansteuern. cd /sys/class/leds/ # wechselt in den Ordner ls -lsa # listet alle Vorhandenen LEDs auf echo 1 > led4/brightness # LED AN echo 0 > led4/brightness # LED AUS # oder echo 1 > /sys/class/leds/led4/brightness # LED AN echo 0 > /sys/class/leds/led4/brightness # LED AUS [Bearbeiten] I2C[Bearbeiten] i2ctoolsDie i2ctools sind Linux-Userspace Programme, welche dafür gedacht sind, auf einfache Weise auf der Konsole mit I2C Geräten zu kommunizieren. [Bearbeiten] 24xx EEPROMs[Bearbeiten] Port-Expander[Bearbeiten] PCF8574 / PCF8574aEinen PCF8574 anzusteuern ist sehr einfach. Mit den i2ctools kann man damit erste Tests machen um zu sehen, ob er funktioniert. Der Port-Expander wird mit den 3.3V versorgt, welche das Board liefert, SDA und SCL natürlich ebenfalls anschliessen. Ich habe alle drei Adress-Pins auf L gelegt und erhalte von i2cdetect so die Adresse 0x38. [Bearbeiten] SPI[Bearbeiten] PWM[Bearbeiten] onboard buzzer[Bearbeiten] ADC[Bearbeiten] TouchscreenWenn der Kernel-Treiber installiert ist, kann der Touchscreen wie z. B. jede Maus über das event-Interface angesprochen werden. Normalerweise liegt der Touchscreen auf /dev/input/event0. Diese Gerätedatei muss man auch der tslib angeben. [Bearbeiten] LCD BacklightWenn der Kernel-Treiber installiert ist, kann die Hintergrundbeleuchtung des Displays einfach über die entsprechende Geräte-Datei ein- bzw. ausgeschaltet werden. # echo 1 > /dev/backlightausschalten: # echo 0 > /dev/backlight [Bearbeiten] onboard PotiHierzu muss wieder der Kerneltreiber mit eincompiliert sein, damit man das Gerät /dev/adc hat. Im FriendlyARM-Kernel ist der Treiber fest mit drin. Die Funktion getpoti() liest in einer Schleife mehrmals den Potiwert ein und bildet einen Mittelwert, der zurückgegeben wird. Die Anzahl der Werte, aus denen der Mittelwert gebildet wird, wird mit dem #define LOOPs angegeben. [Bearbeiten] C-Code
[Bearbeiten] GPIODa der S3C2440 über sage und schreibe 130 GPIOs verfügt, mit diversen Funktionen, wie I2C, PWM, ..., das setzen der "Drive Strength" (maximaler Strom an machen Pins), ... ist das Ganze nicht mehr so einfach wie bei einem AVR. Der Bastler sollte hier schon genau wissen was er will vorallem das Datenblatt zu Rate ziehen. Die Funktionen und Register des Chips sind ab Seite 274 (Kapitel IO-Ports) zu finden. Die elektrischen Daten sind ab Seite 554 zu finden. [Bearbeiten] C-Code für die onboard-ButtonsHierfür wird wird der Kerneltreiber benötigt. Im FriendlyARM-Kernel ist dieser fest mit drin. Wenn die Buttons eingelesen werden, erhält man für jeden nicht gerdrücken Buttons 0x30 und für jeden gedrückten Button 0x31. Die Funktion liest die Buttons ein und vergleicht den Wert, sobald 0x31 kommt, ist sie beendet. Die Buttons sind von 0 bis 5 nummeriert.
[Bearbeiten] GPIO-sysfsBei aktiviertem sys-fs Kerneltreiber für GPIOs, kann man diese im Verzeichnis '/sys/class/gpio/' finden und ansteuern. Eine gute Erklärung ist dazu hier zu finden. [Bearbeiten] Real Time ClockFür die Real Time Clock, welche fest im Prozessor integriert ist, gibt es einen Kerneltreiber. Lesen/Setzen lässt sich sich sehr einfach mit dem Tool hwclock. [Bearbeiten] BeispielprogrammeHier habe ich ein paar kleine Beispielprogramme im Quellcode hochgeladen.
[Bearbeiten] Andere Betriebssysteme[Bearbeiten] uCos2[Bearbeiten] Windows CE[Bearbeiten] FreeRTOS[Bearbeiten] emdedian[Bearbeiten] Software mit Betriebssystem
[Bearbeiten] Software ohne Betriebssystem[Bearbeiten] Entwicklungsumgebung[Bearbeiten] Beispiele[Bearbeiten] Wo kaufen?Zu beziehen ist das Board entweder über Ebay, meist aus China, oder bei Watterott. [Bearbeiten] Eigene Displays an das Mini anschließen
[Bearbeiten] Links und Quellen[Bearbeiten] Howtos[Bearbeiten] Repositories[Bearbeiten] Youtube und ähnliche |