Framebuffer 与输入设备¶
默认图形接口为 /dev/fb0,触摸屏通过 /dev/input/event* 提供 evdev 事件。
查看 framebuffer 参数¶
cat /sys/class/graphics/fb0/virtual_size
cat /sys/class/graphics/fb0/bits_per_pixel
cat /sys/class/graphics/fb0/stride
应用通常通过以下流程绘图:
open("/dev/fb0", O_RDWR)- 使用
FBIOGET_FSCREENINFO和FBIOGET_VSCREENINFO查询布局 - 使用
mmap映射显存 - 按
line_length和像素格式写入颜色值
不能假定每行字节数等于 宽度 x 每像素字节数,应始终使用驱动返回的 line_length。
确定触摸事件节点¶
cat /proc/bus/input/devices
在 Goodix 设备段中查找:
Handlers=event1
事件编号会随已注册输入设备变化,应用应允许通过命令行或配置文件指定设备节点。
编译触摸与 framebuffer 测试程序¶
cd ~/v3s-workspace/projects/touch-fb-test
make CROSS_COMPILE=arm-linux-gnueabihf-
scp touch_fb_test root@<开发板IP>:/root/
开发板上先停止默认 LVGL 程序,避免两个程序同时写 framebuffer:
/etc/init.d/S20lvgl-v9-demo stop
/root/touch_fb_test -f /dev/fb0 -i /dev/input/event1
程序会绘制网格并在触摸位置显示标记。设备编号不同则替换 -i 参数。
坐标方向¶
触摸坐标与画面方向不一致时,优先在设备树 Goodix 节点中使用标准属性:
touchscreen-swapped-x-y;
touchscreen-inverted-x;
touchscreen-inverted-y;
只添加实际需要的属性,重新编译并更新 DTB 后测试四角坐标。