param linux merujuk kepada fungsi "module_param", yang digunakan untuk menghantar parameter baris arahan dalam mod pengguna boleh melepasi parameter baris arahan melalui parameter "main()", sambil menulis parameter Lulus modul kernel melalui "module_param()".
Persekitaran pengendalian tutorial ini: sistem linux5.9.8, komputer Dell G3.
Apakah itu param linux?
Penggunaan module_param dalam pemacu linux
Apabila kita menulis program dalam mod pengguna, kita semua suka menggunakan parameter if bagi fungsi utama untuk menghantar data ke dalam program
#include <stlib.h> #include <stdio.h> int main(int argc,char **argv) { exit(0); }</stdio.h></stlib.h>
di mana argc ialah bilangan parameter yang dihantar ke dalam atur cara, argv ialah parameter yang diluluskan dan parameter pertama argv[0] ialah nama fail semasa termasuk laluan, jadi bilangan parameter sebenarnya dihantar ke dalam program Nombornya ialah argc-1.
Tiada fungsi utama dalam modul kernel, jadi menghantar parameter ke dalam modul boleh dicapai melalui definisi makro module_param:
// 原型 #define module_param(name, type, perm) \ module_param_named(name, name, type, perm)
nama: Nama parameter masuk
jenis: Jenis parameter masuk, termasuk bait, pendek, ushort, int, uint, panjang, ulong, charp, bool, invbool
perm: Ini adalah kebenaran akses kepada sumber dalam sysfs. Mari kita lihat butiran di bawah Jenis kebenaran berikut ditakrifkan terutamanya dalam 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 // 其他人可执行权限
Penulisan kod modul:
#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
Kompilasi atur cara, pasang modul, dan kemudian dmesg
Selepas modul dipasang, nama modul yang sepadan akan dijana dalam / folder sys/module Folder, masukkan folder
Masukkan folder, akan ada num dalam program sebelumnya dalam folder parameter folder
Seperti yang anda lihat dari gambar, kernel akan menjana fail yang sepadan dalam sistem fail untuk diakses oleh pengguna, dan perm dalam definisi makro module_param dalam modul menetapkan pengguna kebenaran baca sahaja, jadi num Keizinan fail sepadan dengannya.
Sudah tentu, anda juga boleh menetapkan kebenaran boleh tulis untuk menukar nilai parameter input Selepas perubahan, parameter dalam modul kernel akan berubah tetapi tidak akan ada gesaan maklumat.
Cadangan berkaitan: "Tutorial Video Linux"
Atas ialah kandungan terperinci apa itu param linux. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!