Linux内核模块:模块参数

本文介绍了如何使用 C 语言为内核模块定义参数,并详细解释了参数的类型、读/写权限以及参数数组的配置方法。通过示例展示了如何在 insmod 命令中传递参数并观察其在内核中的行为。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我们可以用”module_param(参数名,参数类型,参数读/写权限)“为模块定义一个参数,例如如下代码定义了一个整形参数和一个字符指针参数:

static char *book_name = "linux module test";
static int num = 4000;
module_param(num, int, S_IRUGO);
module_param(book_name, charp, S_IRUGO);

在装载内核模块时,用户可以向模块传递参数,形式为”insmode(或modprobe)模块名 参数名=参数值”,如果不传递,参数将使用模块内定义的默认值。

参数类型可以是byte, short, ushort, int, uint, long, ulong, charp(字符指针), bool或invbool(布尔的反), 在模块编译时会将module_param中声明的类型与变量定义的类型进行比较,判断是否一致。

模块被加载后,在/sys/module/目录下将出现一次模块命名的目录。当“参数读/写权限”为0时,表示此参数不存在sysfs文件系统下对应的文件节点,如果此模块存在“参数读/写权限”不为0的命令行参数,在此模块的目录下还将出现parameters目录,包含一系列以参数名命名的文件节点,这些文件的权限值就是传入module_param()的“参数读/写权限”,而文件的内容为参数的值。

 除此之外,模块也可以拥有参数数组,形式为“module_param_array(数组名,数组类型,数组长,参数读/写权限)"。从2.6.0~2.6.10版本,需将数组长变量名赋给”数组长“,从2.6.10版本开始,需将数组长变量的指针赋给”数组长“,当不需要保存实际输入的数组元素个数时,可以设置”数组长“为NULL。

运行insmod或modprobe命令时,应使用逗号分隔输入的数组元素。

示例:

#include <linux/init.h> 
#include <linux/module.h>
MODULE_LICENSE("Dual BSD/GPL"); 

static char *book_name = "dissecting Linux Device Driver"; 
static int num = 4000; 

static int book_init(void) 
{ 
 printk(KERN_INFO " book name:%s\n",book_name); 
 printk(KERN_INFO " book num:%d\n",num); 
 return 0; 
} 
static void book_exit(void) 
{ 
 printk(KERN_ALERT " Book module exit\n "); 
} 
module_init(book_init); 
module_exit(book_exit); 
module_param(num, int, S_IRUGO); 
module_param(book_name, charp, S_IRUGO);
 
MODULE_AUTHOR("Song Baohua, author@linuxdriver.cn");
MODULE_DESCRIPTION("A simple Module for testing module params");
MODULE_VERSION("V1.0");

对上述模块运行”insmod book.ko"命令加载,相应输出都为模块内的默认值,通过查看“/var/log/messages”日志文件可以看到内核的输出,如下所示:

[root@localhost driver_study]# tail -n 2 /var/log/messages
Jul 2 01:03:10 localhost kernel: <6> book name:dissecting Linux Device
Driver
Jul 2 01:03:10 localhost kernel: book num:4000

当用户运行“insmod book.ko book_name='GoodBook' num=5000“命令时,输出的是用户传递的参数,如下所示:

[root@localhost driver_study]# tail -n 2 /var/log/messages
Jul 2 01:06:21 localhost kernel: <6> book name:GoodBook
Jul 2 01:06:21 localhost kernel: book num:5000



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值