我必须将 LCD 屏幕集成到我的嵌入式 linux (ARM9) 系统中。LCD 是纵向 320x480,我需要以横向 480x320 运行屏幕。使用 LCD 配置寄存器,我可以在硬件中旋转它,使 (x,y)(0,0) 旋转 90 度。我的问题从这里开始,屏幕的宽边从 480 像素缩小到 320 像素,图片的长边超出了屏幕。这应该通过更改帧缓冲区尺寸 AFAIK 来解决,但我尝试了一些方法来做到这一点,但还没有成功。使用 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
我还尝试使用我在网上找到的“saFbdevRotation.c”上的 fb 旋转功能,该功能使用 FB IOCTL,但活动屏幕尺寸仍然不正确。
旋转 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
我还可以补充一点,系统的可用内存非常有限,这会导致 fb 不分配新缓冲区吗?但是 dmesg 中没有错误。
将感谢您的建议。