Forum: Mikrocontroller und Digitale Elektronik Aufwand zur Einführung von Embedded Linux


von Richard B. (richbz)


Lesenswert?

Hallo,
wir müssen bei einer Neuentwicklung für einen Kunden auf Embedded Linux 
umsteigen. Es soll ein Gerät mit Touch-Display, Internetfähig entwickelt 
werden.

Nachfolgend einige der genannten Stichworte
Embedded Software:
 Treiber, Embedded Betriebssystem (Linux, Segger), Firmware, CAN, SPI, 
Sound
 Frameworks: Embedded Linux, Device Drivers, Microcontroller, C, C++
o Applikation am Embedded System:
 GUI, Abläufe, Filesystem Handling (Config-Dateien), Threading, TCP/IP


Umgang mit Entwicklungsumgebungen, Debuggern und Programmiererfahrung in 
C liegt vor, allerdings überhaupt keine Erfahrung mit Linux.

Daher fällt es mir  schwer, den Zeitaufwand zur Einarbeitung 
abzuschätzen.

Vielleicht kann jemand aus eigener Erfahrung in etwa eine realistische 
Zeiteinschätzung nennen.

Vielleicht gibt es auch empfehlenswerte Quellen oder Schulungen ?

Bei der Vielfalt der Infos im Internet verliert man etwas den Überblick, 
was wirklich zum effektiven Einarbeiten taugt.

In München z.B. gibt es einige Schulungszentren, wobei die Lehrgänge 
allgemein relativ teuer sind und schwer abschätzbar ist, was diese 
wirklich bringen.

von Frank K. (fchk)


Lesenswert?

Zur Applikation:
Da habt Ihr zwei Alternativen - entweder Android nehmen oder QT. Android 
ist nochmal eine weitere Schicht auf dem Linux drauf und vielleicht noch 
etwas komplexer.
QT deckt Euch schon mal eine ganze Menge ab, von der GUI über Netzwerk, 
Touch Einbindung, etc pp. Wenn Ihr alles nutzen wollt, braucht Ihr eine 
Hardware mit OpenGL eingebaut. Darauf müsst Ihr achten! QT ist ansonst 
das gleiche QT wie auf dem Desktop.

Kernel-Anpassungen und so würde ich rausgeben oder zukaufen. Ein halbes 
Jahr ist denke ich für dieses Thema nicht untertrieben.

fchk

von R. R. (elec-lisper)


Lesenswert?

Ohne jegliche Erfahrung ist das wirklich ein ganzer Brocken.

Ich kann mal ein paar weitere Themen auflisten, die ggf. beim
Googlen hilfreich sind:

> Treiber, Embedded Betriebssystem (Linux, Segger),
> Firmware, CAN, SPI, Sound

