DKMS(Dynamic Kernel Module Support)란?

이전에 드라이버 코드를 받아서 빌드해서 쓰라는 내용에서 DKMS를 언급했는데, 간단하게 이게 뭔지는 적어줘야 할 거 같아서 적어봅니다. 정리하는 내용이니 좀 딱딱할 수 있군요.

DKMS(Dynamic Kernel Module Support)는 리눅스에서 커널 모듈을 동적으로 빌드하고 설치, 제거할 수 있게 해주는 프레임워크입니다. DKMS는 커널이 업데이트될 때마다 커널 모듈을 자동으로 재컴파일하고 설치해주는 기능을 제공합니다. 이를 통해 시스템 유지보수가 더 용이해지고, 커널 업데이트 시 커널 모듈의 호환성 문제를 최소화할 수 있습니다.

DKMS의 주요 기능과 장점은 다음과 같습니다.

  • 자동 재컴파일: 커널 업데이트 시, DKMS는 등록된 모든 모듈을 자동으로 다시 컴파일하고 설치합니다. 이를 통해 커널과 모듈의 버전 불일치 문제를 방지할 수 있습니다.
  • 모듈 관리: DKMS는 모듈의 설치, 제거, 업데이트를 관리할 수 있는 명령어를 제공합니다. 사용자는 손쉽게 모듈을 추가하거나 제거할 수 있습니다.
  • 버전 관리: DKMS는 여러 버전의 모듈을 관리할 수 있으며, 필요에 따라 특정 버전의 모듈을 선택하여 사용할 수 있습니다.
  • 이식성: DKMS는 다양한 리눅스 배포판에서 사용할 수 있으며, 배포판에 관계없이 일관된 방식으로 모듈을 관리할 수 있습니다.

DKMS 설치

DKMS 설치 및 사용에 대해서는, 대부분의 리눅스 배포판에서는 패키지 관리자를 통해 DKMS를 쉽게 설치할 수 있습니다. 요즘은 기본으로 깔려서도 나오는데 없으면 설치하면 됩니다. 제가 주로 쓰는 우분투 기반에서는 다음 명령어를 사용하여 설치합니다.

sudo apt-get install dkms

모듈 추가

DKMS에 모듈을 추가하려면, 모듈 소스 코드를 포함한 디렉토리를 준비하고, DKMS 설정 파일을 작성해야 합니다. 예를 들어, mymodule-1.0이라는 버전의 모듈을 추가하려면 다음과 같이 합니다.

/usr/src/mymodule-1.0 디렉토리에 모듈 소스 코드를 저장합니다.

/usr/src/mymodule-1.0/dkms.conf 파일을 생성합니다. 이 파일에는 모듈 이름, 버전, 소스 디렉토리 등의 정보가 포함됩니다.

PACKAGE_NAME="mymodule"
PACKAGE_VERSION="1.0"
BUILT_MODULE_NAME[0]="mymodule"
DEST_MODULE_LOCATION[0]="/extra"
AUTOINSTALL="yes"

모듈을 DKMS에 추가합니다.

sudo dkms add -m mymodule -v 1.0

모듈 빌드 및 설치

모듈을 빌드하고 설치하려면 다음 명령어를 사용합니다.

sudo dkms build -m mymodule -v 1.0
sudo dkms install -m mymodule -v 1.0

모듈 제거

DKMS에서 모듈을 제거하려면 다음 명령어를 사용합니다.

sudo dkms remove -m mymodule -v 1.0 --all

이와 같이 DKMS는 리눅스 커널 모듈 관리를 보다 쉽게 만들어주며, 커널 업데이트 시에도 모듈의 호환성을 유지하는 데 큰 도움이 됩니다. 그래서 요즘은 드라이버 관련되어서는 dkms로 모듈화 하는 것이 더욱 안정적으로 유지해줄 수 있어서 많이 이용하는 편입니다. 알아두면 좋기 때문에 한번 정리해봅니다.

