DKMS(Dynamic Kernel Module Support) 모듈 관리 |
1. 개 요
DKMS(Dynamic Kernel Module Support)는 커널 모듈이 부팅시 생성되고, 활성화될 수 있도록 해 카널 모듈 적재방식으로, /usr/src 디렉토리에 소스가 위치하고 있어서 부팅시 해당 모듈을 필요로 하는 장치가 있으면 모듈 컴파일을 통하여 커널에 자동으로 적재됩니다. DKMS는 커널 모듈 소스를 컴파일하여 modprobe.conf 파일을 통하여 커널에 적재되도록 하는 것이 아니라, 커널이 최초 부팅될 때 컴파일하여 커널에 적재되록 하는 것으로, 커널이 변경되었을 때 따로 모듈을 컴파일하지 않아도 자동으로 적재되므로, 커널이 업그레이드될 때 별도로 커널 모듈 설정을 하지 않아도 되기 때문에 매우 유용한 방식입니다.
넘버원 리눅스에서는 커널에서 지원하지 않는 모듈이 지원되도록 하고자 할 때 이 방식을 많이 이용합니다. 넘버원 리눅스 2018 SE 버전에서는 PCLinuxOS에서 지원하지 않는 커널 모듈로 broadcom-wl, digimend, huion, r8101, r8168 드라이버 등을 추가로 지원하고 있습니다.
그러면 DKMS로 커널 모듈을 어떻게 관리하는지를 알아봅니다.
Usage: /usr/sbin/dkms [action] [options]
[action] = { add | remove | build | install | uninstall | match
| mkdriverdisk | mktarball | ldtarball | mkrpm | mkkmp | mkdeb | status }
[options] = [-m module] [-v module-version] [-k kernel-version] [-a arch]
[-d distro] [-c dkms.conf-location] [-q] [--force] [--all]
[--templatekernel=kernel] [--directive='cli-directive=cli-value']
[--config=kernel-.config-location] [--archive=tarball-location]
[--kernelsourcedir=source-location] [--no-prepare-kernel]
[--binaries-only] [--source-only] [-r release (SuSE)] [--verbose]
[--size] [--spec=specfile] [--media=floppy|iso|tar]
[--binary]
2. 설 치
Step1. DKMS는 /usr/src 디렉토리에 커널 모듈 소스를 두어 관리하게 됩니다. 따라서 /usr/src 디렉토리에 커널모듈 소스를 설치합니다. 그러면 예제 파일로 태블릿 드라이버인 dkms-huion 패키지를 사용해 봅니다.
# rpm -qpl dkms-huion-1.3-2no1linux.2018.noarch.rpm
/etc/X11/xorg.conf.d/50-huion.conf
/usr/src/huion-1.3-2no1linux.2018
/usr/src/huion-1.3-2no1linux.2018/Makefile
/usr/src/huion-1.3-2no1linux.2018/Makefile.0000
/usr/src/huion-1.3-2no1linux.2018/README.md
/usr/src/huion-1.3-2no1linux.2018/dkms.conf
/usr/src/huion-1.3-2no1linux.2018/hid-huion.c
/usr/src/huion-1.3-2no1linux.2018/hid-huion.c.0000
/usr/src/huion-1.3-2no1linux.2018/hid-huion.conf
/usr/src/huion-1.3-2no1linux.2018/hid-rebind
/usr/src/huion-1.3-2no1linux.2018/hid-rebind.rules상기 RPM 패키지를 설치하게 되면 /usr/src 디렉토리에 소스가 위치하게 됩니다.
Step2. 커널에서 dkms 방식으로 컴파일되어 모듈이 로딩되도록 하기 위해서는 소스가 있는 경로안에 dkms.conf 파일을 만들어 놓아야 합니다.
PACKAGE_NAME="huion" # 패키지명을 명시합니다.
PACKAGE_VERSION="huion-1.3-2no1linux.2018" # 패키지 버전을 명시합니다.
AUTOINSTALL="yes" # 부팅시 자동으로 설치할 것인가를 설정합니다.
MAKE[0]="'make' clean KSRC= modules" # 컴파일 방법을 설정합니다.
BUILT_MODULE_NAME[0]="hid-huion" # 컴파일 모듈명을 설정합니다.
DEST_MODULE_LOCATION[0]="/extra # 커널 모듈이 위치할 경로를 명시합니다.자세한 dkms.conf 예제에 대해서는 /usr/share/dkms/sample.conf 파일을 참조하면 됩니다.
Step3. dkms 트리에 커널 모듈 소스를 추가합니다.
dkms add -m 모듈명 -v 모듈버전명
# dkms add -m huion -v 1.3-2no1linux.2018
Creating symlink /var/lib/dkms/huion/1.3-2no1linux.2018/source ->
/usr/src/huion-1.3-2no1linux.2018
DKMS: add Completed.#
Step4. 현재 커널에 해당 커널 모듈 소스를 빌드시킵니다.
dmsk build -m 모듈명 -v 모듈버전명
# dkms build -m huion -v 1.3-2no1linux.2018
Preparing kernel 4.15.8-no1linux1 for module build:
(This is not compiling a kernel, just preparing kernel symbols)
Storing current .config to be restored when complete
Running Generic preparation routine
make clean....
using /proc/config.gz
make oldconfig....
make prepare....
Building module:
cleaning build area....
'make' clean KSRC= modules....
cleaning build area....
cleaning kernel tree (make clean)....
DKMS: build Completed.Step5. install 명령으로 커널 몯듈을 등록합니다.
모든 설정이 완료되었습니다. 부팅하게 되면 커널에 hid-huion.ko 모듈이 자동으로 적재됩니다. 만일 커널이 업그레이드되면 부팅시 커널에 자동으로 모듈이 올라가게 됩니다. /etc/modprobe.conf 파일로 커널 모듈을 관리하지 않아도 되기 때문에 참 편리한 커널 모듈 관리 기법 중의 하나라 할 수 있습니다.
dkms install -m 모듈명 -v 모듈버전명
# dkms install -m huion -v 1.3-2no1linux.2018
Running module version sanity check.
hid-huion.ko:
- Installation
- Installing to /lib/modules/4.15.8-no1linux1/extra/
depmod....