grebenkoff 0 28 сентября, 2017 Опубликовано 28 сентября, 2017 · Жалоба ...подход к решению по изменению видео вывода... как в общем в linux и в каком формате данные передаются на видеокарту Ответа на этот вопрос я пока не знаю, но вот, какая картина мира у меня к настоящему моменту сложилась. Так как в недрах Linux я разбираюсь слабо, начну с противоположного конца. У меня имеется вот такой монитор: https://www.terraelectronica.ru/catalog_inf...hp?CODE=1919182 c разрешением 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 и если тут есть специалисты, то любезно прошу вас изложить как оно там на самом деле ) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
grebenkoff 0 25 октября, 2017 Опубликовано 25 октября, 2017 · Жалоба ..... Но похоже, это то что нужно, так как там есть строки, устанавливающие это самое разрешение: .... horizontal_active_pixels = 1024; .... vertical_active_lines = 768; да, это было то, что нужно, заменил на свои значения и разрешение стало какое нужно Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться