리눅스 매개변수가 뭐야?

藏色散人
藏色散人원래의
2023-03-10 08:58:552716검색

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.