Цитата(RamZoom @ Sep 28 2017, 20:02)
...подход к решению по изменению видео вывода... как в общем в linux и в каком формате данные передаются на видеокарту
Ответа на этот вопрос я пока не знаю, но вот, какая картина мира у меня к настоящему моменту сложилась. Так как в недрах Linux я разбираюсь слабо, начну с противоположного конца.
У меня имеется вот такой монитор:
https://www.terraelectronica.ru/catalog_inf...hp?CODE=1919182c разрешением 800х480 точек. Подключается по HDMI. На плате DE10-Nano тоже есть HDMI разъем, сигнал на который поступает от микросхемы ADV7513
http://www.analog.com/media/en/technical-d...ets/ADV7513.pdfЭта микросхема преобразует обычный видеосигнал, состоящий из 24 бит цвета, пиксель-клока и сигналов вертикальной и горизонтальной синхронизации (не знаю как он правильно называется, пусть будет TFT-интерфейс) в HDMI. На плате DE1-SoC вместо ADV7513 установлена микросхема ADV7123 преобразующая TFT-интерфейс в аналоговый VGA. Еще у ADV7513 есть канал I2C, через который ее можно конфигурировать. Что конкретно в ней настраивают я пока не выяснял. Провода TFT-интерфейса и I2C подключены к FPGA-части SoC. В FPGA находится аппаратура, читающая данные, представляющие собой картинку, из Frame Buffer и выдающая ее наружу по TFT-интерфейсу. Frame Buffer - это кусок памяти в DDR3. Чтобы читать оттуда, аппаратура FPGA использует fpga2sdram мост (вроде бы..., надо уточнить). Теперь переходим к HPS, где живет Linux. Чтобы писать данные в кусок памяти, представляющий собой Frame Buffer есть драйвер (модуль), после загрузки которого появляется устройство /dev/fb0 - у меня оно так называется. Надо полагать, что то что будет записано в это устройство, отобразится на экране.
Чтобы монитор правильно отображал картинку, в строке должно быть нужное кол-во пикселей (800) и в кадре правильное число строк (480). В моей сборке по умолчанию разрешение 1024х768, поэтому часть рабочего стола выходит за край экрана. На microSD карте, с которой грузится моя плата, обнаружил 3 подозрительных приложения:
de10_nano_hdmi_config.bin,
dump_adv7513_regs.bin и
dump_adv7513_edid.bin. Подозреваю, что сразу после загрузки запускается либо первое либо все три по-очереди и настраивают аппаратуру в FPGA и микросхему ADV7513 через I2C. Нормального исходного кода этих приложений я не нашел, только в виде патча в составе сценариев bitbake
https://github.com/01org/meta-de10-nano/blo...ebug-apps.patch Но похоже, это то что нужно, так как там есть строки, устанавливающие это самое разрешение:
Код
pixel_clock_MHz = 65000000;
horizontal_active_pixels = 1024;
horizontal_blanking_pixels = 320;
vertical_active_lines = 768;
vertical_blanking_lines = 38;
horizontal_sync_offset = 24;
horizontal_sync_width = 136;
vertical_sync_offset = 3;
vertical_sync_width = 6;
interlaced = 0;
и часто упоминается название микросхемы ADV7513
В общем, пока у меня весьма расплывчатое представление о механизме отображения в системе SoC+Linux и если тут есть специалисты, то любезно прошу вас изложить как оно там на самом деле )