linux param fait référence à la fonction "module_param", qui est utilisée pour transmettre les paramètres de ligne de commande ; dans la programmation en mode utilisateur, les paramètres de ligne de commande peuvent être transmis via les paramètres de "main()", et lors de l'écriture d'un module du noyau, passez "module_param( )" pour transmettre les paramètres.
L'environnement d'exploitation de ce tutoriel : système linux5.9.8, ordinateur Dell G3.
Qu'est-ce que le paramètre Linux ?
Utilisation de module_param dans le pilote Linux
Nous aimons tous utiliser le paramètre if de la fonction main lors de l'écriture de programmes en mode utilisateur Pour transférer des données vers le programme
#include <stlib.h> #include <stdio.h> int main(int argc,char **argv) { exit(0); }</stdio.h></stlib.h>
où argc est le nombre de paramètres passés dans le programme, argv est le paramètre passé, et le premier paramètre argv[0] est le nom du fichier actuel incluant le chemin, donc le nombre réel de paramètres entrés dans le programme est argc-1.
Il n'y a pas de fonction principale dans le module noyau, donc la transmission des paramètres dans le module peut être réalisée via la définition de la macro module_param :
// 原型 #define module_param(name, type, perm) \ module_param_named(name, name, type, perm)
name : le nom du paramètre entrant
type : le type du paramètre entrant, il en existe plusieurs types : byte, short, ushort, int, uint, long, ulong, charp, bool, invbool
perm : C'est l'autorisation d'accès aux ressources dans sysfs. Entrons dans les détails ci-dessous. . Il existe principalement les types d'autorisations suivants dans le module 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 // 其他人可执行权限
défini dans linux/stat.h Écriture de code :
#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>
Fichier 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
Compilez le programme, installez le module, puis dmesg
Après. le module est installé, le module correspondant sera généré dans le dossier /sys/module Nommez le dossier, entrez le dossier
Entrez le dossier, il y aura num dans le programme précédent dans le dossier paramètres
Comme vous pouvez le voir sur l'image, le noyau est dans le système de fichiers. Les fichiers correspondants seront générés pour que les utilisateurs puissent y accéder, et le perm dans la définition de la macro module_param dans le module définit l'autorisation en lecture seule de l'utilisateur, donc le num les autorisations de fichiers y correspondent.
Bien sûr, vous pouvez également définir des autorisations d'écriture pour modifier la valeur du paramètre d'entrée. Après la modification, le paramètre dans le module du noyau changera mais il n'y aura aucune invite d'information.
Recommandations associées : "Tutoriel vidéo Linux"
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!