Wayland in Embedded linux/1. Linux graphic system and DRM

2. libdrm없이 kernel의 DRM드라이버를 바로 사용하는 어플리케이션 예제

Onionfra 2017. 5. 29. 15:50

Linux Graphics system with DRM


libdrm없이 kernel의 DRM드라이버를 바로 사용하는 어플리케이션 예제


/* Opening the DRI device */

// DRM device 오픈

int fd  = open("/dev/dri/card0",O_RDWR | O_CLOEXEC);

/* Kernel Mode Setting (KMS) */

//KMS셋팅을 위해 Master권한을 얻는다

-- Acquire Master right --

ioctl(fd, DRM_IOCTL_SET_MASTER, 0);

//사용 가능한 커넥터 리소스를 찾는다

-- Get connectors resource to find available connectors --

ioctl(fd, DRM_IOCTL_MODE_GETCONNECTOR, &conn);

// CPU 렌더링을 위한 DUMB버퍼를 생성한다(GPU access불가능)
// DUMB-Buffer :
http://manpages.ubuntu.com/manpages/wily/man7/drm-memory.7.html

-- Create DUMB buffer --

ioctl(fd, DRM_IOCTL_MODE_CREATE_DUMB, &dumb);

// CRTCFramebuffer object 추가 한다

-- Add a new FB object  --

ioctl(fd, DRM_IOCTL_MODE_ADDFB, &cmd_dumb);

//drm장치 노드의 주소 공간에 옵셋을 할당하여 버퍼를 메모리 맵핑 할 수 있게 한다

-- Create an mmap offset for a dumb buffer --

ioctl(fd,DRM_IOCTL_MODE_MAP_DUMB,&map_dumb);

//CRTC 설정 적용(fbid, connector mode)

-- Set CRTC parameters --

ioctl(fd, DRM_IOCTL_MODE_SETCRTC, &crtc);

// 다른 프로세스의 dri사용을 위해 Master권한을 release한다

-- Release Master right –

ioctl(fd, DRM_IOCTL_DROP_MASTER, 0);

// FB메모리에 그린다.

-- Draw to FB –

*fb_base = “color data”



libdrm을 사용하여 DRM 사용하는 어플리케이션 예제

다음에 시간날때....