2.12. 사용자 정의 커널 모듈 컴파일
하드웨어 및 소프트웨어 수준에서 다양한 구성에서 요청한 대로 샘플링 커널 모듈을 빌드할 수 있습니다.
사전 요구 사항
kernel-devel,gcc및elfutils-libelf-devel패키지를 설치했습니다.dnf install kernel-devel-$(uname -r) gcc elfutils-libelf-devel
# dnf install kernel-devel-$(uname -r) gcc elfutils-libelf-develCopy to Clipboard Copied! Toggle word wrap Toggle overflow - root 권한이 있습니다.
-
사용자 지정 커널 모듈을 컴파일하는
/root/testmodule/디렉터리를 생성하셨습니다.
프로세스
다음 콘텐츠를 사용하여
/root/testmodule/test.c파일을 만듭니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow test.c파일은 커널 모듈에 주요 기능을 제공하는 소스 파일입니다. 파일은 조직을 위해 전용/root/testmodule/디렉터리에 생성되었습니다. 모듈 컴파일 후/root/testmodule/디렉터리에 여러 파일이 포함됩니다.test.c파일에는 시스템 라이브러리에서 포함됩니다.-
예제 코드에서
printk()함수에linux/kernel.h헤더 파일이 필요합니다. -
linux/module.h헤더 파일에는 여러 C 소스 파일에서 공유하는 함수 선언 및 매크로 정의가 포함되어 있습니다.
-
예제 코드에서
-
init_module()및cleanup_module()함수를 따라 텍스트를 출력하는 커널 로깅 함수printk()를 시작하고 종료합니다. 다음 콘텐츠를 사용하여
/root/testmodule/Makefile파일을 만듭니다.obj-m := test.o
obj-m := test.oCopy to Clipboard Copied! Toggle word wrap Toggle overflow Makefile에는 컴파일러가
test.o라는 오브젝트 파일을 생성하기 위한 지침이 포함되어 있습니다.obj-m지시문은 결과test.ko파일이 로드 가능한 커널 모듈로 컴파일되도록 지정합니다. 또는obj-y지시문은test.ko를 기본 제공 커널 모듈로 빌드하도록 지시할 수 있습니다.커널 모듈을 컴파일합니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 컴파일러는 최종 커널 모듈 (
test.ko)에 함께 연결하기 전에 각 소스 파일 (test.c)에 대한 오브젝트 파일 (test.o)을 중간 단계로 생성합니다.성공적으로 컴파일한 후
/root/testmodule/에는 컴파일된 사용자 지정 커널 모듈과 관련된 추가 파일이 포함되어 있습니다. 컴파일된 모듈 자체는test.ko파일로 표시됩니다.
검증
선택 사항:
/root/testmodule/디렉터리의 내용을 확인합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow 커널 모듈을
/lib/modules/$(uname -r)/디렉터리에 복사합니다.cp /root/testmodule/test.ko /lib/modules/$(uname -r)/
# cp /root/testmodule/test.ko /lib/modules/$(uname -r)/Copy to Clipboard Copied! Toggle word wrap Toggle overflow 모듈식 종속성 목록을 업데이트합니다.
depmod -a
# depmod -aCopy to Clipboard Copied! Toggle word wrap Toggle overflow 커널 모듈을 로드합니다.
modprobe -v test insmod /lib/modules/4.18.0-305.el8.x86_64/test.ko
# modprobe -v test insmod /lib/modules/4.18.0-305.el8.x86_64/test.koCopy to Clipboard Copied! Toggle word wrap Toggle overflow 커널 모듈이 성공적으로 로드되었는지 확인합니다.
lsmod | grep test test 16384 0
# lsmod | grep test test 16384 0Copy to Clipboard Copied! Toggle word wrap Toggle overflow 커널 링 버퍼에서 최신 메시지를 읽습니다.
dmesg [74422.545004] Hello World This is a test# dmesg [74422.545004] Hello World This is a testCopy to Clipboard Copied! Toggle word wrap Toggle overflow