Linux-Kernel-Treiber: Welches Modell für den NVRAM-Zugriff?

8

Ich habe gerade einen RTC-Treiber für einen NXP-RTC-Chip auf meinem Board geschrieben, es funktioniert großartig. Dieser Chip hat auch einige batteriegestützte RAM, die ich einer Benutzerraumanwendung zur Verfügung stellen möchte. Das RTC-Framework unterstützt dies nicht. Es sind nur 512 Bytes, aber ich bin zwischen einem suchbaren CHAR-Treiber oder einem vollwertigen BLOCK-Treiber hin- und hergeworfen worden. Ich habe noch nie einen Blocktreiber gemacht, aber es scheint ein bisschen mehr Informationen zu benötigen als ein einfacher CHAR.

Ich könnte auch mit IOCTLS interagieren, aber das fühlt sich nicht so sauber an, wie es sein könnte. Was ist der beste Weg, diese Bytes für Userland verfügbar zu machen?

[EDIT] Ich habe vergessen zu erwähnen, dass der RTC-Chip an einem I2C-Port hängt, er wird nicht in den Speicher gemappt und ist daher kein guter Kandidat für das Mmaping. [/ EDIT]

    
Ken Farr 29.06.2010, 00:15
quelle

2 Antworten

2

Blocktreiber sind nur für Geräte, die wie Festplattenlaufwerke aussehen. Werden Sie ein Dateisystem auf Ihre 512 Bytes setzen? Nein? Machen Sie es zu einem Zeichengerät.

Du könntest es einfach tun, wie andere Fahrer es getan haben. Schau dir drivers/char/nvram.c an. Dadurch wird ein Char-Gerät erstellt, das Sie open() , read() , write() , lseek() und close() .

verwenden können     
JayM 08.07.2010, 00:48
quelle
1

Ich denke, dass ein Zeichengerätetreiber, der mmap implementiert, angemessen sein sollte. Linux Device Drives deckt das in Kapitel 15 ab.

Bearbeiten:

Nun, i2c ist ein serieller Bus, also ist mmap keine Option. Ich werde Sie auf das Essential Linux Device Drivers -Buch verweisen. Ich glaube, es hat einen Beispiel-i2c-EEPROM-Char-Gerätetreiber in Kapitel 8. Ich hoffe, das hilft.

    
Nikolai Fetissov 29.06.2010 00:24
quelle