2009-06-02 7 views
15

Als eine Art Gegenteil zu dieser Frage: "Is low-level embedded systems programming hard for software developers" Ich möchte um Rat fragen für den Übergang von der Low-Level-Embedded-Systeme zur Programmierung für erweiterte Systeme mit OS, insbesondere Embedded Linux.Wie komme ich von Mikrocontrollern zu Embedded Linux?

Ich habe meist mit kleinen Mikrocontroller-Hardware und Software gearbeitet, aber jetzt nur Software. Meine Ausbildung besteht hauptsächlich aus Hardware und eingebetteten Dingen. Ich hatte nicht viele Programmierkurse und weiß nicht viel über Software-Design oder OO-Codierung.

Jetzt habe ich ein großes Projekt in meinen Händen, das in Embedded Linux getan werden wird. Ich habe große Probleme damit, Dinge zu entwerfen und Dinge überschaubar zu halten, weil ich das vorher nicht wirklich nötig hatte. Auch das Verwenden von Multitasking- und Blockierungsaufrufen anstelle des "parallelen" Tasks von der Hauptfunktion ist wie eine andere Welt.

Welche Erfahrungen haben Sie beim Übergang von Low-Level-Programmierung zu größeren Systemen mit OS (Linux)? Was war schwer und wie hast du es gelöst? Welche Art von Denkweise wird benötigt?

Wäre es lohnenswert, C++ von Null zu lernen oder einfach nur C zu verwenden?

+0

Wählen zu schließen als zu breit. –

Antwort

10

Die Hauptprobleme bei der Verwendung des Linux-Kernels, um Mikrocontroller-Systeme zu ersetzen, sind die Geräte, mit denen Sie interagieren. Dazu müssen Sie möglicherweise Treiber schreiben. Ich würde sagen bleiben mit C als die Sprache, weil Sie den Benutzer-Raum so sauber wie möglich halten wollen. Suchen Sie in der Bibliothek uclibc nach einer schlankeren C-Standardbibliothek.

http://www.uclibc.org/

können Sie finden auch Busybox nützlich. Dies bietet viele Userspace-Dienstprogramme als eine einzelne Binärdatei.

http://www.busybox.net/

Dann ist es nur eine Frage der von einem Speicher zu einem Live-System booten und einige Controlling Logik durch init ausgeführt wird, die mit der Hardware-Schnittstellen. Bei Bedarf können Sie auf das Live-System zugreifen und die busybox-Dienstprogramme ausführen. Der einzige Unterschied besteht darin, dass der Benutzerbereich viel schlanker als in einer normalen Distribution ist und Sie in Bezug auf die Ziele "näher am Kernel" arbeiten werden.

Schauen Sie auch in Echtzeit Linux.

http://www.realtimelinuxfoundation.org/

Wenn Sie brauchen eine formelle Versprechen der Aufgabenerledigung. Ich vermute, das härteste Bit wird booten/persistent Speicher und Schnittstellen mit Ihrer Hardware, wenn es exotisch ist. Wenn Sie nicht vertraut sind mit Linux

http://www.cromwell-intl.com/unix/linux-boot.html

helfen könnten dann booten.

Kurz gesagt, wenn Sie nicht auf einem tiefen Level für Linux entwickelt, Ihre eigene Distribution gebaut haben oder Kernel-Erfahrung haben dann Sie könnten die Programmierung schwer finden.

http://www.linuxdevices.com/ könnte auch

Good Luck

+1

Ich habe eine funktionierende Hardware, zumindest für jetzt. Und außerdem habe ich den Code hauptsächlich am PC ausprobiert. Die eigentliche Codierung ist momentan das größte Problem, aber ich brauche sie vielleicht später. Vielen Dank. –

+1

Keine Sorge! Viel Glück mit allem. –

2

Ich war in einer sehr ähnlichen misslichen Lage vor nicht allzu langer Zeit. Ich kaufte und las Embedded Linux Primer und es war eine sehr hilfreiche Möglichkeit, den mentalen Übergang zu einem High-Level-Betriebssystem zu machen (aus der Perspektive eines Mikrocontrollers).

Wenn Sie die "Zeit haben, sich Zeit zu nehmen", könnten Sie offensichtlich den Übergang machen. Aber wenn Sie schnell auf den neuesten Stand gebracht werden müssen, sollten Sie in Erwägung ziehen, einen technischen Mentor zu finden, der Sie dabei unterstützt.

1

Sie können es auch nützlich finden, Ihren Weg in Linux zu arbeiten, indem Sie mit ucLinux beginnen. Es ist im Grunde Linux auf einem Mikrocontroller. Sie können ein Gefühl für den Kernel bekommen, ohne den virtuellen Speicher als Übergang. Sehen Sie, ob ucLinux einen Mikrocontroller unterstützt, mit dem Sie bereits vertraut sind, und sehen Sie, wie der Kernel mit dieser Architektur interagiert.

Ich stimme zu, dass das Embedded Linux Primer-Buch hervorragend dafür geeignet ist, sich mit embedded Linux vertraut zu machen. Du solltest jetzt lieber bei C bleiben. C++ kann warten, und es ist nützlicher für Anwendungen, nicht für den Treibercode.

Wenn Sie mit der Funktionsweise von ucLinux vertraut sind, können Sie mit einem normalen Linux-Kernel auf einer Mikroprozessor-Architektur wie ARM mit MMU und virtuellem Speicher beginnen.

Nur meine zwei Cent!