The fbdev_flush mechanism works great for targeting a single display. I would like to take advantage of the hardware stack on the RPi 4 and use both HDMI outputs. Currently when I write to /dev/fb0 both of my displays show the program output. I went looking to see if there was a secondary frame buffer (/dev/fb1) but there is not.
In doing research on this topic it seems that DRM is being used on the RPi4, and that to choose a display for my app, I will need to target the display through DRM (/sys/class/drm/card0 , card1 etc.)
Has anyone written a port for displaying selectively on the RPi4 yet? If so, could you help me get started? There doesn’t seem to be a lot of resources on how to use DRM to choose the output.
Please feel free to correct my assumptions. I’m still learning this framework.
Thanks!
/dev/fb0
on the Raspberry Pi 4 appears to simply emulate a framebuffer for compatibility. I think you would have to write a new driver that operates using the DRM kernel APIs and not the fbdev
ones.
I found a site that appears to have a tutorial on how to get started with the DRM APIs. They do appear significantly more cumbersome to use than fbdev
.
Perhaps there is another way to get fb1
to show up without needing to use the DRM APIs. This forum thread looks relevant.
@embeddedt Thank you very much for your reply.
I was able to get 2 frame buffers to be available in /dev/ with the following configuation in /boot/config.txt
I think the key was commenting out: dtoverlay=vc4-fkms-v3d
hdmi_pixel_encoding:0=2
hdmi_group:0=2
hdmi_mode:0=27
hdmi_ignore_edid:0=0xa5000080
hdmi_pixel_encoding:1=2
hdmi_group:1=2
hdmi_mode:1=27
hdmi_ignore_edid:1=0xa5000080
[all]
#dtoverlay=vc4-fkms-v3d
max_framebuffers=2
gpu_mem=512
Hopefully this will help someone else in the future.
Thanks!
2 Likes