Linux에서 모듈은 Linux 커널에 장치 드라이버, 파일 시스템 및 기타 구성 요소를 추가하는 방법이며 정적 또는 동적 방법을 통해 독립적인 프로그램으로 컴파일할 수 있는 기능 및 데이터 유형의 모음입니다. 커널 공간에 로드됩니다.
이 튜토리얼의 운영 환경: linux7.3 시스템, Dell G3 컴퓨터.
모듈은 커널을 다시 컴파일하거나 시스템을 다시 시작할 필요 없이 장치 드라이버, 파일 시스템 및 기타 구성 요소를 추가할 수 있는 방법입니다. 커널의 경우 처리해야 할 것은 모듈의 로드 및 언로드와 모듈 간의 종속성입니다. 모듈은 커널 공간에서 실행되기 때문에 커널이 제공하는 기능을 사용해야 합니다. 또한 모듈을 사용하여 해당 커널 함수를 호출할 수도 있습니다. 이는 커널 모드 프로그래밍 방법입니다. 모듈 파일의 본질은 일반적으로 *.ko 형식의 재배치 가능한 바이너리 파일입니다.
Linux 모듈은 정적 또는 동적 방법을 통해 커널 공간에 로드될 수 있습니다. 정적 로딩은 커널 시작 프로세스 중 로딩을 의미하고, 동적 로딩은 커널이 실행되는 동안 언제든지 로딩을 의미합니다. 모듈이 커널에 로드되면 커널 코드의 일부가 됩니다. 모듈이 시스템에 로드되면 시스템은 커널의 심볼 테이블을 수정하고 새로 로드된 모듈이 제공하는 리소스와 심볼을 커널 심볼 테이블에 추가하여 모듈 간의 통신을 원활하게 합니다.
모듈 구성
Linux 커널 모듈은 주로 다음 부분으로 구성됩니다.
모듈 로딩 기능(필수): insmod 명령을 통해 커널 모듈을 로딩할 때 모듈의 로딩 기능이 자동으로 실행됩니다. 이 모듈과 관련된 초기화 작업을 완료하기 위한 커널 실행
모듈 언로드 기능(필수): rmmod 명령을 통해 모듈이 언로드되면 모듈의 언로드 기능이 커널에 의해 자동으로 실행되어 모듈과 반대되는 기능을 완료합니다. 로딩 기능;
모듈 권한 라이센스 설명(필수): 모듈 라이센스(LICENSE) 설명은 커널 모듈의 권한을 설명합니다. LICENSE가 선언되지 않으면 모듈은 모듈이 로드될 때 커널이 오염되었다는 경고를 받게 됩니다. .
모듈 매개변수(선택 사항): 모듈 매개 변수는 모듈이 로드될 때 모듈에 전달될 수 있는 값이며, 이는 모듈 내부의 전역 변수에 해당합니다.
모듈 내보내기 기호(선택 사항): 커널 모듈은 기호를 내보낼 수 있습니다. (함수 또는 변수에 해당하는 기호), 다른 모듈이 이 모듈의 변수 또는 함수를 사용할 수 있도록 합니다.
모듈 작성자 및 기타 정보 선언(선택 사항).
모듈의 예:
//内核头文件 #include<linux/module.h> #include<linux/kernel.h> #include<linux/init.h> //加载函数 static int __init init_hello_module(void){ //内核打印函数,linux系统使用dmesg命令可以查看打印信息 printk(KERN_INFO "Hello World\n"); return 0; } //卸载函数 static void __exit exit_hello_module(void){ printk(KERN_INFO "Exit the Hello world Module!\n"); } module_init(init_hello_module); module_exit(exit_hello_module); MODULE_LICENSE("GPL"); MODULE_AUTHOR("Eric"); MODULE_VERSION("v0.1"); MODULE_DESCRIPTION("TEST FOR MODULE");
모듈에 해당하는 Makefile:
#Makefile obj-m:=hello.o KERNELBUILD:=/lib/modules/$(shell uname -r)/build all: make -C $(KERNELBUILD) M=$(shell pwd) modules clean: make -C $(KERNELBUILD) M=$(shell pwd) clean
관련 권장 사항: "Linux Video Tutorial"
위 내용은 리눅스 모듈은 무엇을 의미합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!