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.