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

1. DRM driver & panel output

*아래 내용은 임베디드 리눅스 기반 장치로 한정 합니다) 모바일 기기를 포함한 모든 디스플레이 장치에서 보여지는 한장(한 frame)의 화면은 어플리케이션에 의해 만들어진 LCD패널 크기 만큼의 최종 합성된 메모리 데이터(FHD인경우 대략 8MByte)가 DMA를 통해 LCD패널로 전달 되어 출력된 결과 이다. DRM이 도입 되면서 기존 FBDEV에서 하지 못했던 "그래픽 메모리의 부분적인 갱신(plane update)"이 가능해 졌다. 기존 FBDEV에서는 그래픽메모리의 어느 한 부분이 바뀌면 전체 화면을 다시 그려 그래픽 메모리에 다시 업데이트(full refresh) 해 주어야 했지만 DRM 드라이버에서는 기존 영역은 그대로 놔두고 바뀐 부분만 업데이트 할 수 있다. 그만큼 메모리를 동작을 효율적으..

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

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_GETCONN..

1. 임베디드 linux 그래픽 시스템과 DRM

디스플레이 패널은 CPU/GPU가 준비해 놓은 버퍼를 특정 주기마다 출력한다(AP를 사용하는 임베디드에서는 디스플레이 컨트롤러 H/W IP가 이역할을 담당한다). 이 출력되는 구간을 Vertical Blank(일반적인 패널에서 좌측 위 끝에서 우측아래 끝까지 그려지는 구간)라고 하며 이 주기가 패널의 fps를 결정 하게 된다. 또한 tearing을 방지하기 위해 이 구간 동안 AP의 디스플레이 컨트롤러 IP가 frame buffer에 접근하지 않도록 구현되어 있다.(Vsync, sync/fence 활용)*tearing: framebuffer가 패널로 출력 되고 있는도중 CPU가 frambuffer 영역을 갱신하여 패널 화면에 다음 frame이 섞여 출력되어 화면이 깨져보이는 현상 예를 들어 60fps인 ..