Я просто записал драйвер RTC для кристалла RTC NXP на мое плате, это работает отлично. Эта микросхема также имеет некоторую RAM с аварийным батарейным питанием, которую я хотел бы сделать доступным для приложения пространства пользователя. Платформа RTC не поддерживает это. Это - только 512 байтов, но я брошен между выполнением seekable драйвера CHAR или полноценного драйвера БЛОКА. Я никогда не делал драйвера блока прежде, но это, кажется, запрашивает немного больше информации, чем простой CHAR.
Я мог также взаимодействовать через интерфейс с IOCTLS, но это не чувствует себя столь чистым, как это могло быть. Что чувствует себя подобно лучшему способу сделать эти байты доступными для пространства пользователя?
[РЕДАКТИРОВАНИЕ] я забыл упоминать, что это микросхема RTC зависает от порта I2C, она не отображается в память, таким образом не делая это хорошим кандидатом на то, чтобы отобразиться. [/РЕДАКТИРОВАНИЕ]
Блочные драйверы предназначены только для устройств, похожих на дисковые накопители. Вы собираетесь разместить файловую систему на своих 512 байтах? Нет? Сделайте его символьным устройством.
Вы можете сделать это так же, как и другие драйверы. Посмотрите drivers/char/nvram.c
. Он создает устройство char, которое можно открыть()
, прочитать()
, записать()
, lseek()
и закрыть()
.
Я думаю, что драйвер символьного устройства, реализующий mmap
, должен подойти. Linux Device Drives рассматривается в главе 15.
Ну, i2c - это последовательная шина, поэтому mmap
не подходит. Я отсылаю вас к книге Основные драйверы устройств Linux . Я считаю, что в главе 8 есть образец драйвера i2c EEPROM для символьных устройств. Надеюсь, это поможет.