필요한 드라이버는 빌드해서 설치하세요 – 네트워크 카드 (USB Wifi도 물론)

리눅스를 데스크톱으로 이용하다 보면, 각종 드라이버 설치에서 애를 먹을 때가 있다. 그래픽 카드의 경우에는 엔비디아는 전용 드라이버를, AMD는 오픈소스 드라이버 지원이 잘 되어있거나 자신들의 드라이버를 제공하는 경우가 많다. 요즘 ai 열풍으로 인해서 그렇게 이용하는 경우가 많으니, 뭐이쪽은 설치가 어렵지 않다.

그런데 제일 애먹는 것이 있다고 하면 난 바로 네트워크 카드인 거 같다. 메인보드에 있는 네트워크 인터페이스의 경우에는 드라이버가 어느정도 인식이 잘 되는 녀석이라 별 신경 안써도 되는 경우가 있는데, 만약 나처럼 이런 식으로 usb 와이파이 모듈을 달거나 할 겨면 이야기가 좀 달라진다.

판매자는 해당 제품에 대해서 윈도우 드라이버나 맥용 드라이버까진 제대로 준다 해도 리눅스 드라이버를 주지 않는 경우가 좀 많다. 사실 거의 대부분이라고 해도 틀린 말 아닌 거 같은데…./먼산

지금 실험을 위해서 이용하고 있는 환경인데… 와이파시 신호에 문제가 많아서 안테나 달린 녀석을 새로 달았다. 당연히 드라이버는 별도로 제공되지 않는다.

공유기 AP도 집의 끝쪽에 있고, 노트북 또한 집의 반대 끝쪽에 있어서 그런지 안테나 신호가 있긴 해도 제대로 안잡힌다. 게다가 저 노트북 진짜 10년 가까이 쓰는 중이라 그런지 내장된 wifi 모듈도 되게 오래된 녀석이라 미묘하게 호환이 덜된다. 한국에서 산 거라서 전파 관련된 것도 있나 하는 의심도 좀 있고…. 그래서 안테나 달린 걸로 질러서 연결하는데 드라이버는 대충 잡았는데 바로 이용이 안된다. 맞는 드라이버를 제대로 잡아서 설치해줘야 하는데 그게 잘 안된 듯 하다.

뭐, 일단 이럴 땐 드라이버를 별도로 설치해주면 된다. 드라이버를 설치하려면, 해당 제품에서 이용하는 칩셋 모듈이 뭔지 알면 되는데, 요즘 이런 네트워크 카드들은 어떤 칩셋을 쓴다고 판매자가 알려준다. 그래서 그걸 기준으로 해서 검색하면 해당 코드가 나온다.

칩셋만 입력해도 이렇게 깔끔하게 나온다.

그렇게 해서, 해당 코드를 받아서 설치하면 된다. 근데 지금처럼 결과가 둘이라면? 그땐 README를 읽어라.

생각보다 설명 친절하게 잘 적어준다. (검색 결과에 나온 다른 쪽은 아마 본인이 쓰거나 별도의 환경에서 이용하기 위해서 만든 흔적이 보였다.)

이렇게 호환 OS와 커널, 컴파일러 종류도 알려준다.

이렇게 다양한 OS도 테스트를 해봤고 (아래에 우분투도 있었다.)

이녀석은 설치용 스크립트까지 제공해준다. ㅠㅠㅠㅠ

이렇게 깔끔하게 정리가 잘 된 내용을 보고 따라하면 알아서 설치가 될 것이다. 가장 최근까지 지원해주는 것들은 DKMS에 의한 서포트까지 되기 때문에 설치에 어렵지 않게 적용될 수 있어서, 잘 해주는 편이다.

그래서 리눅스에서 필요한 드라이버는 빌드해서 설치해서 쓰면 된다는 게 이런 것이다. 생각보다 지원되는 것이 많다. 잘 알아보고 잘 써보자.