4 Stimmen

Wie sollte ich einen Linux-Treiber strukturieren, der mehrere Chips in einem Gerät verwendet?

Ich habe ein Hardware-Gerät, das aus 3 separaten Chips auf einem I2C-Bus besteht. Ich möchte sie zusammenfassen und sie dem Benutzer als ein logisches Gerät zugänglich machen. Der Benutzer würde das logische Gerät als ein einzelnes Verzeichnis irgendwo in /sys sehen, sowie die Knoten, die man von den I2C-Chips unter /sys/class/i2c-adapter/i2c-?/* erwarten würde.

Einer der Chips ist ein MCP23017, der meiner Kenntnis nach bereits einen Treiber (drivers/gpio/gpio-mcp23s08.c) hat, den ich gerne wiederverwenden würde. Ein weiterer der Chips ist ein PCA9685 und ich würde gerne einen Treiber für diesen Chip beisteuern, der das PWM-System in include/linux/pwm.h verwendet. Der dritte Chip ist ein MCU, der eine benutzerdefinierte Firmware ausführt.

Wie sollte ich die Reihe von Treibern strukturieren? Eine Idee, die ich hatte, ist die Registrierung eines Plattformtreibers, um das logische Gerät zu präsentieren, und I2C-Treiber innerhalb dessen zu verwenden. Ist das ein guter Weg? Gibt es bessere Möglichkeiten?

Das logische Gerät ist eine Motortreiberplatine und ein IR-Empfänger. Ich habe eine einfache Diagramm ihrer Struktur.

Ich plane, zwei Schnittstellen zu erstellen. Die erste ähnlich wie /sys/class/gpio, wo Motoren 'exportiert' und dann über das Lesen und Schreiben von Attributen zugegriffen werden können. Dies wäre nützlich für den Zugriff über Shell-Skripte und das schnelle Debuggen der mechanischen Teile des Systems, die an die Motoren angeschlossen sind. Die zweite ist ein Zeichen-Deviceknoten in /dev, wo Daten im binären Format gelesen oder geschrieben werden können, was für die Anwendungssteuerung nützlicher ist.

1voto

wiesniak Punkte 558

Es scheint kein gewöhnliches Design zu sein, bist du dir sicher, dass du Zugriff auf den I2C-Bus aller Chips hast?

Ich denke, du solltest nur mit dem Mikrocontroller sprechen können, und der Mikrocontroller sollte die anderen Geräte verwalten. Andernfalls, warum ist der Mikrocontroller dort? Allerdings kann ich dein Diagramm nicht sehen, vielleicht ist der Link falsch.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X