그래픽 카드에 직접 연결하면 모니터에서 보낸 EDID가 제대로 작동하므로 /lib/firmware/edid/viewsonic.bin
.
KVM 스위치, HDMI 오디오 추출기 및 HDMI 분배기를 통해 모니터에 액세스하고 싶습니다. 이 설정을 사용하면 내 컴퓨터가 수신하는 EDID가 손상되고 UEFI에서도 내 화면이 켜져 있는지 감지할 수 없습니다.
drm_kms_helper.edid_firmware=edid/viewsonic.bin video=HDMI-A-1:D
커널 부트 라인에 추가하여 해결 방법을 찾았습니다. 이 라인 덕분에 Linux에서 HDMI 비디오 출력이 괜찮습니다.
그러나 HDMI 오디오는 작동하지 않습니다. Pulseaudio는 플러그가 뽑힌(사용할 수 없는) 것으로 감지되는 올바른 수신기로 설정되어 있습니다.
다음을 시도했지만 아무것도 변경되지 않았습니다.
- EDID가 더 일찍 로드되도록 initramfs에 edid 파일을 추가합니다.
xrandr --output HDMI-1 --set audio on
이 모든 작업을 수행할 수 있었던 유일한 방법은 모니터를 컴퓨터에 직접 연결하여(EDID를 적용하지 않고) 부팅하고 부팅이 완료되면 설정으로 돌아가는 것입니다. 하지만, 잠시 정지하거나 장기간 사용하지 않으면 어차피 소리가 사라지고, 그 이후에는 다시 작동시킬 수가 없습니다.
어떤 제안이라도 보내주셔서 감사합니다!
어쩌면 관련이 있을 수도 있습니다:
$ pactl list sinks
Sink #0
State: RUNNING
Name: alsa_output.pci-0000_00_1f.3.hdmi-stereo
Description: Audio interne Digital Stereo (HDMI)
Driver: module-alsa-card.c
Sample Specification: s16le 2ch 44100Hz
Channel Map: front-left,front-right
Owner Module: 7
Mute: no
Volume: front-left: 65536 / 100% / 0,00 dB, front-right: 65536 / 100% / 0,00 dB
balance 0,00
Base Volume: 65536 / 100% / 0,00 dB
Monitor Source: alsa_output.pci-0000_00_1f.3.hdmi-stereo.monitor
Latency: 39654 usec, configured 40000 usec
Flags: HARDWARE DECIBEL_VOLUME LATENCY SET_FORMATS
Properties:
alsa.resolution_bits = "16"
device.api = "alsa"
device.class = "sound"
alsa.class = "generic"
alsa.subclass = "generic-mix"
alsa.name = "HDMI 0"
alsa.id = "HDMI 0"
alsa.subdevice = "0"
alsa.subdevice_name = "subdevice #0"
alsa.device = "3"
alsa.card = "0"
alsa.card_name = "HDA Intel PCH"
alsa.long_card_name = "HDA Intel PCH at 0xdf240000 irq 325"
alsa.driver_name = "snd_hda_intel"
device.bus_path = "pci-0000:00:1f.3"
sysfs.path = "/devices/pci0000:00/0000:00:1f.3/sound/card0"
device.bus = "pci"
device.vendor.id = "8086"
device.vendor.name = "Intel Corporation"
device.product.id = "a170"
device.product.name = "Sunrise Point-H HD Audio"
device.form_factor = "internal"
device.string = "hdmi:0"
device.buffering.buffer_size = "352800"
device.buffering.fragment_size = "176400"
device.access_mode = "mmap+timer"
device.profile.name = "hdmi-stereo"
device.profile.description = "Digital Stereo (HDMI)"
device.description = "Audio interne Digital Stereo (HDMI)"
alsa.mixer_name = "Realtek ALC1150"
alsa.components = "HDA:10ec0900,1462da12,00100001 HDA:80862809,80860101,00100000"
module-udev-detect.discovered = "1"
device.icon_name = "audio-card-pci"
Ports :
hdmi-output-0: HDMI / DisplayPort (priority: 5900, not available)
Active port: hdmi-output-0
Formats:
pcm
편집: edid_firmware 옵션으로 시작할 때 필드가 설정되지 않습니다(eld#2.0 및 기타 2.*와 동일한 결과).
$ grep eld_valid /proc/asound/card0/eld#2.0
monitor_present 0
eld_valid 0
그러나 모니터를 직접 연결하고 부팅 매개변수를 사용하거나 사용하지 않고 부팅할 때 eld#2.0에 대한 결과는 이제 유효한 필드입니다.
$ cat /proc/asound/card0/eld\#2.0
monitor_present 1
eld_valid 1
monitor_name VX2703 SERIES
connection_type HDMI
eld_version [0x2] CEA-861D or below
edid_version [0x3] CEA-861-B, C or D
manufacture_id 0x635a
product_id 0xf62b
port_id 0x0
support_hdcp 0
support_ai 0
audio_sync_delay 0
speakers [0x1] FL/FR
sad_count 1
sad0_coding_type [0x1] LPCM
sad0_channels 2
sad0_rates [0x1ee0] 32000 44100 48000 88200 96000 176400 192000
sad0_bits [0xe0000] 16 20 24
aplay -l 출력
$ aplay -l
**** List of PLAYBACK Hardware Devices ****
card 0: PCH [HDA Intel PCH], device 0: ALC1150 Analog [ALC1150 Analog]
Subdevices: 1/1
Subdevice #0: subdevice #0
card 0: PCH [HDA Intel PCH], device 1: ALC1150 Digital [ALC1150 Digital]
Subdevices: 1/1
Subdevice #0: subdevice #0
card 0: PCH [HDA Intel PCH], device 3: HDMI 0 [HDMI 0]
Subdevices: 0/1
Subdevice #0: subdevice #0
card 0: PCH [HDA Intel PCH], device 7: HDMI 1 [HDMI 1]
Subdevices: 1/1
Subdevice #0: subdevice #0
card 0: PCH [HDA Intel PCH], device 8: HDMI 2 [HDMI 2]
Subdevices: 1/1
Subdevice #0: subdevice #0
card 0: PCH [HDA Intel PCH], device 9: HDMI 3 [HDMI 3]
Subdevices: 1/1
Subdevice #0: subdevice #0
card 0: PCH [HDA Intel PCH], device 10: HDMI 4 [HDMI 4]
Subdevices: 1/1
Subdevice #0: subdevice #0
$ edid-decode /lib/firmware/edid/viewsonic.bin
Extracted contents:
header: 00 ff ff ff ff ff ff 00
serial number: 5a 63 2b f6 01 01 01 01 19 17
version: 01 03
basic params: 80 3c 22 78 2e
chroma info: b2 05 a3 56 4f 9e 28 0f 50 54
established: bf ef 80
standard: b3 00 a9 40 95 00 90 40 81 80 81 40 71 4f 01 01
descriptor 1: 02 3a 80 18 71 38 2d 40 58 2c 45 00 55 50 21 00 00 1e
descriptor 2: 00 00 00 ff 00 54 38 47 31 33 32 35 30 30 34 32 30 0a
descriptor 3: 00 00 00 fd 00 32 4c 0f 53 12 00 0a 20 20 20 20 20 20
descriptor 4: 00 00 00 fc 00 56 58 32 37 30 33 20 53 45 52 49 45 53
extensions: 01
checksum: f2
Manufacturer: VSC Model f62b Serial Number 16843009
Made week 25 of 2013
EDID version: 1.3
Digital display
Maximum image size: 60 cm x 34 cm
Gamma: 2.20
DPMS levels: Off
Supported color formats: RGB 4:4:4, YCrCb 4:4:4
Default (sRGB) color space is primary color space
First detailed timing is preferred timing
Established timings supported:
720x400@70Hz
640x480@60Hz
640x480@67Hz
640x480@72Hz
640x480@75Hz
800x600@56Hz
800x600@60Hz
800x600@72Hz
800x600@75Hz
832x624@75Hz
1024x768@60Hz
1024x768@70Hz
1024x768@75Hz
1280x1024@75Hz
1152x870@75Hz
Standard timings supported:
1680x1050@60Hz
1600x1200@60Hz
1440x900@60Hz
1400x1050@60Hz
1280x1024@60Hz
1280x960@60Hz
1152x864@75Hz
Detailed mode: Clock 148.500 MHz, 597 mm x 336 mm
1920 2008 2052 2200 hborder 0
1080 1084 1089 1125 vborder 0
+hsync +vsync
Serial number: T8G132500420
Monitor ranges (GTF): 50-76Hz V, 15-83kHz H, max dotclock 180MHz
Has 1 extension blocks
Checksum: 0xf2 (valid)
CEA extension block
Extension version: 3
30 bytes of CEA data
Video data block
VIC 16 1920x1080@60Hz (native)
VIC 5 1920x1080i@60Hz
VIC 4 1280x720@60Hz
VIC 3 720x480@60Hz
VIC 2 720x480@60Hz
VIC 7 1440x480i@60Hz
VIC 6 1440x480i@60Hz
VIC 31 1920x1080@50Hz
VIC 20 1920x1080i@50Hz
VIC 19 1280x720@50Hz
VIC 18 720x576@50Hz
VIC 17 720x576@50Hz
VIC 22 1440x576i@50Hz
VIC 21 1440x576i@50Hz
VIC 1 640x480@60Hz
Audio data block
Linear PCM, max channels 2
Supported sample rates (kHz): 192 176.4 96 88.2 48 44.1 32
Supported sample sizes (bits): 24 20 16
Speaker allocation data block
Speaker map: FL/FR
Vendor-specific data block, OUI 000c03 (HDMI)
Source physical address 1.0.0.0
Underscans PC formats by default
Basic audio support
Supports YCbCr 4:4:4
Supports YCbCr 4:2:2
1 native detailed modes
Detailed mode: Clock 148.500 MHz, 597 mm x 336 mm
1920 2008 2052 2200 hborder 0
1080 1084 1089 1125 vborder 0
+hsync +vsync
Detailed mode: Clock 74.250 MHz, 597 mm x 336 mm
1920 2008 2052 2200 hborder 0
540 542 547 562 vborder 0
+hsync +vsync interlaced
Detailed mode: Clock 74.250 MHz, 597 mm x 336 mm
1280 1390 1430 1650 hborder 0
720 725 730 750 vborder 0
+hsync +vsync
Detailed mode: Clock 27.000 MHz, 597 mm x 336 mm
720 736 798 858 hborder 0
480 489 495 525 vborder 0
-hsync -vsync
Detailed mode: Clock 148.500 MHz, 597 mm x 336 mm
1920 2448 2492 2640 hborder 0
1080 1084 1089 1125 vborder 0
+hsync +vsync
Checksum: 0x4d (valid)
EDID block does NOT conform to EDID 1.3!
Name descriptor not terminated with a newline
편집: 커널 측을 파헤쳐 보세요
좀 더 자세히 살펴보니 모든 것이 linux-source-4.12/drivers/gpu/drm/i915/intel_ddi.c로 시작되는 것 같습니다. 반환 값은 I915_READ(HSW_AUD_PIN_ELD_CP_VLD) & AUDIO_OUTPUT_ENABLE(intel_crtc->pipe)
"has_audio"를 출력할지 여부를 결정합니다. 아직 함수가 없기 때문에 intel_audio_codec_enable
함수가 호출되지 않습니다. 강제로 불러보려고 했는데요. 그런 다음 ELD가 올바르게 구성되고 에서 유효하다고 보고됩니다 /proc/asound/card0/eld#2.0
. Pulseaudio는 더 이상 출력이 다음과 같다고 말하지 않습니다.플러그를 뽑다. 하지만 여전히 작동하지 않으며 오류가 발생합니다.[drm:파이프_구성_err [i915]]실수has_audio 불일치(예상 0, 발견 1)익숙해졌으니까 당연한 거야. 따라서 Intel GPU 도구를 사용하여 HSW_AUD_PIN_ELD_CP_VLD를 수동으로 변경할 수도 있지만 더 잘 아는 사람에게 물어보고 싶습니다.
답변1
IRC의 freenode에 있는 #intel-gfx에서 답변을 얻었습니다. 문제는 다른 모듈 중에서 i915 모듈이 drm_kms_helper에 제공된 edid 펌웨어를 무시하는 drm_(do_)get_edid를 호출한다는 것입니다.
이미 패치가 있습니다Linux의 경우(저는 이것을 Linux 4.12에 적용하고 사소한 충돌을 해결했습니다) 이 동작을 변경했습니다. linux-source/drivers/gpu/drm/ 아래의 모든 모듈을 다시 빌드하고 새로운 시작 매개변수를 추가해야 합니다. drm.edid_firmware=edid/viewsonic.bin
그 후에는 오디오 출력이 사용 가능한 것으로 표시되고 소리가 잘 들립니다. 이 문제는 해결되었습니다. 이번 패치가 받아들여지길 바랍니다!
답변2
부분 답변:
EDID에는 오디오 정보, 특히 로 나열한 CEA 오디오 확장 블록이 포함되어 있습니다 edid-decode
. 이 데이터는 커널 드라이버에 의해 추출되어 ALSA에 다음과 같이 제공됩니다.노년("EDID와 유사한 데이터"). 다음 명령을 사용하여 현재 ELD를 보고 존재 여부를 테스트할 수 있습니다.
cat /proc/asound/card*/eld\#*
또한 이 인터페이스를 사용하여 다음과 같은 일부 ELD 데이터를 변경할 수 있습니다.
echo 'audio_sync_delay 23' | sudo tee /proc/asound/card0/eld#3.2
따라서 어떤 이유로 커널 부팅 EDID가 ELD로 변환되지 않으면 HDMI 사운드 출력이 작동하지 않습니다.
작동하지 않는 다른 이유가 있을 수 있습니다. 이 경우 Pulseaudio를 완전히 중지하거나 를 사용하여 pasuspender
ALSA 수준에서 조사해 보는 것이 좋습니다. aplay --dump-hw-params -D ...
도움이 될 수도 있습니다.
EDID를 사용하는 것처럼 ELD를 사용자 정의 ELD로 강제로 재정의하는 방법을 모르고 그러한 방법이 존재하는지 확실하지 않습니다.
즉, 이 문제를 어떻게 해결해야 할지 모르겠지만, 아마도 이 정보를 통해 더 많은 정보를 어디서 찾을 수 있는지에 대한 아이디어를 얻을 수 있을 것입니다.