Für Treiberentwicklung sollte man sich
"The Linux Kernel Module Programming Guide" ansehen
( http://www.tldp.org/LDP/lkmpg/2.6/lkmpg.pdf ) und es gab auch
eigentlich immer ein Buch über die Linux Kernel entwicklung von
Addison Wesley.

Zum Ansteuerung von manchen Dingen unter Linux ist "ioctl()"
ein guter Kandidat wo man loslegen kann zu suchen.

Details zu SPI u.A. in der Kernel-Dokumentation zu finden:
https://www.kernel.org/doc/Documentation/spi/spi-summary

> Frameworks: Embedded Linux, Device Drivers, Microcontroller, C, C++

Für Zeitkritisches wird üblicherweise RTLinux verwendet.

> GUI, Abläufe, Filesystem Handling (Config-Dateien), Threading, TCP/IP

Wenn man C++ nicht zu sehr scheut, sollte man sich hier ggf.
mal Qt ansehen. Das ist eine seit den 90ern entwickelte frei
verfügbare GUI Bibliothek welche auch sehr viel Kram für alltägliche
Aufgaben mit bringt (Filesystem Handling, Threading, TCP/IP, HTTP,
PDF erzeugung, uvm.). Dafür gibts sowohl komerzielle als auch
freie Lizenzmodelle.

Ansonsten sollte man sich bei C++ evtl. mal boost ansehen und POCO.

Dringend rate ich dazu auch einmal ein paar Administrations HOWTOs
zu ergooglen und ggf. ein paar Bücher dazu.


Zeitaufwand für die Einarbeitung hängt ganz von den Zielen ab und
wie Marktreif das Produkt werden soll. Man sollte definitiv wissen
wie man Linux richtig aufsetzt und konfiguriert, damit es im
embedded Betrieb nicht zu Problemen kommt. Hier gibts aber auch
schon Distributionen die einen da weiterhelfen und schon für
Embedded ausgelegt sind.

Insgesamt ist es aber alles eher in den Griff zu bekommen als
bei Microsoft Windows. Linux is da oft wesentlich transparenter.

von Dumdi D. (dumdidum)


Lesenswert?

Wem die Lehrgänge zu teuer sind, wird bei den Qt Lizenzkosten auch nicht 
glücklich.

von R. R. (elec-lisper)


Lesenswert?

Dumdi D. schrieb:
> Wem die Lehrgänge zu teuer sind, wird bei den Qt Lizenzkosten auch nicht
> glücklich.

Qt ist umsonst wenn man nicht statisch linkt soweit ich mich entsinne.

Korrektur, du hast recht:
> 2.19. Do I need to have a distribution
> agreement to develop an embedded device with Qt?

> Yes. A distribution agreement explaining the terms for distributing
> the Qt libraries is included in your Qt license agreement.
> When you create an embedded device you typically
> have ‘joint hardware and software distribution’,
> which is subject to a distribution fee,
> please contact us for more information.

https://www.qt.io/faq/#_Toc_2_19

: Bearbeitet durch User
von Strubi (Gast)


Lesenswert?

Moin,

ich unterschreibe die vorgehende Aussage auch mal mit.
Von den diversen Schulungen halte ich generell nicht so viel, mit dem 
dort meist vermittelten gefährlichen Halbwissen kommt man dann oft 
konkret nicht weiter.
Besser die Experten für einen Workshop einkaufen und Knowhow-Transfer 
und Arbeitspaket für z.B. Kerneltreiber in Einem erschlagen.

Ansonsten gibt es immer mehr Firmen, die zu ihrer More-Modul Hardware 
fertige board supply-Packages anbieten, inkl. Build-systeme, wie 
Buildroot, OpenEmbedded, usw. - da muss man sich dann das Paket seines 
Geschmacks halt etwas suchen. Für einen ersten Prototypen führt der 
Ansatz mit einem Coremodul recht schnell zum Erfolg. Für dein 
skizziertes System hätte ich jetzt z.B. als erstes mal bei Phytec, FS, 
oder ACME reingeschaut.
Man kann auch immer mal FAEs mit konkrekten Fragen quälen :-)

von Simon B. (nomis)


Lesenswert?

Richard B. schrieb:
> Vielleicht kann jemand aus eigener Erfahrung in etwa eine realistische
> Zeiteinschätzung nennen.

Nicht mit den paar sehr generischen Stichworten.

Wichtig zu wissen ist: Welche Plattform verwendet ihr: Ist das eine 
modulbasierte Lösung von einem etablierten Hersteller, der selber schon 
ein Linux für seine Module bereitstellt? Oder ist das eine 
Eigenentwicklung mit einem pfuschneuen Prozessor, dessen Hersteller sich 
nicht für Linux interessiert und für den man erstmal grundlegende 
Portierungsarbeiten machen müsste...

Das ist ein riesiges Spektrum, was den potentiellen Arbeitsaufwand 
angeht. Wenn die Hardware noch nicht festgeklopft ist, hat man gute 
Chancen, durch clevere Komponentenauswahl viel Entwicklungszeit 
einzusparen.

