RaspberryPi KMS HDMI 출력 그래픽 드라이버
출판사 마크
2020-2023 Raspberry Pi Ltd(이전의 Raspberry Pi (Trading) Ltd.) 이 문서는 Creative Commons Attribution-NoDerivatives 4.0 International(CC BY-ND 4.0) 라이선스에 따라 사용이 허가되었습니다. 빌드 날짜: 2023-02-10 빌드 버전: githash: c65fe9c-clean
법적 고지 사항
때때로 수정되는 Raspberry PI 제품(데이터시트 포함)의 기술 및 신뢰성 데이터("리소스")는 "있는 그대로" Raspberry PI LTD("RPL")에 의해 제공되며 모든 명시적 또는 묵시적 보증을 포함하되 이에 제한되지 않습니다. 상품성 및 특정 목적에의 적합성에 대한 묵시적 보증은 부인됩니다. 관련 법률이 허용하는 최대 한도 내에서 RPL은 어떠한 경우에도 직접적, 간접적, 부수적, 특별, 징벌적 또는 결과적 손해(대체 상품 또는 서비스의 조달, 사용 손실, 데이터 손실을 포함하되 이에 국한되지 않음)에 대해 책임을 지지 않습니다. , 또는 이익, 또는 사업 중단) 그러나 어떤 방식으로든 자원의 사용에서 발생하는 계약, 무과실 책임 또는 불법 행위(과실 또는 기타 포함)에 관계없이 발생하고 모든 책임 이론에 따라 가능하다고 조언한 경우에도 마찬가지입니다. 그러한 손해. RPL은 언제라도 추가 통지 없이 자원 또는 자원에 설명된 모든 제품에 대한 개선, 개선, 수정 또는 기타 수정을 할 수 있는 권리를 보유합니다. 리소스는 적절한 수준의 디자인 지식을 가진 숙련된 사용자를 대상으로 합니다. 사용자는 리소스의 선택 및 사용과 리소스에 설명된 제품의 적용에 대해 전적으로 책임을 집니다. 사용자는 리소스 사용으로 인해 발생하는 모든 책임, 비용, 손해 또는 기타 손실에 대해 RPL을 배상하고 무해하게 유지하는 데 동의합니다. RPL은 사용자에게 Raspberry Pi 제품과 함께 리소스를 사용할 수 있는 권한을 부여합니다. 자원의 다른 모든 사용은 금지됩니다. 다른 RPL 또는 기타 제XNUMX자의 지적 재산권에 대한 라이선스는 부여되지 않습니다. 고위험 활동. Raspberry Pi 제품은 핵 시설, 항공기 내비게이션 또는 통신 시스템, 항공 교통 관제, 무기 시스템 또는 안전에 중요한 응용 프로그램(생명 유지 장치 포함)과 같이 안전 성능이 요구되는 위험한 환경에서 사용하도록 설계, 제조 또는 의도되지 않았습니다. 시스템 및 기타 의료 기기) 제품의 고장이 직접적으로 사망, 부상 또는 심각한 물리적 또는 환경적 손상("고위험 활동")으로 이어질 수 있는 경우. RPL은 특히 고위험 활동에 대한 적합성에 대한 명시적 또는 묵시적 보증을 부인하며 고위험 활동에서 Raspberry Pi 제품의 사용 또는 포함에 대해 어떠한 책임도 지지 않습니다. Raspberry Pi 제품은 RPL의 표준 약관에 따라 제공됩니다. RPL의 리소스 제공은 RPL의 표준 약관을 확장하거나 달리 수정하지 않으며 여기에 표현된 면책 및 보증을 포함하되 이에 국한되지 않습니다.
문서 버전 기록
문서의 범위
이 문서는 다음 Raspberry Pi 제품에 적용됩니다.
소개
KMS(Kernel Mode Setting) 그래픽 드라이버의 도입으로 Raspberry Pi Ltd는 비디오 출력 시스템의 레거시 펌웨어 제어에서 더 많은 오픈 소스 그래픽 시스템으로 이동하고 있습니다. 그러나 여기에는 고유한 일련의 문제가 있습니다. 이 문서는 새 시스템으로 이동할 때 발생할 수 있는 모든 문제를 돕기 위해 작성되었습니다. 이 백서는 Raspberry Pi가 Raspberry Pi OS를 실행하고 있으며 최신 펌웨어 및 커널로 완전히 최신 상태라고 가정합니다.
술어
DRM: 그래픽 처리 장치(GPU)와 통신하는 데 사용되는 Linux 커널의 하위 시스템인 Direct Rendering Manager. FKMS 및 KMS와 제휴하여 사용됩니다.
디지털 비디오: HDMI의 전신이지만 오디오 기능은 없습니다. HDMI-DVI 케이블 및 어댑터를 사용하여 Raspberry Pi 장치를 DVI 장착 디스플레이에 연결할 수 있습니다.
EDID : 확장 디스플레이 식별 데이터. 비디오 소스에 대한 기능을 설명하는 디스플레이 장치용 메타데이터 형식입니다. EDID 데이터 구조에는 제조업체 이름과 일련 번호, 제품 유형, 물리적 디스플레이 크기, 디스플레이에서 지원하는 타이밍 및 덜 유용한 데이터가 포함됩니다. 일부 디스플레이에는 결함이 있는 EDID 블록이 있을 수 있으며, 이러한 결함이 디스플레이 시스템에서 처리되지 않으면 문제가 발생할 수 있습니다.
FKMS(vc4-fkms-v3d): 가짜 커널 모드 설정. 펌웨어가 여전히 저수준 하드웨어를 제어하는 동안(예:amp파일, 고화질 멀티미디어 인터페이스(HDMI) 포트, 디스플레이 직렬 인터페이스(DSI) 등), 표준 Linux 라이브러리는 커널 자체에서 사용됩니다. FKMS는 Buster에서 기본적으로 사용되지만 Bullseye에서는 KMS를 위해 더 이상 사용되지 않습니다.
HDMI : 고화질 멀티미디어 인터페이스는 비압축 비디오 데이터와 압축 또는 비압축 디지털 오디오 데이터를 전송하기 위한 전용 오디오/비디오 인터페이스입니다.
HPD: 핫플러그 감지. 연결된 디스플레이 장치가 있음을 나타내기 위해 어설션하는 물리적 와이어입니다.
KMS: 커널 모드 설정; 보다 https://www.kernel.org/doc/html/latest/gpu/drm-kms.html 상세 사항은. Raspberry Pi에서 vc4-kms-v3d는 KMS를 구현하는 드라이버이며 종종 "KMS 드라이버"라고 합니다. 레거시 그래픽 스택: Linux 프레임 버퍼 드라이버에 의해 노출되는 VideoCore 펌웨어 BLOB에서 완전히 구현되는 그래픽 스택입니다. 레거시 그래픽 스택은 최근까지 대부분의 Raspberry Pi Ltd 장치에서 사용되었습니다. 이제 점진적으로 (F)KMS/DRM으로 대체되고 있습니다.
HDMI 시스템 및 그래픽 드라이버
Raspberry Pi 장치는 비디오 출력을 위해 최신 LCD 모니터 및 TV에서 매우 일반적으로 사용되는 HDMI 표준을 사용합니다. Raspberry Pi 3(Raspberry Pi 3B+ 포함) 및 이전 장치에는 전체 크기 HDMI 커넥터를 사용하여 1920 × 1200 @60Hz 출력이 가능한 단일 HDMI 포트가 있습니다. Raspberry Pi 4에는 4개의 마이크로 HDMI 포트가 있으며 두 포트 모두에서 0K 출력이 가능합니다. 설정에 따라 Raspberry Pi 4의 HDMI 4 포트는 최대 60kp4까지 가능하지만 두 개의 30K 출력 장치를 사용하는 경우 두 장치 모두에서 p2으로 제한됩니다. 버전에 관계없이 그래픽 소프트웨어 스택은 연결된 HDMI 장치의 속성을 조사하고 HDMI 시스템을 적절하게 설정하는 역할을 합니다. 레거시 및 FKMS 스택은 모두 VideoCore 그래픽 프로세서의 펌웨어를 사용하여 HDMI 존재 및 속성을 확인합니다. 반대로 KMS는 완전히 오픈 소스인 ARM 측 구현을 사용합니다. 이것은 두 시스템의 코드 베이스가 완전히 다르다는 것을 의미하며, 경우에 따라 두 접근 방식 간에 다른 동작이 발생할 수 있습니다. HDMI 및 DVI 장치는 EDID 블록이라는 메타데이터를 사용하여 소스 장치에 자신을 식별합니다. 이것은 IXNUMXC 연결을 통해 디스플레이 장치에서 소스 장치에 의해 읽혀지며 그래픽 스택에 의해 수행되는 것처럼 최종 사용자에게 완전히 투명합니다. EDID 블록에는 많은 정보가 포함되어 있지만 주로 디스플레이가 지원하는 해상도를 지정하는 데 사용되므로 적절한 해상도를 출력하도록 Raspberry Pi를 설정할 수 있습니다.
부팅 중 HDMI 처리 방법
처음 전원을 켰을 때 Raspberry Pi는 여러 s를 거칩니다.tages, 부트로 알려진tag에스:
- 첫 번째tage, ROM 기반 부트로더는 VideoCore GPU를 시작합니다.
- 초tage 부트로더(Raspberry Pi 4 이전 장치의 SD 카드 및 Raspberry Pi 4의 SPI EEPROM에 있는 bootcode.bin):
- Raspberry Pi 4에서 초tag부트로더는 HDMI 시스템을 시작하고 가능한 모드에 대해 디스플레이를 조사한 다음 디스플레이를 적절하게 설정합니다. 이 시점에서 디스플레이는 기본 진단 데이터를 제공하는 데 사용됩니다.
- 부트로더 진단 디스플레이(07년 2022월 XNUMX일 이후)는 연결된 모든 디스플레이의 상태(HPD(Hotplug Detect)가 있는지 여부 및 EDID 블록이 디스플레이에서 복구되었는지 여부)를 표시합니다.
- VideoCore 펌웨어(start.elf)가 로드되고 실행됩니다. 이것은 HDMI 시스템을 제어하고 연결된 디스플레이에서 EDID 블록을 읽고 해당 디스플레이에 레인보우 스크린을 표시합니다.
- 리눅스 커널 부팅
- 커널 부팅 중에 KMS는 펌웨어에서 HDMI 시스템을 제어합니다. 다시 한 번 연결된 디스플레이에서 EDID 블록을 읽고 이 정보를 사용하여 Linux 콘솔과 데스크탑을 설정합니다.
가능한 문제 및 증상
KMS로 이동할 때 경험하는 가장 일반적인 실패 증상은 부트로더 화면과 레인보우 화면이 나타나고 몇 초 후에 디스플레이가 검게 변하고 다시 켜지지 않는 초기 부팅이 양호하다는 것입니다. 디스플레이가 검게 변하는 지점은 사실 KMS 드라이버가 펌웨어에서 디스플레이를 실행하는 커널 부팅 프로세스 동안의 지점입니다. Raspberry Pi는 현재 HDMI 출력을 제외한 모든 측면에서 실행 중이므로 SSH가 활성화된 경우 해당 경로를 통해 장치에 로그인할 수 있어야 합니다. 녹색 SD 카드 액세스 LED는 일반적으로 가끔 깜박입니다. HDMI 출력이 전혀 표시되지 않을 수도 있습니다. 부트로더 디스플레이와 레인보우 스크린이 없습니다. 이는 일반적으로 하드웨어 오류로 인한 것일 수 있습니다.
결함 진단
HDMI 출력이 전혀 없음
장치가 전혀 부팅되지 않았을 수 있지만 이는 이 백서의 범위를 벗어납니다. 관찰된 동작이 디스플레이 문제라고 가정하면 부팅 프로세스 중 HDMI 출력 부족은 일반적으로 하드웨어 오류로 인한 것입니다. 여러 가지 가능한 옵션이 있습니다.
- HDMI 케이블 결함
- 새 케이블을 사용해 보십시오. 일부 케이블, 특히 매우 저렴한 케이블에는 Raspberry Pi가 디스플레이를 성공적으로 감지하는 데 필요한 모든 통신 회선(예: 핫플러그)이 포함되어 있지 않을 수 있습니다.
- Raspberry Pi의 HDMI 포트 결함
- Raspberry Pi 4를 사용하는 경우 다른 HDMI 포트를 사용해 보십시오.
- 모니터의 HDMI 포트 결함
- 때때로 모니터 또는 TV의 HDMI 포트가 마모될 수 있습니다. 장치에 포트가 있으면 다른 포트를 사용해 보십시오.
- 드물게 디스플레이 장치는 켜져 있거나 올바른 포트가 선택된 경우에만 EDID 데이터를 제공할 수 있습니다. 확인하려면 장치가 켜져 있고 올바른 입력 포트가 선택되어 있는지 확인하십시오.
- 핫 플러그 감지 라인을 어설션하지 않는 디스플레이 장치
초기 출력 후 화면이 검게 표시됨
Linux 커널 부팅 중에 디스플레이가 나타났다가 꺼지는 경우 여러 가지 원인이 있을 수 있으며 이는 일반적으로 디스플레이 장치에서 EDID를 읽는 문제와 관련이 있습니다. 부팅 순서를 다루는 위의 섹션에서 볼 수 있듯이 EDID는 부팅 프로세스 동안 여러 다른 지점에서 읽혀지며 이러한 각각의 읽기는 서로 다른 소프트웨어에 의해 수행됩니다. KMS가 인수할 때 최종 읽기는 변경되지 않은 업스트림 Linux 커널 코드에 의해 수행되며 결함이 있는 EDID 형식과 이전 펌웨어 소프트웨어는 처리하지 않습니다. 이것이 KMS가 인계되면 디스플레이가 올바르게 작동하지 않을 수 있는 이유입니다. KMS가 EDID를 읽지 못하는지 확인하는 방법은 여러 가지가 있으며 그 중 XNUMX가지 방법은 다음과 같습니다.
부트로더 진단 화면 확인(Raspberry Pi 4만 해당)
메모
부트로더 진단에는 최신 부트로더가 필요합니다. 다음 지침에 따라 최신 버전으로 업그레이드할 수 있습니다. https://www.raspberrypi.com/documentation/computers/raspberry-pi.html#updating-the-bootloader SD 카드를 제거하고 Raspberry Pi를 재부팅합니다. OS 설치 화면에서 ESC 키를 누르면 디스플레이 장치에 진단 화면이 나타납니다. display로 시작하는 라인이 디스플레이에 있어야 합니다. — 예를 들어amp르 :
- 표시하다: DISP0: HDMI HPD=1 EDID=확인 #2 DISP1: HPD=0 EDID=없음 #0
Raspberry Pi 4의 이 출력은 시스템이 HDMI 포트 0에서 HDMI 디스플레이를 감지했고 핫플러그 감지가 어설션되었으며 EDID가 정상으로 읽혔음을 보여줍니다. HDMI 포트 1에서 아무것도 발견되지 않았습니다.
KMS 시스템이 EDID를 감지했는지 확인하십시오.
이를 확인하려면 다른 컴퓨터에서 SSH를 통해 Raspberry Pi 장치에 로그인해야 합니다. 고급 설정 옵션을 사용하여 Raspberry Pi Imager로 SD 카드 이미지를 생성할 때 SSH를 활성화할 수 있습니다. 이미 이미지가 생성된 SD 카드에서 SSH를 활성화하는 것은 조금 더 복잡합니다. file 부팅 파티션에 ssh라는 이름을 지정합니다. 원래 Raspberry Pi에서 SD 카드를 교체하고 전원을 켭니다. 이것은 DHCP에 의해 할당된 IP 주소로 SSH를 활성화해야 합니다. 로그인한 후 터미널 프롬프트에 다음을 입력하여 감지된 EDID의 내용을 표시합니다(디스플레이 장치가 연결된 Raspberry Pi의 HDMI 포트에 따라 HDMI-A-1을 HDMI-A-2로 변경해야 할 수 있음) to): cat /sys/class/drm/card?-HDMI-A-1/edid card?-HDMI-A-1 또는 이와 유사한 이름의 폴더가 없으면 디스플레이에서 EDID를 읽을 수 없을 가능성이 높습니다. 장치.
메모
EDID를 성공적으로 읽은 경우 유용한 가상 file 모드라고 하는 동일한 폴더에 있으며, 표시될 때 EDID가 장치가 지원한다고 주장하는 모든 가능한 모드를 보여줍니다.
완화책
핫플러그 감지 실패 펌웨어와 KMS 모두 연결된 모니터를 찾지 못하면 핫플러그 감지 실패일 수 있습니다. 예를 들어 라즈베리 파이는 연결된 장치를 모르기 때문에 EDID를 확인하지 않습니다. 잘못된 케이블 또는 핫플러그를 올바르게 지정하지 않는 디스플레이 장치가 원인일 수 있습니다. 커널 명령줄을 변경하여 핫플러그 감지를 강제할 수 있습니다. file (cmdline.txt) Raspberry Pi OS SD 카드의 부트 파티션에 저장됩니다. 당신은 이것을 편집할 수 있습니다 file 원하는 편집기를 사용하여 다른 시스템에서. cmdline.txt 끝에 다음을 추가합니다. file: video=HDMI-A-1:1280×720@60D 두 번째 HDMI 포트를 사용하는 경우 HDMI-A-1을 HDMI-A-2로 교체하십시오. 다른 해상도와 프레임 속도를 지정할 수도 있지만 디스플레이 장치가 지원하는 것을 선택해야 합니다.
메모
비디오의 커널 명령줄 설정에 대한 문서는 여기에서 찾을 수 있습니다. https://www.kernel.org/doc/Documentation/fb/modedb.txt
경고
이전 그래픽 스택은 config.txt 항목을 사용하여 핫플러그 감지를 설정하도록 지원했지만 작성 시점에는 KMS에서 작동하지 않습니다. 향후 펌웨어 릴리스에서 지원될 수 있습니다. config.txt 항목은 hdmi_force_hotplug이며 hdmi_force_hotplug:0=1 또는 hdmi_force_hotplug:1=1을 사용하여 핫플러그가 적용되는 특정 HDMI 포트를 지정할 수 있습니다. KMS의 명명법은 HDMI 포트를 1과 2로 지칭하는 반면 Raspberry Pi는 0과 1을 사용합니다.
EDID 문제
소수의 디스플레이 장치는 꺼져 있거나 잘못된 AV 입력이 선택된 경우 EDID를 반환할 수 없습니다. 이는 Raspberry Pi와 디스플레이 장치가 동일한 전원 스트립에 있고 Raspberry Pi 장치가 디스플레이보다 빠르게 부팅될 때 문제가 될 수 있습니다. 이와 같은 장치의 경우 EDID를 수동으로 제공해야 할 수 있습니다. 더 이상하게도 일부 디스플레이 장치에는 형식이 잘못되어 KMS EDID 시스템에서 구문 분석할 수 없는 EDID 블록이 있습니다. 이러한 상황에서 유사한 해상도를 가진 장치에서 EDID를 읽어서 사용할 수 있습니다. 두 경우 모두 다음 지침은 디스플레이 장치에서 EDID를 읽고 KMS가 장치를 직접 조사하려고 시도하는 대신 이를 사용하도록 KMS를 구성하는 방법을 설명합니다.
EDID를 file
생성하기 file 처음부터 EDID 메타데이터를 포함하는 것은 일반적으로 가능하지 않으며 기존 메타데이터를 사용하는 것이 훨씬 쉽습니다. 일반적으로 디스플레이 장치에서 EDID를 가져와 Raspberry Pi의 SD 카드에 저장하여 디스플레이 장치에서 EDID를 가져오는 대신 KMS에서 사용할 수 있습니다. 여기서 가장 쉬운 옵션은 디스플레이 장치가 올바른 AV 입력에서 실행 중이고 Raspberry Pi가 HDMI 시스템을 올바르게 시작했는지 확인하는 것입니다. 이제 터미널에서 EDID를 file 다음 명령을 사용하여: sudo cp /sys/class/drm/card?-HDMI-A-1/edid /lib/firmware/myedid.dat 어떤 이유로 EDID가 없는 경우 비 모드에서 장치를 부팅할 수 있습니다. - KMS 모드는 데스크탑 또는 콘솔로 부팅에 성공한 다음 펌웨어가 성공적으로 읽을 EDID를 file.
- 레거시 그래픽 모드로 부팅합니다.
- 부트 파티션에서 config.txt를 편집하여 sudo를 사용하여 편집기를 실행하고 dtoverlay=vc4-kms-v3d라는 줄을 #dtoverlay=vc4-kms-v3d로 변경합니다.
- 재부팅.
- 이제 데스크톱 또는 로그인 콘솔이 나타납니다.
- 터미널을 사용하여 연결된 디스플레이 장치에서 EDID를 file 다음 명령을 사용하여:
- tvservice -d myedid.dat sudo mv myedid.dat /lib/firmware/
를 사용하여 file디스플레이 장치를 조사하는 대신 기반 EDID /boot/cmdline.txt를 편집하여 sudo를 사용하여 편집기를 실행하고 커널 명령줄에 다음을 추가합니다. drm.edid_firmware=myedid.dat EDID를 다음에 적용할 수 있습니다. 다음과 같은 특정 HDMI 포트: drm.edid_firmware=HDMI-A-1:myedid.dat 필요한 경우 다음을 수행하여 KMS 모드로 다시 부팅합니다.
- 부트 파티션에서 config.txt를 편집하여 sudo를 사용하여 편집기를 실행하고 #dtoverlay=vc4-kms-v3d라는 줄을 dtoverlay=vc4-kms-v3d로 변경합니다.
- 재부팅.
메모
만약 당신이 사용한다면 file-기반 EDID이지만 여전히 핫플러그에 문제가 있는 경우 커널 명령줄에 video=HDMI-A-1:D를 추가하여 핫플러그 감지를 강제할 수 있습니다.
문서 / 리소스
![]() |
RaspberryPi KMS HDMI 출력 그래픽 드라이버 [PDF 파일] 사용자 매뉴얼 KMS, HDMI 출력 그래픽 드라이버, KMS HDMI 출력, 그래픽 드라이버, KMS HDMI 출력 그래픽 드라이버, 드라이버 |