Forum: PC-Programmierung Linux Treiber doppelt laden


von Stefan (Gast)


Lesenswert?

Hallo,

ich habe an einem embedded Linux-Board (Gnublin) zwei gleichartige 
Geräte an einem SPI Bus (UART mit sc16is7x2) hängen. Den Treiber kann 
man mit:

modprobe sc16is7x2 cs_pin=2

laden. Wie kann ich einen Treiber doppelt laden mit einem anderen 
Parameter, so dass ich beide Geräte gleichzeitig verwenden kann?

Gruß
Stefan

von Linksammler (Gast)


Lesenswert?

Manche Linux-Module schlucken Komma-separierte Listen in Parametern, 
wenn sie mehrfach instantiiert werden sollen.
Versuch also vielleicht mal "cs_pin=2,3"

von foobar (Gast)


Lesenswert?

Du kannst ein Module nicht zweimal laden.  Und es scheint, dass dieser 
Treiber nur einen einzelnen Chip unterstützt.  Wend dich doch mal an den 
Author des Treibers.

von Stefan (Gast)


Lesenswert?

Alles klar, d.h. ich muss mir den Treiber umschreiben und dann darin 
fest 2 Strukturen definieren oder halt dynamisch arbeiten...

von A. H. (ah8)


Lesenswert?

Versuche mal Folgendes:
1
modprobe sc16is7x2 -o <name_1> cs_pin=2
2
modprobe sc16is7x2 -o <name_2> cs_pin=<dein anderes pin>
Gruß
ah8

von Linksammler (Gast)


Lesenswert?

Stefan schrieb:
> Alles klar, d.h. ich muss mir den Treiber umschreiben und dann darin
> fest 2 Strukturen definieren oder halt dynamisch arbeiten

Ich hab den Treiber jetzt nur überflogen, aber wenn du den nicht 
dynamisch hinzufügst, sondern über die Platform-Definition deines 
Boards, müssten eigentlich mehrere gleichzeitig gehen.

Der Treiber hat soweit ich das sehe nämlich keine Einschränkung auf "nur 
eine Instanz", diese kommt, wenn überhaupt, aus dem modprobe / 
Auswertung der Modulparameter / Bereitstellung des "struct spi_device".

von Stefan (Gast)


Lesenswert?

@Linksammler "nicht dynamisch" heißt fest in den Kernel compilieren, 
richtig?

@A.H.: die Option -o kennt dieser Treiber offenbar nicht:

modprobe sc16is7x2 -o test1
modprobe: invalid option -- 'o'
Usage: modprobe [-v] [-V] [-C config-file] [-d <dirname> ] [-n] [-i] 
[-q] [-b] [-o <modname>] [ --dump-modversions ] <modname> 
[parameters...]
modprobe -r [-n] [-i] [-v] <modulename> ...
modprobe -l -t <dirname> [ -a <modulename> ...]

von A. H. (ah8)


Lesenswert?

Stefan schrieb:
> @A.H.: die Option -o kennt dieser Treiber offenbar nicht:

Die Option ist nicht für den Treiber, sondern für modprobe. Sie soll 
das Modul unter einem anderen Namen laden. Aus Sicht des Kernels muss 
meines Wissens nach nur der Name eines Moduls eindeutig sein, nicht aber 
das Modul selber. Man kann ein Modul also prinzipiell mehrfach laden, 
wenn man es unter unterschiedlichen Namen tut. Ob das wirklich 
funktioniert hängt natürlich vom Modul ab. Wenn mehrere Instanzen 
versuchen, die gleichen Ressourcen exklusiv zu nutzen, wird es Probleme 
geben.

Allerdings war die angegebene Reihenfolge falsch. (Tut mit Leid, ich 
hab's schon länger nicht mehr gemacht.) Aus dem Dump geht aber hervor, 
wie es richtig heißen müsste:
1
modprobe -o <name_1> sc16is7x2 cs_pin=2
2
modprobe -o <name_2> sc16is7x2 cs_pin=<dein anderes pin>

: Bearbeitet durch User
von Stefan (Gast)


Lesenswert?

Eben nochmal ausprobiert mit -o am Anfang; schade, das modprrobe auf dem 
Gnublin scheint die -o Option nicht zu kennen...

Stefan

von Linksammler (Gast)


Lesenswert?

Eigentlich sollte es ja auch reichen, den Treiber nur einmal zu laden, 
und zweifach zu nutzen.

Evtl: Treiber ganz ohne "cs_pin" Option laden, dann über sysfs die 
Verbindung zwischen CS-Pin und Chip-Instanz herstellen:

echo "spi0.2" > /sys/bus/spi/drivers/sc16is7x2/bind
echo "spi0.3" > /sys/bus/spi/drivers/sc16is7x2/bind

(Achtung: Mangels passender Hardware zum Testen in Griffweite sind die 
Parameter/Pfade/Echo-Texte oben grob geraten. Ausprobieren/Doku lesen...
Und: Wenn dein Kernel recht alt ist, kann das auch ganz anders laufen)

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

Stefan schrieb:
> das modprrobe auf dem Gnublin scheint die -o Option nicht zu kennen...

Wird aber doch in der Hilfe zum Befehl angegeben... was hast du den nun 
GENAU angegeben?

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.