DRM 및 Frambuffer를 사용하여 지정된 가상 크기를 시뮬레이션합니다.

DRM 및 Frambuffer를 사용하여 지정된 가상 크기를 시뮬레이션합니다.

AM335x 프로세서에서 이중 버퍼링을 사용하려고 합니다. 우리가 만들지 않은 데모 이미지에서 실행되는 예가 있습니다. 저는 주요 리소스를 사용하여 우리 자신의 이미지를 통합하는 작업을 하고 있습니다.

이 시스템은 tilcdc 드라이버를 사용합니다. 우리는 이 드라이버가 제공하는 fbdev 에뮬레이션을 사용하고 있습니다. 매개변수를 설정하면 이 호출에서 오류가 발생합니다.

unsigned int Yold = variable_info.yres_virtual;
variable_info.yres_virtual = variable_info.yres * 2;

if (ioctl(fdfb, FBIOPUT_VSCREENINFO, &variable_info))

drm 드라이버에 대해 향상된 디버그 인쇄 출력을 켜기 위해 /sys/module/drm/parameters/debug에 0xf를 에코합니다. 다음과 같은 오류 메시지를 볼 수 있습니다.

fb 사용자 공간에서 현재 1024x768-32(가상 1024x1536) > 1024x768-32보다 큰 너비/높이/bpp를 요청했습니다.

drm은 기본적으로 추가 해상도에 충분한 메모리만 할당한다는 참조 자료를 본 적이 있습니다. 어디서 이런 일이 발생하는지, 할당된 메모리 양을 늘리는 방법을 알아보려고 합니다.

샘플 이미지는 테스트 목적으로 제공됩니다. 이 이미지에서 애플리케이션이 실행되는 이유는 기본 할당 메모리 크기가 높이 768의 삼중 버퍼링에 적합하기 때문이라는 것을 알았습니다.

당신의 도움을 주셔서 감사합니다.

*추가해서 수정했습니다

드라이버의 소스 코드를 살펴봤지만 드라이버가 로드되는 동안 버퍼 크기를 변경할 수 있다는 결론을 내리지 못했습니다. 나는 어떤 대가를 치르더라도 값을 하드코딩하는 것을 피하고 싶습니다.

나는 tilcdc가 직접 제공하는 프레임 버퍼 시뮬레이션 아래에 crtc의 정보를 사용하여 연속적인 메모리 할당을 생성하는 호출이 있다는 것을 알고 있지만 fb->height 및 width라는 항목만 사용하는 것 같습니다.

관련 정보