前言
最近有个需求,需要在ubuntu server上制作界面效果。记录下调研过程
正文
1 调研
最有价值的参考,一篇搞定
https://github.com/dvdhrm/docs/blob/master/drm-howto/modeset.c
2 使用
实验发现上述老外的用法是ok的,代码直接可以运行,我的是在ubuntu 18和ubuntu server 18上运行成功的。
国内有些文章里面并没有处理crtc和connector的对应关系,用法是有问题的,可能导致程序运行了,屏幕并没有反应。
编译
编译前需要安装libdrm,编译时需要引用头文件和依赖该库
sudo apt install libdrm-dev
gcc modeset.c -o testDRM -I /usr/include/drm/ -ldrm
运行
1) 在ubuntu 18中运行时发现drmModeSetCrtc绑定crtc和connentor时没有权限
cannot set CRTC for connector 86 (13): Permission denied
其实是因为connector当前被Desktop程序占用,这时候需要Ctrl+Alt+F1进入命令行模式,再运行就ok了。
2)运行发生黑屏时,可以使用Ctrl+C终止程序,Ctrl+Alt+F7回到桌面,Ctrl+Alt+F1再次进入命令行查看是否有报错信息
tips: 另外,在绘制的时候不需要,一个像素一个像素去改,如果需要绘制图片,可以先把图像转为RGBA格式,然后memcpy可以一次到位。