> Vielleicht gibt es auch empfehlenswerte Quellen oder Schulungen ?
>
> Bei der Vielfalt der Infos im Internet verliert man etwas den Überblick,
> was wirklich zum effektiven Einarbeiten taugt.
>
> In München z.B. gibt es einige Schulungszentren, wobei die Lehrgänge
> allgemein relativ teuer sind und schwer abschätzbar ist, was diese
> wirklich bringen.

Wollt ihr schnell zum Ziel kommen? Oder in-house know-how aufbauen? In 
ersterem Fall sucht euch einen Dienstleister.

Neben der Anpassung des Linux-Kernels an eure Hardware-Plattform gibt es 
dann natürlich noch die Applikationsentwicklung. Da gibt es neben 
Android und QT durchaus noch weitere Optionen, das sollte aber abhängig 
von Euren Rahmenbedingungen evaluiert werden.

Viele Grüße,
        Simon

von Maxi Z. (maxi_z)


Lesenswert?

Hallo,

ich hätte ein paar Fragen:
- was soll das ganze System machen (ständig mit dem Netzwerk verbunden 
sein, Usereingaben per Netzwerk übertragen, ausgewählte Infos aus dem 
Netzwerk anzeigen) - nur kurze Beschreibung
- wie sieht es denn preistechnisch bei der Hardware aus? Wie viel sollte 
ausgegeben werden? Wo ist das Limit?
- werden mehrere solcher Systeme benötigt oder nur 1 für einen Kunden?
- Kommt ein Raspberry Pi oder ähnliche HW gar nicht in Frage? Dafür gibt 
es auch verschiedene OS, unter anderem Embedded OS. Was würde dagegen 
sprechen?


Ich habe zwar keine Erfahrung in Schätzungen wie lange das Anlernen 
dauern würde (da ist jeder individuell), aber ich würde für die GUI GTK+ 
bzw. Gtkmm 3.0 mit Verbindung von C++ empfehlen. Das habe ich mir selbst 
innerhalb von kürzester Zeit beigebracht und konnte nach wenigen Tagen 
grafik- bzw. Gui-technisch schon ne ganze Menge (Buttons, formatierte 
Labels, Eventhandling, Kurven und weitere 2D-Objekte zeichnen + 
Positionen verändern). Das ganze dann innerhalb von Netbeans zu 
entwickeln ist ziemlich angenehm. Der Vorteil eines Raspberrys ist dann 
auch noch dass man alles individuell einstellen kann: z.B. nach dem 
Booten das Programm direkt starten (im Vollbildmodus) und dann läuft das 
Ding einwandfrei.
Mit der Steuerung der GPIO's kann man dann direkt im Betrieb die Signale 
verarbeiten, wie man möchte (falls gewünscht). Ausgabe kann dann auf ein 
Touchscreen erfolgen (es gibt viele verschiedene Modelle mit 
verschiedenen Größen). Mit einer Zeile in der config.txt Datei kann man 
die Ausrichtung bestimmen.

von R. R. (elec-lisper)


Lesenswert?

Strubi schrieb:
> Ansonsten gibt es immer mehr Firmen, die zu ihrer More-Modul Hardware
> fertige board supply-Packages anbieten, inkl. Build-systeme, wie
> Buildroot, OpenEmbedded, usw. - da muss man sich dann das Paket seines
> Geschmacks halt etwas suchen.

Die Firma bei der ich arbeite hat sich vor einigen Jahren auch
so ein Embedded-System von einer Firma machen lassen. Gleich zusammen
mit Frontpanel mit Folientastatur, Matrix-Display und RFID-Kartenleser.
Hinten drin lief ein Linux das von einer CF-Karte dann shell-Scripte
ausgeführt hat.
Wir haben die Hardware dann zusammen mit einem Entwicklerpaket
(Linux, Buildroot Entwicklungsumgebung für Windows, C-Bibliothek zum
Ansteuern des Displays und der Tastatur usw.).

Leider is das ganze jetzt schon einige Jahre her und die Firma kann die
Dinger nicht mehr (kompatibel) Produzieren, obwohl die noch
produktiv beim Kunden im Einsatz sind. (Haben aber zum Glück
noch einige im Lager).

von Olaf (Gast)


