- 0x0000007b
- 2차세계대전
- 3.20해킹
- 4대강
- 502 error
- 53빌딩
- 7840hs
- 88체육관 수영장
- ABI
- abortive close
- abortive shutdown
- AHCI
- akmods
- ALC1220
- alma linux
- alternatives
- AM4 메인보드
- AMD
- amd 7840hs
- amd 그래픽 게임용
- amd 내장 그래픽 최적화
- anonymous file
- API
- apple.com
- APT
- apt-get
- Armagnac
- Asrock
- ASTALIFT
- audacious player
- Today / Yesterday
- /
- Total
Linux Programmer
Fedora 35 : Thunderbolt 4 Maple ridge 인식 실패 문제 본문
Fedora 35 에서 Intel JHL 8540 Maple ridge 칩셋이 내장된 메인보드(B550 ProArt)의 썬더볼트가 제대로 인식되지 않는 문제 해결 방법에 대한 글이다.
2022-09-29 변경사항 : kernel 5.18로 업그레이드 후에 인식 실패 문제는 사라졌음. (이 글은 커널 5.18미만에서 유효함)
* 하드웨어/소프트웨어 환경
M/B : ASUS B550 ProArt
OS : Fedora 35 (Kernel 5.17.5-200)
BIOS 설정 : ErP 활성화(S5) => ErP 설정을 disable 시키면 Thunderbolt device failure 증상이 생기기도 한다. (이외에 BIOS를 업데이트하면 인식이 안되는 경우도 있는데, 바이오스 설정을 factory default로 리셋시키면 다시 인식되었다)
* 증상 및 확인
유저 권한 : root (모든 명령어는 root 권한으로 실행한다)
썬더볼트 하드웨어 인식을 lspci 이나 journalctl (== dmesg) 으로 확인해보면 다음과 같다. 먼저 lspci로 확인해보면 다음과 같이 Maple Ridge 칩셋이 장착된 것이 확인된다. 즉 하드웨어 인식은 되고 있다는 뜻이다.
# lspci
...생략...
00:18.7 Host bridge: Advanced Micro Devices, Inc. [AMD] Matisse/Vermeer Data Fabric: Device 18h; Function 7
01:00.0 Non-Volatile memory controller: Samsung Electronics Co Ltd NVMe SSD Controller PM9A1/PM9A3/980PRO
02:00.0 USB controller: Advanced Micro Devices, Inc. [AMD] 500 Series Chipset USB 3.1 XHCI Controller
02:00.1 SATA controller: Advanced Micro Devices, Inc. [AMD] 500 Series Chipset SATA Controller
02:00.2 PCI bridge: Advanced Micro Devices, Inc. [AMD] 500 Series Chipset Switch Upstream Port
03:00.0 PCI bridge: Advanced Micro Devices, Inc. [AMD] Device 43ea
03:04.0 PCI bridge: Advanced Micro Devices, Inc. [AMD] Device 43ea
03:09.0 PCI bridge: Advanced Micro Devices, Inc. [AMD] Device 43ea
04:00.0 PCI bridge: Intel Corporation Thunderbolt 4 Bridge [Maple Ridge 4C 2020] (rev 02)
05:00.0 PCI bridge: Intel Corporation Thunderbolt 4 Bridge [Maple Ridge 4C 2020] (rev 02)
05:01.0 PCI bridge: Intel Corporation Thunderbolt 4 Bridge [Maple Ridge 4C 2020] (rev 02)
05:02.0 PCI bridge: Intel Corporation Thunderbolt 4 Bridge [Maple Ridge 4C 2020] (rev 02)
05:03.0 PCI bridge: Intel Corporation Thunderbolt 4 Bridge [Maple Ridge 4C 2020] (rev 02)
06:00.0 USB controller: Intel Corporation Thunderbolt 4 NHI [Maple Ridge 4C 2020]
1f:00.0 USB controller: Intel Corporation Thunderbolt 4 USB Controller [Maple Ridge 4C 2020]
38:00.0 Non-Volatile memory controller: Silicon Motion, Inc. SM2262/SM2262EN SSD Controller (rev 03)
39:00.0 Ethernet controller: Intel Corporation Ethernet Controller I225-V (rev 03)
3a:00.0 Network controller: Intel Corporation Wi-Fi 6 AX210/AX211/AX411 160MHz (rev 1a)
...생략...
lspci 출력 중간에 Intel Corporation Thunderbolt 4 Bridge [Maple Ridge 4C 2020] (rev 02) 부분에서 하드웨어 명세가 확인되고 있다.
이제 썬더볼트 작동을 담당하는 bolt service 작동을 확인한 뒤에 bolt CLI 명령어로 썬더볼트 포트를 확인해보기 위해 boltctl list -a 명령을 내려보면 아무것도 나오지 않는다. 썬더볼트 포트가 정상 작동중이라면 뭔가 나와야 하는데 아무것도 나오지 않는다.
# systemctl is-active bolt
active
# boltctl list -a
...아무것도 나오지 않음...
혹시 부팅시에 문제가 생긴 것인지 확인하기 위해 journalctl 부팅 메시지에서 thunderbolt 단어를 검색해보면 다음과 같이 보인다. (dmesg 명령을 대신 사용해도 된다)
# journalctl -b -o short-monotonic | grep thunderbolt
[ 5.203207] localhost.localdomain kernel: ACPI: bus type thunderbolt registered
[ 5.216234] localhost.localdomain kernel: thunderbolt 0000:06:00.0: AMD-Vi: Event logged [IO_PAGE_FAULT domain=0x0011 address=0xcaebf500 flags=0x0020]
[ 25.715220] localhost.localdomain kernel: thunderbolt 0000:06:00.0: AMD-Vi: Event logged [IO_PAGE_FAULT domain=0x0011 address=0xcaebf600 flags=0x0020]
[ 46.194546] localhost.localdomain kernel: thunderbolt 0000:06:00.0: AMD-Vi: Event logged [IO_PAGE_FAULT domain=0x0011 address=0xcaebf700 flags=0x0020]
[ 66.675250] localhost.localdomain kernel: thunderbolt 0000:06:00.0: AMD-Vi: Event logged [IO_PAGE_FAULT domain=0x0011 address=0xcaebf800 flags=0x0020]
[ 87.151930] localhost.localdomain kernel: thunderbolt 0000:06:00.0: failed to send driver ready to ICM
[ 87.152012] localhost.localdomain kernel: thunderbolt: probe of 0000:06:00.0 failed with error -110
부팅 후 5.2초쯤에 IO_PAGE_FAULT가 발생하고, 87.1초 경에 boltctl 명령어 사용시에는 failed to send driver ready to ICM, failed with error -110이 발생하는데 bolt service가 하드웨어를 제대로 인식하지 못하는 듯 하다.
* 해결 방안
해결 방안은 간단하게 thunderbolt 커널 모듈을 리로드하면 된다. 커널 모듈 리로드 방법은 rmmod로 먼저 모듈을 제거하고, 그 다음에 modprobe로 로딩하면 된다. 이를 bash 셸 명령어로 표현하면 다음과 같다. 간혹 명령어가 실패하는 경우도 있는데, 그런 경우는 몇 초뒤에 재시도 하면 된다. 혹은 이미 rmmod가 되어있거나 thunderbolt가 없는 경우는 modprobe thunderbolt만 명령해도 된다.
# rmmod thunderbolt && modprobe thunderbolt
하지만 부팅후 매번 rmmod, modprobe 명령을 내리기는 상당히 귀찮으므로 systemd unit 으로 만들어두자.
systemd unit 파일의 local용 디렉토리인 /etc/systemd/system 디렉토리로 가자. 그리고 vim thunderbolt_reload.service 명령으로 unit 파일을 하나 새로 만든다. 그리고 아래 내용을 타이핑한다.
# Reload a kernel module for TB
[Unit]
Description=Thunderbolt 4 Bridge - Maple Ridge
After=multi-user.target
Requires=bolt.service
StartLimitBurst=10
[Service]
Type=oneshot
Restart=on-failure
ExecStart=/bin/bash -c '/usr/sbin/rmmod thunderbolt && /usr/sbin/modprobe thunderbolt'
ExecReload=/bin/bash -c '/usr/sbin/rmmod thunderbolt && /usr/sbin/modprobe thunderbolt'
RestartSec=30s
RemainAfterExit=yes
[Install]
WantedBy=multi-user.target
저장 후 unit 파일이 부팅 후에 자동 실행하도록 설정하기 위해 systemctl 명령을 사용한다.
# systemctl daemon-reload
# systemctl enable thunderbolt_reload.service
이제 재부팅 후 journalctl 로 확인해보면 다음과 같이 보일 것이다.
# journalctl -ru thunderbolt_reload.service
May 09 21:09:59 localhost.localdomain systemd[1]: Finished Thunderbolt 4 Bridge - Maple Ridge.
May 09 21:09:59 localhost.localdomain systemd[1]: Starting Thunderbolt 4 Bridge - Maple Ridge...
May 09 21:09:59 localhost.localdomain systemd[1]: Stopped Reload driver for Thunderbolt 4 Bridge - Maple Ridge.
May 09 21:09:59 localhost.localdomain systemd[1]: thunderbolt_reload.service: Scheduled restart job, restart counter is at 3.
May 09 21:09:28 localhost.localdomain systemd[1]: Failed to start Reload driver for Thunderbolt 4 Bridge - Maple Ridge.
May 09 21:09:28 localhost.localdomain systemd[1]: thunderbolt_reload.service: Failed with result 'exit-code'.
May 09 21:09:28 localhost.localdomain systemd[1]: thunderbolt_reload.service: Main process exited, code=exited, status=1/FAILURE
May 09 21:09:28 localhost.localdomain bash[6741]: rmmod: ERROR: Module thunderbolt is in use
May 09 21:09:28 localhost.localdomain systemd[1]: Starting Thunderbolt 4 Bridge - Maple Ridge...
May 09 21:09:28 localhost.localdomain systemd[1]: Stopped Thunderbolt 4 Bridge - Maple Ridge.
May 09 21:09:28 localhost.localdomain systemd[1]: thunderbolt_reload.service: Scheduled restart job, restart counter is at 2.
May 09 21:08:58 localhost.localdomain systemd[1]: Failed to start Thunderbolt 4 Bridge - Maple Ridge.
May 09 21:08:58 localhost.localdomain systemd[1]: thunderbolt_reload.service: Failed with result 'exit-code'.
May 09 21:08:58 localhost.localdomain systemd[1]: thunderbolt_reload.service: Main process exited, code=exited, status=1/FAILURE
May 09 21:08:58 localhost.localdomain bash[5427]: rmmod: ERROR: Module thunderbolt is in use
May 09 21:08:58 localhost.localdomain systemd[1]: Starting Thunderbolt 4 Bridge - Maple Ridge...
May 09 21:08:58 localhost.localdomain systemd[1]: Stopped Thunderbolt 4 Bridge - Maple Ridge.
May 09 21:08:58 localhost.localdomain systemd[1]: thunderbolt_reload.service: Scheduled restart job, restart counter is at 1.
May 09 21:08:28 localhost.localdomain systemd[1]: Failed to start Thunderbolt 4 Bridge - Maple Ridge.
May 09 21:08:28 localhost.localdomain systemd[1]: thunderbolt_reload.service: Failed with result 'exit-code'.
May 09 21:08:28 localhost.localdomain systemd[1]: thunderbolt_reload.service: Main process exited, code=exited, status=1/FAILURE
May 09 21:08:28 localhost.localdomain bash[3355]: rmmod: ERROR: Module thunderbolt is in use
May 09 21:08:28 localhost.localdomain systemd[1]: Starting Thunderbolt 4 Bridge - Maple Ridge...
-- Boot 414edc90a7544fbbace82916344037ce --
thunderbolt 관련 모듈이 사용중일때는 rmmod가 제대로 작동하지 않으므로 30초마다 재시도 옵션을 걸어두었기 때문에 위와 같이 재시도를 한다. 위 로그에 따르면 3번째 재시도에 성공해서 커널 모듈이 리로드 되었음을 알 수 있다.
* 부수적인 방안
간혹 전력(power)이 제대로 돌지 않는 경우에는 직접 force_power를 켜면 된다. 먼저 썬더볼트 device부터 확인해보면 다음과 같이 볼 수 있다.
# ls -l /sys/bus/wmi/devices/86CCFD48-205E-4A77-9C48-2021CBEDE341/
rwxrwxrwx. 1 root root 0 Mar 21 13:24 driver -> ../../../../../../bus/wmi/drivers/intel-wmi-thunderbolt
-r--r--r--. 1 root root 4096 Mar 21 13:24 expensive
--w-------. 1 root root 4096 Mar 21 13:21 force_power
-r--r--r--. 1 root root 4096 Mar 21 13:24 guid
-r--r--r--. 1 root root 4096 Mar 21 13:24 instance_count
-r--r--r--. 1 root root 4096 Mar 21 13:24 modalias
-r--r--r--. 1 root root 4096 Mar 21 13:24 object_id
drwxr-xr-x. 2 root root 0 Mar 21 13:24 power
lrwxrwxrwx. 1 root root 0 Mar 21 13:18 subsystem -> ../../../../../../bus/wmi
-rw-r--r--. 1 root root 4096 Mar 21 2022 uevent
6CCFD48-205E-4A77-9C48-2021CBEDE341는 intel-wmi-thunderbolt 이다. 여기서 force_power에 1을 넣으면 강제로 전력을 공급하게되므로 다음과같이 명령해주면 된다. 디렉터리명이 길기 때문에 곡 tab을 이용해서 오타를 방지해야 한다.
# echo 1 > /sys/bus/wmi/devices/86CCFD48-205E-4A77-9C48-2021CBEDE341/force_power
force_power 후에도 제대로 작동하지 않으면 다시 한번 thunderbolt 커널 모듈 리로드(rmmod thunderbolt && modprobe thunderbolt) 해보면 된다.
* 기타
아직까지 썬더볼트는 특성을 많이 타는지 어떤 시스템에서는 잘되고, 어떤 시스템에서는 잘안되고 그런다. JHL-8540 칩셋(Maple Ridge)의 경우가 그런건지 아닌지는 모르겠다.
'컴퓨터 관련 > 리눅스(유닉스) 일반' 카테고리의 다른 글
유닉스 표준 IEEE std 1003.1 issue 8 (SUSv5) 개정판 - 2024년 5월 발표 (1) | 2024.11.25 |
---|---|
페도라 리눅스 nvidia 드라이버 설치 (RPM Fusion akmods, 24년 10월 기준) (0) | 2024.10.19 |
썬더볼트 장치 스캔 방법 - Fedora Linux / Windows (2) | 2024.02.26 |
[CentOS7] vim 7.4의 python3 지원 (0) | 2022.11.23 |
Failed to initialize NVML (Fedora 리눅스) (0) | 2020.11.28 |
리눅스 배포판 순위 : distrowatch에 대한 오해 (10) | 2019.12.05 |
bash : 기초 : 셸의 역사, 종류 (0) | 2019.10.13 |
파일(file)에 대한 토막글 : 파일이란 무엇인가? (18) | 2019.03.08 |