linux param refers to the "module_param" function, which is used to pass command line parameters; programming in user mode can pass command line parameters through the "main()" parameter, while writing a kernel module Pass parameters through "module_param()".
#The operating environment of this tutorial: linux5.9.8 system, Dell G3 computer.
What is linux param?
Usage of module_param in linux driver
When we write programs in user mode, we all like to use the if parameter of the main function to pass data to the program
#include <stlib.h> #include <stdio.h> int main(int argc,char **argv) { exit(0); }</stdio.h></stlib.h>
where argc is the number of parameters passed into the program, argv is the parameter passed in, and the first parameter argv[0] is the name of the current file including the path, so the actual number of parameters passed into the program is argc-1.
There is no main function in the kernel module, so passing parameters into the module can be achieved through the module_param macro definition:
// 原型 #define module_param(name, type, perm) \ module_param_named(name, name, type, perm)
name: Incoming parameter name
type: Incoming parameter type, including byte, short, ushort, int, uint, long, ulong, charp, bool, invbool
perm: This is The access permissions to resources in sysfs will be discussed in detail below. The following permission types are mainly defined in uapi/linux/stat.h
#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 // 其他人可执行权限
Module code writing:
#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 file:
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
Compile the program, install the module, and then dmesg
After the module is installed, a folder corresponding to the module name will be generated in the /sys/module folder, and enter the folder
Enter the folder, there will be num from the previous program in the parameters folder inside the folder
It can be seen from the picture that the kernel will generate corresponding files in the file system for users to access, and the perm in the module_param macro definition in the module sets the user's read-only permission, so the num file permissions correspond to it.
Of course, you can also set writable permissions to change the value of the input parameter. After the change, the parameter in the kernel module will change but there will be no information prompt.
Related recommendations: "Linux Video Tutorial"
The above is the detailed content of what is linux param. For more information, please follow other related articles on the PHP Chinese website!