Lesenswert?

> Umgang mit Entwicklungsumgebungen, Debuggern und Programmiererfahrung in
> C liegt vor, allerdings überhaupt keine Erfahrung mit Linux.

Dann solltest ihr das lassen. Ihr braucht mindestens einen Typen der 
Linux auf Gurulevel drauf hat und mehrere andere bei denen ihr 
akzeptiert das sie fuer einige Monate nur 50% der sonstigen Leistung 
zeigen weil sie halt noch lernen muessen.

Falls dir die Antwort nicht gefaellt, ueberleg dir mal wie es umgekehrt 
waere: Ihr seid eine Firma wo jeder krass viel Ahnung von Linux hat aber 
noch nie von Windows gehoert habt und dann willst du eine 
Windowsanwendung programmieren. Dann hast du eine ungefaehre Vorstellung 
was da auf einem zukommt. Natuerlich lernt man dann als erfahrener 
Entwickler schneller als ein Doedel frisch von der Uni, aber es muss 
auch jemand da sein der Wissen vermittelt und gleich zu anfang eine 
sinnvolle Richtung vorgeben kann.


Olaf

von R. R. (elec-lisper)


Lesenswert?

Olaf schrieb:
> Ihr braucht mindestens einen Typen der
> Linux auf Gurulevel drauf hat und mehrere andere bei denen ihr
> akzeptiert das sie fuer einige Monate nur 50% der sonstigen Leistung
> zeigen weil sie halt noch lernen muessen.

So hart wollte ichs nicht ausdrücken. Aber das wäre natürlich
das beste. Ein neues System vollständig in den Griff zu bekommen
ist nicht durch ein paar Schulungen eben mal zu lernen.
Da braucht man leider, wie bei Windows auch, echte aus Fehlern
angeeignete Erfahrung.

Üblicherweise holt man sich sowas auf dem Arbeitsmarkt.
Senior Entwickler für Embedded Linux mit min. 5 Jahre
Berufserfahrung und einer schönen Liste an Projekten aufm Lebenslauf.

Schulungen sind auch nicht billig. Dabei spreche ich nichtmal
von den Schulungsgebüren selbst, sondern davon dass die Entwickler
die dort sitzen nicht an Projekten sitzen können.
Bei 5 Entwicklern, und 1000€/Tag/Entwickler kommt man bei einer
zweiwöchigen Schulung schnell auf 50k€ und mehr.
Und danach haben sie erstmal nur grobes Fachwissen, aber keine echte
Erfahrung.

Da kann man sich gut überlegen ob es nicht lohnt jemanden
für 80-100k€/Jahr einzustellen.

von Olaf (Gast)


Lesenswert?

> So hart wollte ichs nicht ausdrücken.

Die Alternative sind dann Ergebnisse wie manche DVB-T Empfaenger oder 
Router wo man einmal die Woche die Resettaste druecken muss, 
verdreifachte Projektlaufzeiten, wochentliche Firmwareupdates und 
regelmaessige Erwaehnung in der C't in der 'mal wieder gehackt' Rubrig. 
:-)

Olaf

von Sheeva P. (sheevaplug)


Lesenswert?

Richard B. schrieb:
> wir müssen bei einer Neuentwicklung für einen Kunden auf Embedded Linux
> umsteigen. Es soll ein Gerät mit Touch-Display, Internetfähig entwickelt
> werden.
>
> Nachfolgend einige der genannten Stichworte
> Embedded Software:
>  Treiber, Embedded Betriebssystem (Linux, Segger), Firmware, CAN, SPI,
> Sound
>  Frameworks: Embedded Linux, Device Drivers, Microcontroller, C, C++
> o Applikation am Embedded System:
>  GUI, Abläufe, Filesystem Handling (Config-Dateien), Threading, TCP/IP

Deine Informationen sind ziemlich dünn, insbesondere hinsichtlich der in 
Eurem Hause vorhandenen Vorkenntnisse im Betriebssystem- und da 
besonders im UNIX-Umfeld. Daher kann eine Antwort auf Deine Fragen 
natürlich auch nur oberflächlich und allgemein bleiben.

