씽크패드 X1 요가 8 세대 랩탑에 슬랙웨어 설치하기
너무 새로운 랩탑 모델을 사는 것도 좋은 건 아니다. 씽크패드 X1 요가 8 세대를 4K 디스플레이를 넣어서 최고 사양으로 사 놨더니 리눅스에서 아직 MIPI 카메라를 지원하지 않는다. 이 모델은 씽크패드 X1 카본 11 세대의 자매 모델이다.
1 슬랙웨어 설치하기
그래픽 카드의 지원을 위해 커널 버전 >= 5.19를 포함한 슬랙웨어 CURRENT를 설치해야 됐다.
씽크스테이션에 슬랙웨어를 설치할 때 initrd.gz에서 멈추는 경우가 있었기 때문에 이미 다음 방법으로 USB 설치 드라이브를 수정해 놨었다.
# 설치 USB 드라이브를 만든다.
sh usbimg2disk.sh -f -s /path/to/slackware64-version -o /dev/sdX
# 드라이브를 마운트한다.
mount /dev/sdX /mnt
# EFI 디렉토리는 삭제한다.
cd /mnt
rm -rf EFI
# EFI 디렉토리를 새롭게 복사한다.
cp -a /path/to/slackware64-version/EFI /mnt
# /mnt/EFI/BOOT/grub.cfg를 수정한다.
# /kernels/huge.s/bzImage => /EFI/BOOT/huge.s
# /isolinux/initrd.img => /EFI/BOOT/initrd.img
umount /mnt
그래서 원본으로 부팅이 잘 되는지는 모르겠지만 일단 설치까지는 잘 됐다. 그런데 설치 후 재부팅할 때 같은 지점에서 멈춰 버렸다. 씽크스테이션에서는 없던 문제다. 결국 ELILO를 Grub으로 교체해야 됐다. 이 부분은 설치 드라이브의 업데이트로 해결되는 게 아니고 수작업으로 해야 되므로 설치시 잊어 버리면 안 된다.
- 위에서 만든 설치 USB 드라이브로 정상적으로 패키지 설치까지 마친다.
- 그 다음 LILO와 ELILO 모두 설치를 건너 뛰고 설정을 마무리한다.
- setup를 빠져 나올 때 Shell을 선택해서 셸로 빠진다.
chroot /mnt grub-install --removable /dev/nvme0n1 # 또는 /dev/sda # CURRENT에서는 --removable 옵션이 필요했다. # 설치한 다음 재부팅후에는 --removable 옵션이 필요없었고 # grub-install /dev/nvme0n1를 다시 실행해야 BIOS의 # Boot Order에 등록이 된다. # 짐작하자면 Grub가 업데이트되면서 /boot/efi 디렉토리의 # 물리적인 위치를 확인하는데 chroot되기 전의 위치는 # /mnt/boot/efi 때문이지 않을까? grub-mkconfig -o /boot/grub/grub.cfg exit reboot
2 X 윈도 시작하기
이렇게 설치된 슬랙웨어 15를 재부팅한 후 X 윈도를 시작하니 뜨지 않았다. 슬랙웨어 15에 포함된 리눅스 커널 5.15.19가 Intel Raptor Lake-P [Iris Xe Graphics] (PCI ID 0xA7A0) 카드를 지원하지 않았다. 검색을 해 보니 커널 5.19에서야 이 PCI ID를 지원하기 시작했다. 그래서 커널 6.1.32를 지원하는 슬랙웨어 CURRENT를 위와 같은 과정으로 처음부터 다시 설치했다.
3 카메라 인식하기
MIPI 기반의 카메라를 인식하지 못 했다. 인텔의 IPU6 드라이버를 설명대로 설치를 해 주니 작동했다. 다음의 SlackBuild 스크립트들로 각 컴포넌트를 빌드 및 설치했다.
3.1 ipu6-drivers
git clone git@github.com:intel/ipu6-drivers.git
tar cvfz ipu6-drivers-20230612.tar.gz ipu6-drivers
git clone git@github.com:intel/ivsc-driver.git
tar cvfz ivsc-driver-20230612.tar.gz ivsc-driver
./ipu6-drivers.SlackBuild
installpkg /tmp/ipu6-drivers-20230612.tgz
3.2 ipu6-camera-bins
git clone git@github.com:intel/ipu6-camera-bins.git
tar cvfz ipu6-camera-bins-20230612.tar.gz ipu6-camera-bins
./ipu6-camera-bins.SlackBuild
installpkg /tmp/ipu6-camera-bins-20230612.tgz
3.3 ipu6-camera-hal
git clone git@github.com:intel/ipu6-camera-hal.git
tar cvfz ipu6-camera-hal-20230612.tar.gz ipu6-camera-hal
./ipu6-camera-hal.SlackBuild
installpkg /tmp/ipu6-camera-hal-20230612.tgz
3.4 icamerasrc-slim-api
git clone git@github.com:intel/icamerasrc.git
cd icamerasrc
git checkout icamerasrc_slim_api
cd ..
tar cvfz icamerasrc-20230612.tar.gz icamerasrc
./icamerasrc-slim-api.SlackBuild
installpkg /tmp/icamerasrc-slim-api-20230612.tgz
3.5 파이어폭스에서 카메라 쓰기
위와 같이 드라이버를 설치해도 IPU6용 GStreamer 플러그인을 사용해야 되기 때문에 GStreamer를 무조건 사용해야 된다. /dev/video0
를 캡쳐 디바이스로 인식하지 않기 때문에 V4L2 루프백 (v4l2loopback) 패키지를 설치해서 GStreamer 플러그인와 연계해야 된다.
modprobe v4l2loopback \
video_nr=1 \
card_label=v4l2 \
exclusive_caps=1 \
max_buffers=2
gst-launch-1.0 icamerasrc device-name=ov2740-uf buffer-count=7 ! \
videoflip method=horizontal-flip ! \
video/x-raw,format=NV12,width=1280,height=720 ! \
v4l2sink device=/dev/video1
이제 /dev/video1
디바이스를 사용하면 된다. 파이어폭스가 자동으로 인식했다. v4l2loopback 모듈은 항상 로드해 둔 다음 화상 회의를 하기 전에 gst-launch-1.0 명령으로 스트리밍을 시작하면 된다. 참 고생이 많다.
4 하이버네이션에서 깨어날 때 어는 문제
그런데 IPU6 드라이브를 설치하고 나니 하이버네이션에서 깨어날 때 시스템이 얼어 버렸다. 카메라를 인식시키기 위해 설치했던 커널 모듈을 하나씩 없애면서 테스트해 보니 i2c_ljca가 문제였다. 바로 이런 게 재미지! ㅠㅜ;; 이 모듈을 제거한 후 하이버네이션/리쥼을 하면 다시 자동으로 추가가 되는데 이때 v4l2loopback으로 /dev/video1
을 활성화하려니까 제대로 안 됐다. 결론은 다음과 같이 비동기화 서스펜드/리쥼을 포기해야 했다.
echo 0 > /sys/power/pm_async
그럼에도 불구하고! 리쥼 후에는 카메라를 인식하지 못 했다. IPU6 드라이버와 관련된 모듈들을 모두 제거하고 다시 로드를 해도 intel_ipu6_isys
모듈에서 처음에는 Segmentation fault가 나고 다음부터는 멈추는 일이 발생했다.
결국 지금으로서는 카메라를 쓸 일이 있으면 재부팅을 해서 잠시 휴식을 갖는 방법 밖에는 없다.
참고문헌
- HOWTO prevent installation hangs on recent hardware
- Setting up GRUB 2 on install (without rebooting)
- Intel Raptor Lake-P Graphics Driver support being added to Linux 5.19
- X1 Carbon Gen 11 with Ubuntu
- Fedora on X1 Carbon Gen 10
- Webcam doesn’t work in X1 carbon Gen 10
- Lenovo ThinkPad X1 Carbon (Gen 10)
- Fedora IPU6 camera support now available in rpmfusion-nonfree
- Intel IPU6/MIPI camera functionality
- ipu6-drivers
- Dell XPS 13 Plus 9320: Camera issues (Intel IPU6 MIPI on Alder Lake)
- Suspend/hibernate issue on Thinkpad x1 carbon gen10
- i2c_ljca prevents resume-from hibernate