linux系统GPU编程之DRM编程
背景:
framebuffer大家都知道哈,打开/dev/fb0设备节点,然后开辟一段内存(即显存),再mmap,在吧图形数据填充到这段显存里面。怎么填,比如QT,有一套图形系统,他帮你填,或者ubuntu等系统。
现在安卓手机都有GPU,Linux也跟着进步,再加上人工智能,需要GPU做硬件加速。目前Linux的显示系统基本都是基于drm驱动,这点在linux 4.0 5.0以后都非常常见。
DRM驱动原理,看这篇就够了:
DRM (Direct Rendering Manager)
一 对驱动程序的几种操作方法
我们知道,Linux对驱动的操作有以下几种:
1 一种是/dev下的设备节点文件,
2 proc文件系统
3 sys文件系统。
这里讲第一种,dev下的设备节点。Linux显卡下的设备节点是:
/dev/dri/card0
二 modeset工具使用
2.1 对于DRM显卡的测试,目前比较流行的是modeset,这个源码在我的git。
https://gitee.com/caledonian_study/modeset.git
2.2 modeset其实调用了libdrm这个库,流程是这样的。
2.3 为了适配ST的交叉工具链,我对makefile做了修改,另外我对modeset.c做了修改,为的是显示4个矩形框。
docs是makefile进行编译的,
modeset-qmake是可以用qtcreak打开进行编译的。
modeset-cmake目前还没有搞定,留着以后有时间了再搞吧。
三 编译过程
https://gitee.com/caledonian_study/modeset/blob/master/README.md
四 最终效果