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
Manche Linux-Module schlucken Komma-separierte Listen in Parametern, wenn sie mehrfach instantiiert werden sollen. Versuch also vielleicht mal "cs_pin=2,3"
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.
Alles klar, d.h. ich muss mir den Treiber umschreiben und dann darin fest 2 Strukturen definieren oder halt dynamisch arbeiten...
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
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".
@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> ...]
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
Eben nochmal ausprobiert mit -o am Anfang; schade, das modprrobe auf dem Gnublin scheint die -o Option nicht zu kennen... Stefan
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)
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.