Мне нужно интегрировать ЖК-экран в мою встроенную систему Linux (ARM9). ЖК-экран портретный 320x480, и мне нужно запустить экран в альбомной ориентации 480x320. Используя регистр конфигурации ЖК-дисплея, я могу аппаратно повернуть его так, чтобы (x, y) (0,0) повернулся на 90 градусов. Здесь начинается моя проблема, широкая сторона экрана сужается с 480 пикселей до 320, а длинная сторона изображения выходит за пределы экрана. Это должно быть исправлено путем изменения размеров буфера кадра, насколько мне известно, но я попробовал несколько способов сделать это, но пока безуспешно. используя fbset, ниже приведены настройки для портрета:
mode "480x320-55"
# D: 9.091 MHz, H: 18.182 kHz, V: 55.096 Hz
geometry 480 320 480 320 16
timings 110000 4 4 4 4 12 2
rgba 5/0,6/5,5/11,0/0
endmode
Отправка команды:
fbset --geometry 480 320 480 320 16
Результат:
mode "480x320-55"
# D: 9.091 MHz, H: 18.182 kHz, V: 55.096 Hz
geometry 480 320 480 320 16
timings 110000 4 4 4 4 12 2
rgba 5/0,6/5,5/11,0/0
endmode
Из-за чего изображение появляется несколько раз и перекрывается, но ширина экрана все еще слишком мала.
Я попытался обеспечить двойной размер экрана для виртуальных xres и yres, но без изменений.
fbset --geometry 480 320 960 640 16
Я также попытался использовать функцию поворота fb, которую я нашел в Интернете «saFbdevRotation.c», которая использует IOCTL FB, но размер активного экрана по-прежнему неверен.
повернуть на 90 градусов, посмотреть вывод
$> ./fb_rotate -r 90
## Before rotation
### Fix Screen Info:
Line Length - 640
Physical Address = 81a00000
Buffer Length = 1048576
### Var Screen Info:
Xres - 320
Yres - 480
Xres Virtual - 320
Yres Virtual - 480
Bits Per Pixel - 16
Pixel Clk - 110000
Rotation - 0
## after rotation
### Fix Screen Info:
Line Length - 960
Physical Address = 81a00000
Buffer Length = 1048576
### Var Screen Info:
Xres - 480
Yres - 320
Xres Virtual - 480
Yres Virtual - 320
Bits Per Pixel - 16
Pixel Clk - 110000
Rotation - 90
Я также могу добавить, что система очень ограничена свободной памятью, может ли это привести к тому, что фб НЕ выделяет новый буфер? Однако ошибок в dmesg не было.
Буду признателен за ваш совет.