Forum: PC-Programmierung [embedded Linux] Treiber permanent bei Re-Boot laden


von olpo (Gast)


Lesenswert?

Hallo,

ich habe einen Treiber für ein embedded Linux gebaut.
Bisher muss ich den recht umständlich über Konsole laden:
1
insmod driver.ko
2
mknod /dev/driver0 c 10 200

Wie erreiche ich es, dass der Treiber dauerhaft, dh. auf nach einem 
Reboot geladen wird, so dass ich die beiden oben genannten Befehle nicht 
mehr ausführen muss?

von imonbln (Gast)


Lesenswert?

wie wäres es mit eintragen in die /etc/modules und erstellen von 
passenden udev rules? ein kleines googlen von "linux treiber automatisch 
laden" sollte dir auch sagen wie das geht.

von olpo (Gast)


Lesenswert?

Eine flapsige Antwort, wie es in diesem Forum nicht anders zu erwarten 
war...

/etc/modules funktioniert nur bei Debian Systemen, wenn ich richtig 
informiert bin.
Siehe: 
https://www.thomas-krenn.com/de/wiki/Automatisches_Laden_von_Linux_Kernel_Modulen_beim_Booten

Bei diesem embedded Linux gibt es kein /etc/modules.

von Operator S. (smkr)


Lesenswert?

Wenn die Antwort flapsig war, dann überdenke den Informationsgehalt 
deines Posts.

olpo schrieb:
> Bei diesem embedded Linux...

Ja, welches ist denn das eine embedded Linux?
Nutzt du udev, oder noch was älteres?
Hast du ein Verzeichnis /etc/modprobe.d/?

von Daniel B. (dbuergin)


Lesenswert?

Entweder Du trägst die Befehle in eines der Startscripte deines 
ungekannten Embedded Linux ein. Auch das kleinste Linux hat ein 
/etc/rc.local oder so was.
Oder Du erstellt einen neuen Kernel mit Deinem Driver fix drin.
Wenn Du einen Driver erstellen kannst, findest Du sicher auch die 
Information, wie man das tut.

von Rolf M. (rmagnus)


Lesenswert?

olpo schrieb:
> Eine flapsige Antwort, wie es in diesem Forum nicht anders zu erwarten
> war...

Auf eine Frage, der mal wieder die zur Beantwortung nötigen 
Informationen fehlen, was auch nicht anders zu erwarten war...

> Bei diesem embedded Linux gibt es kein /etc/modules.

Ach bei "diesem". Ja, das hätte man natürlich wissen müssen.
Dann gilt das hier:

Daniel B. schrieb:
> Entweder Du trägst die Befehle in eines der Startscripte deines
> ungekannten Embedded Linux ein.

Mangels weiterer Infos kann man es nicht genauer angeben.

von imonbln (Gast)


Lesenswert?

olpo schrieb:
> Eine flapsige Antwort, wie es in diesem Forum nicht anders zu erwarten
> war...

Wenn dir die Antwort zu flapsig ist, gib uns mehr Informationen. du 
sagst nur du hast ein kernel Module und lädst es mit mknod -c 10 200 
(welches ein tun/tap device sein könnte, nach der Major/Minor Nummer, 
aber selbst das sagst du nicht)
du sagts nichts über den Userspace und nicht über dein Enviorment und 
dann erwartest du das wir dir genau sagen wo dein Schuh dich drückt.
Wie stellst du dir das Vor?

von c.m. (Gast)


Lesenswert?

olpo schrieb:
> Eine flapsige Antwort, wie es in diesem Forum nicht anders zu erwarten
> war...

nein, das war die richtige antwort.
wenn es kein "vollständiges sysV" ist, dann hättest du das mitteilen 
müssen, inklusive was du alles versucht hast, und wo du hängst.
um das formulieren zu können, hättest du dich allerdings schon 
eigenständig einlesen müssen, was du anscheinend nicht gemacht hast.

wie sieht dein embedded linux aus? ist es eventuell nur ein 
kernel+initrd?

von Gerd E. (robberknight)


Lesenswert?

olpo schrieb:
> ich habe einen Treiber für ein embedded Linux gebaut.

Für was für ein Gerät ist dieser Treiber?

An was für einem Bus hängt das Gerät?

Hat das embedded Linux Device Tree oder ACPI?

Normalerweise versucht man nämlich, daß der Kernel das Gerät beim 
Enumerieren der Busse erkennt und dann über udev automatisch der 
passende Treiber dazu gefunden und geladen wird.

von LongDon (Gast)


Lesenswert?

Daniel B. schrieb:
> Entweder Du trägst die Befehle in eines der Startscripte deines
> ungekannten Embedded Linux ein. Auch das kleinste Linux hat ein
> /etc/rc.local oder so was.


So ein Blödsinn. Linux IST der Kernel, sonst nix. Alles andere ist dann 
Zusatzsoftware wie SysVInit oder SystemD.
Ergo: In einem embedded-Linux muss zwangsläufig nix davon vorhanden 
sein.

von K. J. (Gast)


Lesenswert?

Die /etc/rc.local gibt es nur auf Debiansystemen und selbst da ist sie 
nicht immer Aktiv.

Alternative wehre da es etwas mehr als nur das Modul laden ist sich ein 
Start script zu basteln ist auch nicht so wild wie es aussieht.

Und was debian noch kann ist der @boot Parameter in der Crontab der ein 
script einmalig beim Booten läd aber das ist Debian Onley.

Udev Rules wehre auch ne Möglichkeit sofern es vorhanden ist.

Module als Autoload:
https://www.thomas-krenn.com/de/wiki/Automatisches_Laden_von_Linux_Kernel_Modulen_beim_Booten

von Bernd K. (prof7bit)


Lesenswert?

LongDon schrieb:
> oder SystemD.

Systemd schreibt man mit kleinem "d" am Ende, genauso wie alle anderen 
Daemons auch.

von Rolf M. (rmagnus)


Lesenswert?

K. J. schrieb:
> Die /etc/rc.local gibt es nur auf Debiansystemen und selbst da ist sie
> nicht immer Aktiv.

Das ist Quatsch. Die rc.local ist Standard, kann allerdings bei einigen 
Distributionen auch in /etc/init.d liegen.

> Alternative wehre da es etwas mehr als nur das Modul laden ist sich ein
> Start script zu basteln ist auch nicht so wild wie es aussieht.

Meinst du ein init-Skript? Das wäre eine Möglichkeit.

> Udev Rules wehre auch ne Möglichkeit sofern es vorhanden ist.

Ich halte es für sehr unwahrscheinlich, dass es auf dem System zwar udev 
gibt, aber keine rc.local oder vergleichbare Datei.

> Und was debian noch kann ist der @boot Parameter in der Crontab der ein
> script einmalig beim Booten läd aber das ist Debian Onley.

Du meinst @reboot, und das ist überhaupt nicht Debian-spezifisch, 
sondern Teil von Vixie Cron bzw. ISC Cron, was nicht mal auf Linux 
beschränkt ist, sondern auch noch auf allerhand anderen Unix-Derivaten 
standardmäßig zum Einsatz kommst.
Nur bei den ganz kompakten Distros, die auf Busybox basieren, gibt's das 
nicht, da der cron aus Busybox das nicht implementiert.
Aber ohne jegliche Infos über "dieses embedded Linux" ist das alles nur 
Gestocher im Nebel. Auf den großen Linux-Distributionen funktionieren 
alle bisher genannten Wege. Embedded-Linuxe sind aber meist viel kleiner 
ausgelegt und gezielt an einen bestimmten Anwendungsfall angepasst, 
deshalb kann es sein, dass einzelne (oder im Extremfall alle) Vorschläge 
nicht funktionieren.

Bernd K. schrieb:
> LongDon schrieb:
>> oder SystemD.
>
> Systemd schreibt man mit kleinem "d" am Ende,

und mit kleinem "s" am Anfang.

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.