linux param은 명령줄 매개변수를 전달하는 데 사용되는 "module_param" 함수를 참조합니다. 사용자 모드에서 프로그래밍하면 "main()"의 매개변수를 통해 명령줄 매개변수를 전달할 수 있으며, 커널 모듈을 작성하면 "module_param()이 전달됩니다. " 매개변수를 전달합니다.
이 튜토리얼의 운영 환경: linux5.9.8 시스템, Dell G3 컴퓨터.
Linux 매개변수가 무엇인가요?
Linux 드라이버에서 module_param 사용
우리 모두는 프로그램을 작성할 때 주 함수의 if 매개변수를 사용하는 것을 좋아합니다. 사용자 모드에서 프로그램에 데이터를 전송하려면
#include <stlib.h> #include <stdio.h> int main(int argc,char **argv) { exit(0); }</stdio.h></stlib.h>
여기서 argc는 프로그램에 전달된 매개변수의 수이고, argv는 전달된 매개변수이며, 첫 번째 매개변수 argv[0]은 경로를 포함한 현재 파일의 이름입니다. 따라서 실제 프로그램에 입력된 매개변수의 개수는 argc-1입니다.
커널 모듈에는 기본 기능이 없으므로 module_param 매크로 정의를 통해 매개변수를 모듈에 전달할 수 있습니다.
// 原型 #define module_param(name, type, perm) \ module_param_named(name, name, type, perm)
name: 들어오는 매개변수의 이름
유형 : 들어오는 매개 변수의 유형에는 여러 유형이 있습니다: byte, short, ushort, int, uint, long, ulong, charp, bool, invbool
perm: 이것은 sysfs의 리소스에 대한 액세스 권한입니다. 아래에서 자세히 살펴보겠습니다. .uapi/
#define S_IRWXU 00700 // 用户读写可执行权限 #define S_IRUSR 00400 // 用户读权限 #define S_IWUSR 00200 // 用户写权限 #define S_IXUSR 00100 // 用户可执行权限 #define S_IRWXG 00070 // 用户组读写可执行权限 #define S_IRGRP 00040 // 用户组读权限 #define S_IWGRP 00020 // 用户组写权限 #define S_IXGRP 00010 // 用户组可执行权限 #define S_IRWXO 00007 // 其他人可读写执行权限 #define S_IROTH 00004 // 其他人可读权限 #define S_IWOTH 00002 // 其他人可写权限 #define S_IXOTH 00001 // 其他人可执行权限
모듈에는 주로 다음과 같은 권한 유형이 있습니다. linux/stat.h 코드 작성:
#include <linux> int num = 100; module_param(num,int,S_IRUSR); static int __init param_init(void) { printk("[%s] num = %d\r\n",__FUNCTION__,num); return 0; } static void __exit param_exit(void) { printk("[%s] num = %d\r\n",__FUNCTION__,num) } module_init(param_init); module_exit(param_exit); MODULE_LICENSE("GPL"); MODULE_AUTHOR("Chen");</linux>
Makefile 파일:
ifneq ($(KERNELRELEASE),) obj-m:=param.o else KERNEL_DIR:=/lib/modules/$(shell uname -r)/build CURRENT_DIR:=$(shell pwd) ccflags-y:=-std=gnu99 -Wno-declaration-after-statement all: $(MAKE) -C $(KERNEL_DIR) M=$(CURRENT_DIR) modules clean: $(MAKE) -C $(KERNEL_DIR) M=$(CURRENT_DIR) clean endif
프로그램을 컴파일하고 모듈을 설치한 다음 dmesg
After 모듈이 설치되면 해당 모듈이 /sys/module 폴더에 생성됩니다. 폴더 이름을 지정하고 폴더를 입력하세요.
폴더를 입력하면 매개변수 폴더에 이전 프로그램의 숫자가 있습니다.
그림에서 볼 수 있듯이 커널은 파일 시스템에 사용자가 액세스할 수 있도록 해당 파일이 생성되며 모듈의 module_param 매크로 정의에 있는 perm은 사용자의 읽기 전용 권한을 설정하므로 num 파일 권한이 이에 해당합니다.
물론 쓰기 가능 권한을 설정하여 입력 매개변수의 값을 변경할 수도 있습니다. 변경 후 커널 모듈의 매개변수는 변경되지만 정보 프롬프트는 표시되지 않습니다.
관련 추천: "Linux 비디오 튜토리얼"
위 내용은 리눅스 매개변수가 뭐야?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!