Was Linux selbst angeht, kann ich folgendes Buch [1] sowie die Webseiten 
[2,3] empfehlen. Die Webseiten sind zwar für die Debian-Distribution 
gedacht, passen aber auch für Systeme die auf Debian basieren, wie die 
Ubuntu-Familie, Linux Mint, Raspbian, und verschiedene andere. In Bezug 
auf die Treiberentwicklung ist das Buch [4] heute das Standardwerk.

[1] https://kofler.info/buecher/linux/
[2] http://debiananwenderhandbuch.de/
[3] https://debian-handbook.info/browse/de-DE/stable/
[4] https://www.dpunkt.de/buecher/12176/Linux-Treiber%20entwickeln.html

von Strubi (Gast)


Lesenswert?

Robin R. schrieb:
..

>
> Leider is das ganze jetzt schon einige Jahre her und die Firma kann die
> Dinger nicht mehr (kompatibel) Produzieren, obwohl die noch
> produktiv beim Kunden im Einsatz sind. (Haben aber zum Glück
> noch einige im Lager).

Das ist halt das grosse Problem, wenn es günstig sein soll, hat man 
meist auch die Garantie der Verfügbarkeit a la industriell nicht.
Es gibt da auch sehr wenige Modulhersteller, die ernsthaft 10 Jahre 
garantieren können (und manche gehen trotz allem vorher pleite...), oder 
der Hersteller der CPU wird mal eben gekauft und der Fokus ändert sich. 
Unterm Strich ist das Geschäft  sehr volatil geworden. Trau, schau 
wem...
Diesbezüglich ist Linux ansich eine gute Entscheidung, da muss man 
wenigstens die SW nicht komplett neu schreiben. Die kostet definitiv 
mehr Aufwand als die HW.
Unterm Strich sollte man sich schon im Klaren sein, dass Linux von der 
Wartung her nicht unbedingt günstiger ist als bare metal, weil es 
einfach zuviel kann. Das kann für ne Dreambox gewollt sein, für eine 
IoBS-Alarmanlage aber eher nicht.

von ldh (Gast)


Lesenswert?

com/sbc mit board support package nehmen (rpi cm3, opossom, beaglebone 
black mit buildroor, yocto, openembedded)

Pass auf ob das ding sich autoupdaten soll..

Einiges geht dann schon auf einem relativ hohem level (tcp/ip, i2c, spi 
usw.)
Vielleicht auch einfach python anschauen? die haben eine super threading 
lib.

Hilft natürlich auch eine ähnliche linux Distro am Entwicklerrechner 
laufen zu haben.

zur gui: qt (in c++ oder python), tkinter

von Stefan F. (Gast)


Lesenswert?

Für Entwickler empfehle ich, sich Linux auf den heimischen PC/Laptop zu 
installieren, um den Umgang damit zu lernen. Dann aber auch bitte 
möglichst alles (außer Spielen) unter Linux machen.

Debian deswegen, weil es am besten dokumentiert ist und zahlreiche 
andere Linux Distributionen davon abgeleitet sind. Wer Debian kennt, 
kommt mit anderen Linux Distributionen in der Regel gut zurecht. Und 
Programme, die für Debian compiliert wurden, laufen meistens ohne 
Änderung auch auf andere Distributionen.

von Pandur S. (jetztnicht)


Lesenswert?

Und wenn man sich dann auf einem PC mit linux vertraut gemacht hat, geht 
man zu einem Raspberry Pi, und schaut wie man damit zurecht kommt.

von Hannes J. (Firma: _⌨_) (pnuebergang)


Lesenswert?

Der Tipp jemanden der weiß wie es geht zu bezahlen (am besten 
einstellen) ist Gold wert.

Mit Linux bekommt man ein vollwertiges Großrechner-Betriebssystem, dass 
dank des Technischen Fortschritts mittlerweile überall läuft. Linux kann 
viel und der größte Fehler beim Einführen von Linux ist nicht zu nutzen 
was Linux kann, sondern entweder separat, drumherum oder sogar gegen das 
Betriebssystem zu arbeiten.

