kms/drm을 사용하여 Linux에서 비디오 모드를 설정하는 방법은 무엇입니까?

kms/drm을 사용하여 Linux에서 비디오 모드를 설정하는 방법은 무엇입니까?

Linux에서 낮은 수준의 방식으로 비디오 모드를 설정하는 방법은 무엇입니까? 제가 아는 한, 가장 낮은 수준의 사용자 공간은 DRM을 통해 KMS를 요청하는 것입니다. 맞습니까? 그렇다면 어떻게 모드 전환을 구현하고 관련 "비디오 메모리"에 액세스합니까?

답변1

KMS(들어본 적이 없는 사람들을 위한 커널 모드 설정)는 커널 모드 비디오 드라이버를 통해 구현됩니다. 이러한 커널 모드 비디오 드라이버는 기본적으로 연결된 모니터의 기본 해상도인 프레임 버퍼 디스플레이를 구성합니다. 여러 모니터가 연결된 경우 각 모니터는 기본 해상도를 갖게 되며 가상 콘솔은 두 모니터의 최소 너비와 높이로 제한됩니다.

KMS를 사용하면 프레임버퍼가 생성되므로 프레임버퍼 구성 항목은~해야 한다일하다. KMS 드라이버가 없기 때문에 현재 사용 중인 시스템에서는 이를 확인할 수 없습니다. 하지만 나중에 KMS를 사용하여 시스템에 들어갈 예정이며 알려드리겠습니다.

바라보다video= 프레임 버퍼 시작 매개변수 설정 모드 사용에 대한 커널 문서더 많은 정보를 알고 싶습니다.

답변2

나는 당신이 실제로 당신이 요구하는 것이 무엇인지 알고 있는지 확신하지 못합니다. 아니면 대답할 수 있는 방식으로 그것을 표현할 것입니다. ...하지만 귀하의 질문에 답변해 드리겠습니다.

모드를 설정하고 "비디오 메모리"를 확보하시겠습니까? 옛날 도스 모드 엑스데이즈처럼요? 이것이 원하는 것이라면 프레임 버퍼를 사용하여 프로그래밍해야 합니다. 그렇다면 DirectFB를 사용하는 것이 더 나을 것입니다. DirectFB는 가속 기능을 갖춘 프레임 버퍼 위에 있는 매우 얇은 레이어와 같습니다. 솔직히 말하면, 애플리케이션을 합리적으로 작성해야 할 정도로 낮은 수준입니다. 모드를 설정하고 보다 낮은 수준에서 제어할 수 있습니다. 직접적인 스타일 제어를 원한다면 기본적으로 일부 비디오 메모리를 매핑하는 원시 프레임 버퍼를 작성해야 합니다. Framebuffer 성능이 좋지 않다고 생각된다면 DirectFB를 확인해 보세요. 누군가 KMS 드라이버를 로드했다면 해당 프레임 버퍼는 KMS/libdrm을 통해 설정됩니다.

libdrm은 커널 DRM을 사용하기 위한 사용자 공간 라이브러리이다. 이는 프레임버퍼도 아니고, 애플리케이션 API도 아니고, 시스템 장치 라이브러리입니다. 새 장치 드라이버를 생성하려면 libdrm이 절대적 선택입니다. 예를 들어, libdrm-radeon입니다. Linux는 DOS가 아니며 하드웨어와 직접 통신하는 유일한 방법은 커널을 통하는 것입니다. 모든 일반 애플리케이션은 코드를 하드웨어에 직접 보내지 않으므로 일부 lib/API/호출에서 제거해야 합니다. 일부 프로젝트에서는 FBUI와 같은 학술/실험 목적으로 커널 내 접근 방식을 채택합니다.

최소한 올바른 방향을 알려드릴 수 있기를 바랍니다. 그렇지 않은 경우 의견을 남기고 질문을 업데이트해야 합니다. 나는 적어도 두 번의 마이그레이션 전에 이 문제를 요청한 이후 계속 추적해 왔지만 더 자세한 답변을 얻지 못했습니다. 추가 정보가 없으면 실제로 할 말이 없습니다.

관련 정보