DRM
The Direct Rendering Manager (DRM) is a subsystem of the Linux kernel responsible for
interfacing with GPUs of modern video cards. DRM exposes an API that user space programs
can use to send commands and data to the GPU, and perform operations such as configuring
the mode setting of the display. DRM was first developed as the kernel space component of
the X Server's Direct Rendering Infrastructure,[1] but since then it has been used by other
graphic stack alternatives such as Wayland.
drm驱动
内核的drm主要是为了实现图形的dri硬件加速而服务的,通过提供一系列ioctls的操作,使得应用层的软件可以直接对显卡硬件操作。驱动实际使用drm是经过libdrm封装之后的借口。内核drm主要包括:vblank事件处理,内存管理,输出管理,framebuffer管理,命令注册,fencing,suspend/resume 支持,dma服务等。
内核drm的核心是围绕structdrm_device结构展开(这个结构的定义见Documents/DocBook/drm.tmpl),每种显卡的drm都会声明一个静态的structdrm_device变量以radeon驱动为例(见drivers/gpu/drm/radeon/radeon_drv.c)。radeon是一家公司的显卡,i915是intel集成显卡,驱动位于drivers/gpu/drm/i915/i915_drv.c。
与应用程序接口
虽然应用程序可以直接通过系统调用openioctl等与drm交互,但是实际上在drm使用中为了方便总是在系统中安装了libdrm对drm的
各个操作进行封装,这样更方便使用而不用去记忆那些ioctl的num和与之对应的函数。
libdrm
libdrm的编译:
(1)apt install libpthread-stubs0-dev
(2)apt install libpciaccess-dev
(3)./configure
(4)make
(5)make install
测试代码:
下载:https://download.csdn.net/download/xgbing/10338858