Zum Beispiel habe ich schon ein paar mal gesehen, dass offiziell Linux 
verwendet wurde - aber nur als Loader um ein einziges fettes 
Alles-in-einem-Binary zu laden. Typisch für Leute die 
Freestanding-Environments gewohnt sind und die keinen Bock haben sich 
mit Linux zu befassen. In dem Binary wird dann versucht "irgendwie" 
Dinge pseudo-parallel laufen zu lassen, Memory zu verwalten und 
natürlich an allen Betriebssystem-Funktionen vorbei direkt auf Hardware 
zu schreiben. Sowas stürzt dann regelmäßig ab und der Ober-Hacker, der 
bestimmt hat dass man das so zu machen hat, hat einen Pseudo-Grund mehr 
rumzunörgeln das Linux nichts taugt.

Leseempfehlung für das grundsätzliche Systemprogrammieren auf Unix 
(incl. Linux und unabhängig ob embedded oder nicht):

https://www.amazon.de/Programming-Environment-Addison-Wesley-Professional-Computing/dp/0321637739

Leseempfehlung speziell für Netzwerk-Kommunikation unter Linux (das wird 
gerne von Anfängern so versaut, dass man im Strahl kotzen muss):

https://www.amazon.de/Unix-Network-Programming-Sockets-Networking/dp/9332549745/

Wenn man schon nicht lernen will wie es wirklich funktioniert kann man 
aus den Büchern wenigstens die Rezepte abschreiben.

Nicht so toll ist 
https://www.amazon.de/Linux-Device-Drivers-Jonathan-Corbet/dp/0596005903 
(gibt es aber legal zum kostenlosen Runterladen 
https://lwn.net/Kernel/LDD3/). Einiges ist veraltet weil sich im Kernel 
schneller Dinge ändern als man "make" sagen kann. Sogar vor den 
Änderungen war das Buch nie vollständig, aber es ist immer noch besser 
als nichts.

von Christopher J. (christopher_j23)


Lesenswert?

Der Aufwand für die Einführung hängt maßgeblich von zwei Faktoren ab:

1. wie viel Linux könnt ihr
2. wie viel Linux wollt ihr

Da ersteres schon mit "so gut wie keine Kenntnisse vorhanden" 
beantwortet wurde, stimme ich meinen Vorpostern uneingeschränkt zu und 
empfehle euch dringend jemanden einzustellen, der das entsprechende 
Know-How mitbringt. Wie viel er mitbringen muss hängt zweifellos von 2. 
ab. Natürlich besteht auch immer die Möglichkeit sich Know-How von 
externen Dienstleistern einzukaufen aber das kann unter Umständen sehr 
schnell sehr teuer werden und sorgt garantiert für Frust, wenn man an 
einer Kleinigkeit festhängt, die der Kollege am Schreibtisch gegenüber 
in zwei Minuten gelöst hätte und man stattdessen erst wieder den 
Externen anrufen muss und der unter Umständen gar nicht erreichbar ist, 
obwohl man ihn gerade am dringendsten bräuchte.

Zu 2.:

Wirklich sehr viele Sachen sind schon da und funktionieren 
"Out-of-the-Box", d.h. man muss nicht noch erst eigene Treiber 
entwickeln. Nehmt ihr Hardware, welche bereits vollumfänglich 
unterstützt wird, ist da der Entwicklungsaufwand nahezu Null. Stacks für 
CAN, TCP/IP, etc. sind alle vorhanden. Hier ist die Frage auf welcher 
Ebene ihr mit diesen Stacks arbeiten wollt. Braucht ihr einen Webserver 
ist der mit Python oder Go viel schneller am laufen als wenn ihr mit C 
und BSD-Sockets an die Sache heran geht. Da ist halt die Frage wie viel 
Zugriff ihr braucht.
Noch wichtiger ist aber die Frage ob ihr eigene Treiber für die Hardware 
schreiben müsst und die Frage ob es ein RT-Kernel werden soll. Das 
Kriterium RT-Kernel schränkt sowohl die Hardware-Auswahl bei den 
Prozessoren etwas ein und bringt zum anderen evtl. den einen oder 
anderen Treiberbug zum Vorschein, der in einem konventionellen Kernel 
nicht so aufgetreten wäre.

Nur mal so als Beispiel:
Ihr könnt ein Beaglebone nehmen, einen fertiges Can-"Cape" draufsetzen 
(z.B. http://www.caranea.com/hardware/bbb-can-cape), einen 08/15 
Touchscreen (z.B. https://www.sparkfun.com/products/12086) anschließen 
und unter der Voraussetzung, dass es bei den IOs keine Überschneidungen 
gibt (was ich nicht geprüft habe), habt ihr an einem Nachmittag euren 
Prototypen am laufen. Ein kleines Python-Programm was per 
Touchscreen-GUI verschiedene Pakete auf den CAN-Bus schickt (per 
SocketCAN), diese gleichzeitig in einer Log-Datei speichert und sich 
auch per TCP/IP steuern lässt, ist  ebenfalls schnell gemacht. Damit 
wären alle eure Punkte (CAN, Internet, Filesystem, Touchscreen) 
abgedeckt, ohne den Kernel überhaupt angefasst zu haben. Für eine 
Person, die sich ein bisschen mit Python, CAN und BSD-Sockets auskennt, 
sowie der englischen Sprache mächtig ist, würde ich die Entwicklungszeit 
für ein solches "Proof-of-Concept" mal konservativ auf eine Woche 
schätzen (natürlich macht Python für ein "richtiges" Produkt nicht viel 
Sinn, es soll nur als Beispiel dienen).
Wollt ihr aber unbedingt diesen oder jenen AD-Wandler, für den es noch 
keinen Treiber gibt und außerdem alles möglichst in Echtzeit und 
möglichst auf einem nVidia-Tegra und außerdem wollt ihr noch einen 
bestimmten Touchscreen-IC, wofür ihr ebenfalls noch einen Treiber 
schreiben müsst, dann sind fünf Mannjahre weg wie nichts bis ihr einen 
lauffähigen Prototypen habt.

Ich vermute mal eure Anforderungen werden irgendwo zwischen diesen 
beiden Extrembeispielen liegen. Um überhaupt mal einen Einblick zu 
bekommen, wie man einen eigenen Kernel kompiliert und eigene Treiber 
schreibt kann ich das (leider mittlerweile schon etwas veraltete) Buch 
"Embedded Linux lernen mit dem Raspberry Pi" von Jürgen Quade empfehlen 
(https://www.amazon.de/dp/386490143X). Der Autor beschreibt kurz und 
knapp alle wichtigen Schritte und Grundlagen, angefangen von der 
Partitionierung über das Dateisystem bis hin zum Laden eines Kernels 
mittels U-Boot, der eigentlichen (Cross-)Kompilierung des Kernels, sowie 
dem schreiben eigener Treiber. Ein Blick ins Buch bei Amazon und Co. 
schadet sicher nicht und beim Verlag selber kann man das Buch auch als 
DRM-freies PDF bekommen. Von Herrn Quade gibt es auch noch 
weiterführende Literatur zum Thema Linux Kernel-Treiber, die ich jedoch 
selber noch nicht gelesen habe. Ein weiteres interessantes Buch, was ich 
persönlich ebenfalls nicht gelesen habe aber was einen guten Eindruck 
macht und etwas aktueller ist, ist "Embedded Linux mit Raspberry Pi und 
Co" 
(https://www.amazon.de/Embedded-Linux-Raspberry-mitp-Professional/dp/395845061X).

Noch so als letzter Tip: Die Wahl des Prozessors ist mit entscheidend 
dafür wie viel Ärger ihr in Zukunft mit der Wartung/Aktualisierung eures 
Systems haben werdet. Hervorragende Unterstützung gibt es z.B. für 
Intel, TI AM335x oder i.mx6 von Freescale. Die letzteren beiden bringen 
auch eine CAN-Schnittstelle und IEEE 1588 mit und haben eine von den 
Herstellern garantierte Verfügbarkeit über mehrere Jahre. Dev-Boards und 
Module sind allgemein gut verfügbar und auch RT-Kernel werden für beide 
gepflegt. Von nVidia oder gar Allwinner, Rockchip und Co. würde ich 
unbedingt die Finger lassen.

von Bloom (Gast)


Lesenswert?

Leute nehmt euch jedenfalls viel Zeit. Wenn die Hardware eine 
Eigenentwicklung ist dann muss der Linux Kernel dafür angepasst werden 
und Treiber geschrieben werden. Ihr müsst euch zuerst mal eine 
Entwicklungsumgebung schaffen, am besten ein NFS wo ihr den neu 
compilierten Kernel (Module) hin kopiert könnt. Zusätzlich braucht ihr 
einen PC zur Cross Compilierung von Kernel und und Applikations 
Software. Das Debugging ist die nächste Herausforderung, für 
Applikationen wird das mit dem GDB gehen, beim Kernel ?. Als nächstes 
kommt dann noch wie das Filesystem Layout aufgebaut wird, und das 
Update.Wenn alles mal steht ist die Entwicklung sicher super mit MMU und 
Segemntation Fault anstatt unbekannter Absürtze, jede Menge Ram und die 
SW kann gut struckturiert und in Prozesse oder Threads aufgeteilt 
werden, sogar Java kann verwendet werden. Wenn ich Segger lese dann 
kenne ich von dort nur die Emwin Grafiklib soll die eingestetzt werden? 
QT ist leistungsfähiger. Das RTOS von Segger wird bei einem Linux 
Betriebssystem ja nicht zu Einsatz kommen. Es besteht natürlich auch 
noch die Möglichkeit Android zu verwenden. Meiner Meinung nach 
wesentlich mehr Aufwand als eine Entwicklung mit FreeRTOS und LWIP  aber 
dafür auch wesentlich leistungsfähiger auf lange Zeit gesehen.

von Gerd E. (robberknight)


Lesenswert?

Richard B. schrieb:
> Es soll ein Gerät mit Touch-Display

das ist ein sehr weites Feld und hier solltet Ihr die Anforderungen von 
Anfang an sauber festklopfen:

Wird eine "einfache" Touch-GUI mit Anzeige von etwas Text, einfachen 
Datenanzeigeelementen (z.B. Tacho, Füllstand, Barchart,...) und ein paar 
angezeigten Knöpfen gewünscht?

Oder muss das Ding von der Bedienung her das können, was man von 
aktuellen Smartphones gewohnt ist? Also Multitouch, Pinch-to-zoom, 
Scrollgesten,...

Da liegen Welten an Hardwareanforderungen und Entwicklungsaufwand 
dazwischen. Auch die nötigen Frameworks sind unterschiedlich.

Wenn der Chef den ersten Prototypen in der Hand hält und dann plötzlich 
Multitouch etc. fordert, fangt ihr wieder fast von vorne an.

> Internetfähig

Da solltet Ihr Euch auch Gedanken über längerfristiges Updatemanagement 
machen.

Ein 5 Jahre altes Embedded-Gerät kannst Du z.B. heute nicht mehr 
vollständig verwenden, wenn es beim Emailversand oder Webseitenabruf 
keine Verschlüsselung mit >=TLSv1.0 bietet und Zertifikate mit SHA-256 
versteht.

Das ist heute aus Sicherheitsgründen Mindestvoraussetzung, damals haben 
sich die meisten Embedded-Entwickler das aber gespart weil es auch noch 
ohne ging. Für die PCs mit Windows > XP gibt es Updates, für viele 
Embedded-Geräte nicht. Die fliegen dann in die Tonne oder man muss sich 
mühsam nen Extra Gateway davorbauen um die noch betreiben zu können.

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
Noch kein Account? Hier anmelden.