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

1. DRM driver & panel output

Onionfra 2017. 6. 8. 13:16

*아래 내용은 임베디드 리눅스 기반 장치로 한정 합니다)

모바일 기기를 포함한 모든 디스플레이 장치에서 보여지는 한장(한 frame)의 화면은 어플리케이션에 의해 만들어진 LCD패널 크기 만큼의 최종 합성된 메모리 데이터(FHD인경우 대략 8MByte)가 DMA를 통해 LCD패널로 전달 되어 출력된 결과 이다.


DRM이 도입 되면서 기존 FBDEV에서 하지 못했던 "그래픽 메모리의 부분적인 갱신(plane update)"이 가능해 졌다. 기존 FBDEV에서는 그래픽메모리의 어느 한 부분이 바뀌면 전체 화면을 다시 그려 그래픽 메모리에 다시 업데이트(full refresh) 해 주어야 했지만 DRM 드라이버에서는 기존 영역은 그대로 놔두고 바뀐 부분만 업데이트 할 수 있다. 그만큼 메모리를 동작을 효율적으로 운용할수 있어 저전력이나 성능 관점에서 이득을 얻을수 있다.(최종화면을 위해 다시 모든 plane들을 합성할 필요가 없다)


이와 같은 맥락으로 최근 몇년 전부터 LCD패널 측면에서도 저전력을 위해 비슷한 메커니즘을 지원하고 있다. LCD디바이스가 내부적으로 빠른 메모리를 가지고 있어 AP로부터 최종 전달된 데이터를 저장할 수 있다. 이 메모리를 이용하여 AP에서 갱신 요청이 오지 않으면 그전의 화면을 스스로 계속 업데이트 하며(Self refresh), 갱신 요청이 왔을 때만 새로운 데이터로 패널을 업데이트 한다. DRM에서와 같이 AP로부터 부분적인 데이터 요청이 오면 해당 부분에 대한 갱신만도 가능하다. 예를 들어 안드로이드 홈화면에서 사용자의 터치 이벤트가 발생하지 않으면 패널은 기존에 패널 메모리에 있는 데이터를 주기적으로 업데이트 하며, AP로부터 상단 스테이터스바의 상태(시간, 알람)가 변경되는 이벤트가 올 경우 스테이터스바 영역만 업데이트 한다. 이처럼 패널 메모리를 이용하여 AP와 상관 없이 화면을 업데이트 할 경우 AP는 sleep모드에 진입할 수 있어 저전력 관점에서 유리하다고 할 수 있다.