wie startet Embedded Linux die Applikation?

Gast #3391676
Lesenswert?
• ▲
▼
Hallo zusammen,

ich habe vor einigen Wochen mit Embedded Linux angefangen, habe mich da 
mittlerweile durch die Bootloader und das Betriebssystem durchgekämpft 
bin aber jetzt an eine Stelle angekommen wo ich nicht mehr weiter weiß 
und keine Hilfe finde, eventuell nicht die richtigen Frage Stelle:

Ich habe ein kleines minimales EmbSys welches über Embbeded Linux läuft 
und frage mich, wie denn genau Linux die Anwendung von allein startet, 
die das System letztendlich kontrolliert/verarbeitet.

Weiß mir jemand einen Rat?

Grüße

Ich!
Gast #3391681
Lesenswert?
• ▲
▼
Das wird üblicher Weise über Init Skripte gemacht.

Schau dir mal an, was im Ordner /etc/init.d liegt. Evtl. hast du da eine 
Datei rcS drin, wo schon Sachen gestartet werden. Eleganter ist jedoch, 
wenn man für seine Anwendung ein eigenes Init Skript hat, das die 
Anwendung beim Shutdown auch sauber beendet (falls das bei dir nötig 
ist).

Christian
Gast #3391691
Lesenswert?
• ▲
▼
na das trifft ja direkt ins Schwarze. Wenn ich mit Buildroot ein BS 
erstelle bekomm ich ja dann die Datei welche auf dem EmbSys gestartet 
wird. Aber ich habe dort (bsp. über make menuconfig) meines Wissens 
nicht einstellen können, was denn eigentlich passieren soll wenn alles 
betriebsbereit ist.

Achja herzlichen Dank für die schnelle Antwort ;) das hat mir schon mal 
mehr Stichworte zum Suchen gegeben.
(Firma: Schweigstill IT) Persönliche Seite #3393104
Lesenswert?
• ▲
▼
Der erste Prozess, der nach der Initialisierung des Linux-Kernels 
gestartet wird, hat immer die PID 1 und heißt meistens "init". Init 
startet anschließend ggf. alle weiteren Dienste, Anwendungen, usw. und 
bedient sich dabei meist einer Datei namens /etc/inittab.

Die Reihenfolge, in der nach den (Userland-)Programm "init" gesucht 
wird, lautet:

/sbin/init
/etc/init
/bin/init
/bin/sh

Ja, richtig gelesen. Wenn kein init-Programm gefunden werden kann, wird 
direkt eine Shell gestartet. Üblicherweise terminiert die Suche schon 
nach der ersten gefundenen Datei.

Nachzulesen ist das ganze in der Datei ${SRC}/init/main.c

Statt "init" könnte man auch ein beliebiges anderes Programm im Userland 
starten, welches dann selbst weitere Prozesse erzeugt. Bei einem Kernel 
mit statisch gelinkten Modulen gibt es da keine weiteren 
Einschränkungen. Nur werden dann eben die üblichen Daemons nicht laufen, 
was aber durchaus gewünscht sein kann.
Gast #3393428
Lesenswert?
• ▲
▼
aha das bringt doch noch mehr Licht ins Dunkel, interessant wär doch zu 
wissen wie solch ein Startbefehl aussieht, sprich wie ich meinem ES 
beibringe meine Applikation auszuführen.

Wenn keines dieser Ordnersturkturen wie im Beitrag von schweigstill 
angegeben vorhanden ist, kann ich dann davon ausgehen dass es gar kein 
Startskript gibt oder können die einfach irgendwo liegen? und wenn sie 
das tun dürfen, dann versteh ich leider noch nicht woher Linux überhaupt 
weiß was es tun soll wenn es betriebsbereit ist.
(Firma: Schweigstill IT) Persönliche Seite #3393436
Lesenswert?
• ▲
▼
schönWetter schrieb:
> aha das bringt doch noch mehr Licht ins Dunkel, interessant wär doch zu
> wissen wie solch ein Startbefehl aussieht, sprich wie ich meinem ES
> beibringe meine Applikation auszuführen.

Das Programm "init" IST der Startbefehl! Wenn Du Deinem eigenen 
Programm den Namen "init" gibst und es im root-Dateisystem in /sbin/init 
ablegst, dann läuft es sofort nach der Initialisierung los.

Wenn es keine der o.a. Dateien (init bzw. /bin/sh) gibt, dann läuft zwar 
der Linux-Kernel, aber kein einziger Userland-Prozess. Nur 
Kernel-Threads, die durch (statisch gelinkte) Treiber angelegt werden, 
können dann ausgeführt werden. Solch ein minimalistisches System wäre 
denkbar.

Wenn Du wissen willst, wie übliche init-Prozesse arbeiten, muss Du Dir 
in den Busybox-Quellen die Implementierung des init-Befehls/Programms 
anschauen.
Gast #3393461
Lesenswert?
• ▲
▼
hmm wenn ich in meinem linux2.6.39 Ordner suche dann zeigt er mir so an 
die 20 init.c Dateien. Aber die oben genannte Verzeichnisstruktur oder 
ein /init/init.c liegt leider nicht vor.

Also woher weiß ich dann welches das "ur"-Init ist. Da muss es doch 
sowas wie ne Default-Datei geben, ich kann mir nicht vorstellen, dass 
das jedesmal woanders liegt.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 12 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.