Для некоторого аппаратного взлома (может предоставить подробности, если требуется), мне нужно внести небольшое изменение в модуль ядра, который является встроенным (не загружаемым) в используемом дистрибутиве.Я хочу не использовать собственное ядро или даже использовать пользовательские конфигурации по причинам переносимости в отношении будущих обновлений ядра.
Я бы предпочел использовать дополнительный модуль ядра.Однако модуль загружается другим модулем (то есть его init_function вызывается другим модулем).
То, что мне нужно изменить, - это реализация функции .write в file_operations.
Стратегия может состоять в том, чтобы отменить регистрацию chardev и перерегистрировать его с помощью модифицированной функции .write после загрузки в ядро пользовательского модуля.Это законная стратегия?Есть ли примеры кода для этого?
Я хотел бы изменить следующую строку в drivers / media / rc / lirc_dev.c:
#define LIRCBUF_SIZE 256
на
#define LIRCBUF_SIZE 1024
По сути, мне нужен более длинный буфер, чтобы избежать возврата EINVAL в строке 330
if (count > LIRCBUF_SIZE || count % 2 == 0) {
ret = -EINVAL;
goto out_unlock;
}
. Lirc_dev регистрирует символьные устройства / dev / lirc0, / dev / lirc1 и т. Д., А строки выше взяты изреализация .write структуры file_operations.
Регистрация запускается модулями rc_core с lirc_dev_init, кажется, и я также хочу избежать использования пользовательской реализации rc_core.
Я уже сделалпользовательская модификация в инструментах пространства пользователя lirc, которые также имеют это ограничение буфера в 256 единиц (= int), но оно прерывается в тот момент, когда драйвер lirc выполняет «запись» на устройство «/ dev / lirc0» сошибка ввода-вывода.
Стратегия написания 256 int chunks по существу работала бы, но она деликатна, и я не думаю, что смогу заставить ее работать с аппаратным обеспечением из-за проблем с синхронизацией.(когда «запись» в пространство ядра фактически вызывает некоторые аппаратные действия ...)
Все это кажется слишком сложным, если все, что я хочу сделать, это увеличить буфер ...