Создание драйвера Linux для IP с отметкой времени - PullRequest
0 голосов
/ 16 октября 2018

У меня есть встроенная плата с запущенной Linux.Я хочу использовать PTP (IEEE 1588) для синхронизации платы с сетевым гроссмейстером.На плате используется устройство Xilinx Zynq с процессорами ARM и ПЛИС.Я разработал некоторые IP, чтобы делать отметки времени и RTC.Теперь мне нужно связать эти два IP-адреса с Linux.Поэтому мне нужно создать несколько драйверов, но, поскольку я не являюсь экспертом в Linux, я действительно не знаю, как это сделать.

У меня есть базовые представления о разработке драйверов, но проблема заключается в том, как настроить временные метки.Я планирую использовать программу Linux PTP для выполнения PTP.Из того, что я могу понять, посмотрев на другие драйверы, которые делают это, есть флаг SO_TIMESTAMPING, который включает аппаратную отметку времени.Тогда есть некоторые функции в файлах skb (буфер буфера), которые его настраивают.Может кто-нибудь объяснить, что потребуется в драйвере для взаимодействия с программой PTP.

Спасибо

1 Ответ

0 голосов
/ 22 октября 2018

Написание модулей ядра - непростая задача.Вы определенно столкнетесь с кривой обучения.

Есть больше частей, чем это, но на высоком уровне, есть несколько вещей, которые вам нужно будет сделать.

  1. Определите, гдев памяти вы хотите обмениваться информацией между вашим IP-адресом и драйвером.
  2. Добавьте запись дерева устройств, которая определяет диапазон памяти, который вы будете использовать.
  3. Напишите драйвер для взаимодействия с вашим IP-адресом.
  4. Предоставление информации пользователям.

Пока вы разбираетесь, вы можете жестко закодировать адреса памяти в вашем драйвере, но в конечном итоге драйвер должен извлечь области памяти издерево устройств.Несколько советов:

  • Драйвер должен будет запросить области памяти (request_mem_region) и затем отобразить их (ioremap_nocache).
  • Затем вы можете предоставить эту информацию пользователям, создав файлы в / proc / или / dev /, создав сокеты или используя другой метод
  • Если вы собираетесь использовать сокеты UDP вядро, ознакомьтесь с https://lwn.net/Articles/625077/
  • Начните с небольшого введения в учебники по написанию модулей, например http://derekmolloy.ie/writing-a-linux-kernel-module-part-1-introduction/
...