Servus, ich überlege für meine nächste Bastelei (auch um meinen geistigen Horizont zu erweitern...) den "EP9302 ARM Webserver" einzusetzen. Es handelt sich hierbei um einen 200Mhz getakteten ARM9 für den es fertige Linux Images gibt, dazu hätte ich ein paar Fragen doch erstmal noch ein bissele bla,bla Kurz zu meinen Kenntnissen(neuerdings auch skillmap genannt): AVR behersche ich sehr gut AVR-GCC behersche ich sehr gut ARM noch nie angefasst. Das ganze mapping vom Speicher usw. kenne ich soo nicht. (geht beim AVR alles automatisch...) Linux Kenne ich nur als Konsole...und kann auch Kernel compiliern/patchen usw... Für Meine nächste Bastelei wollte ich eigentlich einen Atmega einsetzen. Aber ich habe erkannt das es es nicht schafft 15 Beschleunigungsvektoren im 3D Raum mit 20KHz "zu drehen", richtig oder? Da ich noch ein Spartan3-Board da habe, habe ich mir überlegt eventuell mit diesem die ganzen Berechnungen auszulagern.(Per 8Bit-Bus anbinden) Hab sowas noch nie gemacht, aber dass könnte funktionieren? Um Antwort in diesem Punkt wird gebeten. Prinzipiell fände ich so einen ARM9 auch mal trendy. Habe aber Bedenken, dass es mir zu schwierig wird. Außerdem gibts noch ein paar Sachen wo ich unsicher bin. Dies wäre folgendes: - Kann ich z.B. einfach so ein Linux-Image draufschieben und dann einen WLAN-Stick reinschieben und dann per Telnet vom Laptop aus zugreifen? - Kann ich einen USB-Stick, oder SD-karte mit FAT32 problemlos mounten und ganz "normal" unter Linux drauf zugreifen? (OK das geht sicherlich, aber gehts es von haus aus oder muss ich da noch irgendwas selber dazu programmieren???) - Kann ich z.B. einen 1GB USB-Stick anschließen und dann per Croscompiler(nennt man doch so?) ein Programm schreiben dass mir irgendeinen Eingang in eine Textdatei auf dem USB-Stick mitlogt? - Ich kann auf dem ARM ja sowohl mein Programm "direkt" programmieren und so programmieren dass es vom Kernel als normales Programm(multitasking) ausgeführt wird. Verwendet man für beides den gleichen Compiler? Da das ganze mit 20KHz ablaufen soll, wird die Echtzeitanforderung schon ein bissele härter. D.h. ich kann mir nicht vorstellen dass noch alles funktioniert wenn ich nebenher irgendwelche daten vom USB-Stick auf die SD-carte kopieren würde. Deshalb die Frage wie programmiert man auf der untersten Ebene und gleichzeitig soll Linux laufen? Muss ich einen eigenen Taskmanager schreiben der noch vor dem, des Linux-Kernels aufgerufen wird? Oder ist es möglich wie bei rt-linux das ich ein Modul nachladen kann? Am liebsten wäre es wenn ich vollen Zugriff haben könnte ohne am eigentlichen Kernel was zu ändern. Geht das? Wo gibts genau über sowas Informationen. Habt ihr ein paar Links? Angenommen ich kann nach dem rt-Linux Prinzip irgendeine Funktion echtzeitfähig ausführen lassen. Kommt dass dann aus Performancesicht genau gleich(auch Codemässig) wie wenn ich einen kompletteigenen Taskmanager schreibe der in der immer meine Funktion ausführt und ansonsten immer Linux_poll(void) startet ;-) ??????? Mit freundlichen Grüßen Ulrich
Ich bin absolut kein Linux-Experte, ich habe aber neulich mit jemandem zum Thema Linux auf dem ARM9 und Echtzeit Applikation diskutiert. (VoIP-Signal prozessing für Voice-Komprimierung und Echokompensation) Das Resultat, soweit ich es verstanden habe: Ein Task mit hoher Echtzeit-Anforderung dar bei Linux nich als Applikations-Task laufen, sondern muss in den Kernel eingbunden (compiliert) werden. Dann geht's! MfG Peter
> - Kann ich z.B. einfach so ein Linux-Image draufschieben und dann einen > WLAN-Stick reinschieben und dann per Telnet vom Laptop aus zugreifen? Das kommt auf dein Linux-Image an. Es muß halt einen Treiber für den Wlan-Stick haben, und es muß die ganze Konfiguration für's Wlan enthalten. Linux kann (meines Wissens) auch nicht aus dem Flash gestartet werden, also brauchst du einen Bootloader, der den Kernel ins RAM kopiert. Ich würde erstmal mit RS232 anfangen, um nicht unnötig viele potenzielle Fehlerquellen einzubauen. Damit kannst du auch eine Remote-Shell machen. Außerdem kannst du die auch schon vorher im Bootloader ansprechen, um Debug-Ausgaben zu schreiben. > - Kann ich einen USB-Stick, oder SD-karte mit FAT32 problemlos mounten > und ganz "normal" unter Linux drauf zugreifen? (OK das geht sicherlich, > aber gehts es von haus aus oder muss ich da noch irgendwas selber dazu > programmieren???) Sofern es einen Treiber für den USB-Controller gibt, sollte das funktionieren. Du mußt nur bei der Kernelkonfiguration die dafür nötigen Treiber aktivieren. > - Kann ich z.B. einen 1GB USB-Stick anschließen und dann per > Croscompiler(nennt man doch so?) ein Programm schreiben Du schreibst das Programm nicht per Crosscompiler, sondern übersetzt es damit. Schreiben tust du's eher im Editor. > dass mir irgendeinen Eingang in eine Textdatei auf dem USB-Stick > mitlogt? Ja. > - Ich kann auf dem ARM ja sowohl mein Programm "direkt" programmieren > und so programmieren dass es vom Kernel als normales > Programm(multitasking) ausgeführt wird. Verwendet man für beides den > gleichen Compiler? Was meinst du mit "direkt"? Meinst du ohne Betriebssystem? Das sollte mit dem gleichen Compiler gehen. Du mußt allerdings ein Linkerskript für die Variante ohne Betriebssystem schreiben. > Da das ganze mit 20KHz ablaufen soll, wird die Echtzeitanforderung > schon ein bissele härter. Evtl. mußt du eine echtzeitfähige Kernelversion verwenden. > D.h. ich kann mir nicht vorstellen dass noch alles funktioniert wenn > ich nebenher irgendwelche daten vom USB-Stick auf die SD-carte kopieren > würde. Kommt drauf an. Wenn deine Kopiererei eine niedrige Priorität hat, läuft sie nur, wenn dein Echtzeittask gerade nix tut. > Deshalb die Frage wie programmiert man auf der untersten Ebene und > gleichzeitig soll Linux laufen? Linux ist schon die unterste Ebene, wenn du nicht gerade mit Virtualisierung arbeiten willst ;-) Du kannst natürlich einen Kerneltreiber schreiben. > Am liebsten wäre es wenn ich vollen Zugriff haben könnte > ohne am eigentlichen Kernel was zu ändern. Geht das? Was meinst du mit "ohne am eigentlichen Kernel was zu ändern"? Willst du auch kein Modul schreiben? Dann geht es nicht. Du kannst natürlich auch was anderes als Linux nehemen und das Programm ohne Betriebssystem schreiben. Als Scheduler kannst du z.B. FreeRTOS verwenden. Allerdings mußt du dann auch alle Treiber selbst schreiben.
> Muss ich einen eigenen Taskmanager schreiben der noch vor dem, > des Linux Kernels aufgerufen wird? Nein. Gibt es schon, zum Bleistift RTAI. Das ist eine Art Realtime Scheduler welcher eine Reihe von Tasks verwaltet und vor dem Linuxkernel sitzt (den wiederum verwaltet RTAI als Task mit der niedrigsten Priorität).
Vielen Dank für die Antworten, Ich habe zwar den Schalplan noch nicht genau gelesen, aber ich denke das ich zusätzliche SPI-Devices anschließen kann. Angenommen ich will im Kernel-Space oder auch User-Space auf ein Device zugreifen, wie geht das dann? Eventuell überträgt ja gerade irgendein anderes Modul vom Kernel was an die SD-Karte? Müsste ich in diesem Fall einfach die komplette Kontrolle vom SPI an mich reißen und das bisherige Modul welches über SPI, mit der SD-Karte kommuniziert so umschreiben das die Daten über mein Modul auf die Karte umgeleitet werden?
Das lässt sich so nicht einfach beantworten, dazu müsstest du wissen, ob du in deinem Linux eine Art Lowlevel SPI Treiber hast, oder ob dein SD-Treiber direkt auf der SPI-Schnittstelle sitzt.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.