최신 Linux 커널 개발 버전의 사운드/USB용 DKMS 모듈
처음에는 이 모듈을 사용함으로써 메인라인 커널(5.2.x)에 대한 USB 사운드 장치용 최신 드라이버 코드를 사용할 수 있게 합니다. '최신'이라는 것은 Linus 이전 버전으로, 몇 달 후에 5.4 병합 창(merge window)을 목표로 하는 것을 의미합니다.
작업은 v5.10.x-rcX를 v5.9.x로 백포팅하는 작업이 계속되었으며, 현재 작성 시점(2020년 11월) 기준입니다.
이는 Linux 커널 사운드 서브시스템 유지 관리자인 Takashi Iwai의 트리(git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound.git)에서 조립되었습니다. 처음에는 Geoffrey D. Bennett(git://github.com/geoffreybennett/scarlett-gen2.git)의 작업 최종 V7 게시물과 관련하여 Focusrite Scarlett 18i20 Gen 2에 대한 것이 주를 이루었습니다. 하지만 다른 USB 사운드 장치에도 유용할 가능성이 높습니다.
설치
Ubuntu
단순히 사용해 보고 싶은 경우, mainline 5.2.8, mainline 5.2.9, mainline 5.2.11에서 최소한 image-unsigned 및 modules Ubuntu 패키지, 그리고 릴리스에 있는 해당 바이너리 패키지를 가져오십시오. 예시:
dpkg -i linux-image-unsigned-5.2.8-050208-generic_5.2.8-050208.201908091630_amd64.deb
dpkg -i linux-modules-5.2.8-050208-generic_5.2.8-050208.201908091630_amd64.deb
dpkg -i sound-usb-modules-5.2.8-050208-generic_5.3.0rc7.14312_amd64.deb
실제로 드라이버 코드를 수정하고 싶은 경우, mainline 5.2.x 시리즈 중 하나의 headers-…-all 및 headers-…-amd64 패키지도 가져와야 합니다. 또한 Ubuntu에서 dkms 패키지를 설치하고, 릴리스에서 sound-usb-dkms 패키지를 설치해야 합니다:
apt install dkms
dpkg -i sound-usb-dkms_5.3.0rc7.14312-1ubuntu1_all.deb
이 조합은 설치된 모든 호환 커널 이미지에 대해 소스 코드로부터 USB 사운드 모듈을 빌드하려고 시도합니다.
Fedora
dnf install -y dkms
dnf install -y sound-usb-5.3.0rc7.14312-1dkms.noarch.rpm
Non-Ubuntu/Debian 시스템에서의 수동 설치
Non-Ubuntu/Debian 시스템의 경우,
-
sound-usb 하위 디렉토리 전체를 /usr/src/sound-usb-<모듈-버전>/로 복사할 수 있습니다. 예: <모듈-버전> = 5.3.0rc7.14312. 위 내용은 Ubuntu의 dpkg-buildpackage에 의해 자동 생성됩니다.
-
그런 다음, 상단 근처의 #MODULE_VERSION#을 동일한 번호(5.3.0rc7.14312)로 대체하여 debian/sound-usb-dkms.dkms를 약간 수정하고, /usr/src/sound-usb-<모듈-버전>/dkms.conf에 복사합니다.
-
모듈을 등록하려면 dkms add sound-usb/5.3.0rc7.14312를 실행합니다.
그 후 대부분의 dkms 명령어는 작동해야 합니다. 예시:
dkms status
dkms build --verbose sound-usb/5.3.0rc7.14312
dkms install --verbose sound-usb/5.3.0rc7.14312
위 명령어들은 현재 실행 중인 커널을 대상으로 빌드 및 설치를 수행합니다. 오래된 모듈은 modprobe -r ...로 언로드하고, 다시 로드하려면 modprobe -v ...를 사용합니다. 재부팅이 더 간단할 수 있습니다.
Fedora 수동 설치 예시
예시로, noarch.rpm은 Fedora 30 docker 인스턴스(docker pull fedora:30)에서 다음 명령어로 빌드되었습니다:
dnf install dkms kernel-devel kernel-modules make rpm-build
cd ... # 위치
cp -ipr sound-usb /usr/src/sound-usb-5.3.0rc7.14312
...
개발
실제로 드라이버 소스 코드를 수정하고, 그 수정을 현재 실행 중인 커널을 대상으로 빌드하려면 다음을 수행합니다 (걱정하지 마세요 - 결과물은 이 디렉토리에 유지됩니다):
make -C /lib/modules/`uname -r`/build M=`pwd`/sound/usb clean
make -C /lib/modules/`uname -r`/build M=`pwd`/sound/usb modules
테스트되지 않음 이와 같은 방식은 새로 빌드된 모듈을 현재 커널에 시스템에 설치할 것입니다.
명령어가 모듈을 어디에 배치하는지 확인하려면 make -n을 실행해 볼 수 있습니다:
리눅스 커널은 /lib/modules/*/updates와 /lib/modules/*/extra 아래에 있는 모듈을 다른 곳의 /lib/modules/*보다 로드하는 것을 선호합니다.
따라서 make ... modules_install을 실행하기보다는, 새로운 *.ko 파일을 해당 디렉터리에 수동으로 복사한 다음 depmod -a를 실행하여 커널이 이를 다시 스캔하도록 하는 것이 더 안전합니다.
만약 사용 중인 커널에 CONFIG_MMODULE_SIG_FORCE=y가 설정되어 있다면 (대부분의 Secure-boot 배포판 커널이 그러함), 커널 모듈에 서명하려면 현재 BIOS에서 허용하는 certs/signing_key.pem과 certs/signing_key.x509 쌍을 가지고 있어야 합니다.
하지만, DKMS deb/rpm 패키지를 빌드하기 위해 dpkg-buildpackage (Ubuntu/Debian 사용 시)를 수행하거나 위에서 설명한 '수동 설치...' 섹션을 따르는 것이 좋습니다. 이렇게 설치한 후에는, DKMS 시스템이 다음에 재부팅될 때, 현재 설치했거나 가까운 미래에 설치할 모든 구형 또는 신규 호환 커널에 대해 커널 모듈을 빌드하고 설치합니다. DKMS 시스템은 새로 빌드된 모듈들을 배포판 출하 시점의 모듈과는 별도의 디렉터리에 배치합니다 (더 높은 우선순위로 로드됨). 이 별도의 모듈 디렉터리는 제거하여 변경 사항을 되돌릴 수 있습니다.
이는 기존에 제공되던(as-shipped) 모듈을 덮어쓰는 것보다 새로운 드라이버 코드를 테스트하는 훨씬 안전한 방법입니다.