Как написать пользовательскую функцию регистрации устройства для пользовательского устройства, такого как RTC или АЦП и т. Д.? - PullRequest
0 голосов
/ 12 июня 2019

Я новичок в написании встроенного драйвера устройства.Я пытаюсь написать собственный драйвер для моего встроенного устройства.как я знаком с написанием Char драйверов, UIO, MISC фреймворков.скажем, я хочу написать свой собственный драйвер устройства ядра для модуля RTC (часы реального времени).

Объявление пользовательской структуры устройства

struct rtc685_device{
struct device dev;
struct module *owner;
int id 
const struct rtc685_class_ops *ops
.....
}

Объявление операций пользовательской структуры RTC

struct rtc685_class_ops{
int (*open) (struct device*)
void(*release)(struct device*)
int(*get_time)(struct device *, struct rtc685_data*)
....
}

Зарегистрировать устройство с ядром

 struct rtc685_device *rtc685_device_register(const char *name,
struct device *dev, const struct rtc685_class_ops *ops,
struct module *owner)

Мой вопрос: как написать исходный код этой функции?я могу увидеть некоторый случайный код для этой функции регистра.но я не могу понятьПожалуйста, помогите мне понять шаги для создания полной пользовательской функции регистрации драйвера устройства.наконец, я аппаратный парень и не очень разбираюсь в вещах ядра.Спасибо

1 Ответ

3 голосов
/ 12 июня 2019

Пожалуйста, не катите такой кастомный драйвер.Для RTCS существует подсистема RTC, которая будет обрабатывать все взаимодействие ядра и пространства пользователя.Он расположен в драйверах / RTK.Для АЦП есть также подсистема IIO, расположенная в drivers / iio / adc.

Они оба предоставляют специфичные для драйвера структуры, которые вам необходимо заполнить.Для RTC это struct rtc_device и struct rtc_class_ops.rtc_class_ops содержит все обратные вызовы, которые вы можете (или не можете) реализовывать, чтобы ваш RTC работал, такие как read_time, set_time, read_alarm и set_alarm.Эти обратные вызовы будут вызываться при необходимости (например, когда приложение в пользовательском пространстве считывает время) подсистемой.

После того, как вы заполнили обе структуры, вы должны зарегистрировать свой драйвер, используя функцию регистрации подсистемы, rtc_register_device.

Вы можете взглянуть на драйвер rtc-pl030 , за которым очень просто следовать.

...