Драйвер ядра Linux: какая модель для доступа NVRAM?

Я просто записал драйвер RTC для кристалла RTC NXP на мое плате, это работает отлично. Эта микросхема также имеет некоторую RAM с аварийным батарейным питанием, которую я хотел бы сделать доступным для приложения пространства пользователя. Платформа RTC не поддерживает это. Это - только 512 байтов, но я брошен между выполнением seekable драйвера CHAR или полноценного драйвера БЛОКА. Я никогда не делал драйвера блока прежде, но это, кажется, запрашивает немного больше информации, чем простой CHAR.

Я мог также взаимодействовать через интерфейс с IOCTLS, но это не чувствует себя столь чистым, как это могло быть. Что чувствует себя подобно лучшему способу сделать эти байты доступными для пространства пользователя?

[РЕДАКТИРОВАНИЕ] я забыл упоминать, что это микросхема RTC зависает от порта I2C, она не отображается в память, таким образом не делая это хорошим кандидатом на то, чтобы отобразиться. [/РЕДАКТИРОВАНИЕ]

8
задан Ken Farr 29 June 2010 в 00:52
поделиться

2 ответа

Блочные драйверы предназначены только для устройств, похожих на дисковые накопители. Вы собираетесь разместить файловую систему на своих 512 байтах? Нет? Сделайте его символьным устройством.

Вы можете сделать это так же, как и другие драйверы. Посмотрите drivers/char/nvram.c. Он создает устройство char, которое можно открыть(), прочитать(), записать(), lseek() и закрыть().

2
ответ дан 6 December 2019 в 00:54
поделиться

Я думаю, что драйвер символьного устройства, реализующий mmap , должен подойти. Linux Device Drives рассматривается в главе 15.

Edit:

Ну, i2c - это последовательная шина, поэтому mmap не подходит. Я отсылаю вас к книге Основные драйверы устройств Linux . Я считаю, что в главе 8 есть образец драйвера i2c EEPROM для символьных устройств. Надеюсь, это поможет.

1
ответ дан 6 December 2019 в 00:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: