Linux написание драйверов графического процессора для печати произвольных выводов со стороны ядра - PullRequest
0 голосов
/ 18 февраля 2020

У меня есть вопросы по поводу драйверов графического процессора для linux ядра.

1-) Можно ли написать собственный модуль ядра для печати слов или цветов на экране, например VGA, с использованием графического процессора через PCI express?

2-) Если это так, является ли оно c общим или зависимым от устройства / чипа?

3-) Если это так, возможно ли с записью пространства MMIO?

Я хочу написать простой модуль ядра для печати произвольных значений по шине PCI express. Мой GPU имеет только выходы mDP и DVI-D и имеет большой драйвер ядра в linux ядре.

1 Ответ

1 голос
/ 18 февраля 2020

Во-первых; Давайте разделим видеокарту на несколько разных частей:

  • видеопамять (и, возможно, некоторое ПЗУ для B IOS и / или UEFI, которое используется во время загрузки, которое мы можем игнорировать, поскольку оно бесполезно после загрузки)

  • что-то, что контролирует видеопамять, преобразует физический доступ в доступ к VRAM, может включать в себя «кражу системной памяти» (для встроенного видео) и, возможно, включает некоторый механизм DMA (для ускорения передачи данных между системным ОЗУ и видеопамятью)

  • что-то, что управляет передачей видеосигналов на монитор (синхронизация в режиме видео) и перекачивает пиксельные данные из кадрового буфера в разъем (VGA, DVI, HDMI, ...) и может получать информацию (EDID / расширенные идентификационные данные дисплея) с монитора. Обратите внимание, что если видеокарта поддерживает несколько мониторов, все это необходимо будет дублировать несколько раз.

  • различные фиксированные ускорители функций - например, MPEG-декодер.

  • «процессор», который выполняет какой-то машинный код и делает что-то. Это графический процессор; и обычно используется для выполнения программ, которые были скомпилированы в другом месте (например, драйвером видео) из более переносимого языка (HLSL, GLSL, C) и используются для шейдеров и GPGPU.

1-) Можно ли написать собственный модуль ядра для печати слов или цветов на экране, например VGA, с использованием графического процессора через PCI express?

Теоретически; да. На практике было бы гораздо проще сделать это без использования графического процессора (просто записав пиксельные данные непосредственно в видеопамять / кадровый буфер, используя вместо этого процессор), отчасти потому, что использование графических процессоров не является излишним излишним, а отчасти потому, что компиляторы нужны для переносимости. для разных графических процессоров "находятся в пространстве пользователя, а не в ядре. Однако в любом случае это в основном глупо - нет никакой гарантии, что все, что на самом деле использует буфер кадров (например, может быть, полноэкранная игра), не будет перезаписывать то, что делает ядро, прежде чем оно будет отправлено на монитор, и нет гарантии, что пользователь когда-либо сможет чтобы увидеть, что сделал ядро.

2-) Если это так, является ли оно generi c или зависит от устройства / чипа?

Это очень зависит от устройства / чипа ; и также очень «зависящий от ситуации» (например, в зависимости от того, как другое программное обеспечение в пользовательском пространстве, такое как Gnome или KDE или Wine или ..., в настоящее время использует видеокарту).

3-) Если это так, возможно ли это с записью пространства MMIO?

Да (но «MMIO» включает в себя буфер кадров, память, используемую для текстур, и все регистры внутреннего контроля для всех частей видеокарта). Возможно, также можно научить кого-то играть на пианино, нанося удар в мозг иглами / электродами - «возможно» НЕ означает «легкий» или «разумный».


Делать то, что я считаю вашей целью правильно; Вы, вероятно, захотите изменить все «драйверы видеокарты» (где «драйвер видеокарты» в Linux - это множество частей, разбросанных повсюду, с частями в ядре и частями в библиотеках пользовательского пространства; где некоторые части вероятны частный / закрытый источник); так что драйвер видеокарты отвечает за установку оверлея «зарезервировано только для ядра» (который накладывается поверх любого пространства пользователя, которое требуется отобразить, для каждого отдельного монитора). Тем не менее, даже в этом случае это, вероятно, не может работать в некоторых случаях (старые и / или бюджетные видеокарты часто встречаются на серверах, которые не поддерживают оверлеи, удаленный рабочий стол, где вы используете что-то вроде RDP или X поверх сеть, а не видеокарта, видеокарты используются для "сквозного пропускания PCI" гипервизорами / виртуальными машинами).

...