Драйвер представляет собой модуль ядра Linux.
Загрузите исходный код ядра linux, посмотрите код существующих драйверов фреймбуфера вdrivers/video/fbdev
(github здесь)и документацию вDocumentation/fb
(github). Google для учебников, как писать модули ядра, сначала потренируйтесь с простым модулем.
Простого сопоставления памяти будет недостаточно, вам придется реализовать несколько ioctl
с.
Написание драйверов ядра — непростая задача. Если вам приходится задавать подобные вопросы (, а вы задавали их много за последние несколько дней ), вы, вероятно, не сможете это сделать.
X — это сервер для протокола X. Он может использовать оборудование через модули ядра DRM, а также может использовать оборудование через драйверы кадрового буфера (с fbdev
X-драйвером ). Подробности об этом легко найти в сети, погуглить. /dev/fb0
— это устройство кадрового буфера, поэтому вам не нужно беспокоиться о X или DRM.
Как написано в моем комментарии, я чувствую, что ваш пример не соответствует вашему объяснению, но я предполагаю, что вы на самом деле ищете что-то вроде
sed 'H;x;s/\(\n[0-9]*\)\(\n.*\)*\1\(.*\)$/\1\3\2/;h;$!d;s/^\n//
Идея состоит в том, чтобы собрать все строки в области хранения и проверить, начинается ли последняя строка с идентификатора, который у нас уже был ранее:
H;x
означает, что мы добавляем все строки в пространство хранения, а затем обмениваем пространство хранения и пространство шаблонов. Обратите внимание, что это помещает полезную новую строку в начало s/\(\n[0-9]*\)\(\n.*\)*\1\(.*\)$/\1\3\2/
находит строку идентификатора (, состоящую только из цифр ), и проверяет, соответствует ли последняя добавленная строка этому идентификатору. Если да, переместите оставшуюся часть строки за идентификатор. *
позади `(\n.) кажется ерундой, но необходим для обработки случая, когда линия IP может находиться сразу за линией ID. h;$!d
сохраняет строку обратно в область удержания и продолжает со следующей строки без вывода s/^\n//
окончательно удаляет начальную новую строку ;x;s/ (\n[0 -9])(\n.)\1 ([0 -9.] *)/\1\3\2/;x;$!d;g;s/^\n//' Обновление для расширенных регулярных выражений
Если вы хотите использовать расширенные регулярные выражения (вариант -E
, как и в вашем вопросе ), синтаксис будет
sed 'H;x;s/(\n[0-9]*)(\n.*)*\1(.*)$/\1\3\2/;h;$!d;s/^\n//
, но обратите внимание, что обратные ссылки(\1
)не являются частью стандарта POSIX ERE, поэтому они могут быть реализованы не всеми разновидностями sed
.