1.3 模块参数

简介

在加载模块时可以通过加载命令行向模块传递参数,内核支持的模块参数类型有: ‘bool’、 ‘invbool’、‘charp’、‘short’、‘int’、‘long’、‘ushort’、‘uint’、‘ulong’。

声明模块参数

通过宏定义’module_param(name, type, perm)'可以将一个变量声明为模块参数
通过宏定义’module_param_array(name,type, nump, perm)'可以将一个数组声明为模块参数

向模块传递参数

提供在加载命令命令的后面列出模块参数列表及其值即可,如 insmod module_param.ko baud=115200 name=“test”;对于普通变量采用"参数名=值"的方式列出,如 baud=115200;对于数组变量采用 ”参数名=元素1,元素2,元素3,…“的方式列出,如 port=1,2,3,4;若一个模块有多个参数需要传递,参数列表之间用空格隔开,如 baud=115200 name=“test module” port=1,2,3,4

代码说明

如下是一个使用了模块参数的内核模块源代码

#include <linux/init.h>
#include <linux/kernel.h>
#include <linux/module.h>

//定义变量,并赋初值
static unsigned int baud = 115200;
static int port[4] = {0,1,2,3};
static char *name = "module param test";

//声明模块参数
/**
 * name 参数名称
 * type 变量类型,内核支持 bool invbool charp short int long ushort uint ulong 
 * perm 在/sys/module/xxx/parameters/下生成的文件的权限,可以采用8进制格式表示
 */
module_param(baud, uint, S_IRUGO);
module_param(name, charp, S_IRUGO);

/**
 * name 参数名称
 * type 变量类型,内核支持 bool invbool charp short int long ushort uint ulong 
 * nump 指向存数组元素个数的变量,可以为NULL
 * perm 在/sys/module/xxx/parameters/下生成的文件的权限,可以采用8进制格式表示
 */
module_param_array(port, int, NULL, S_IRUGO);

//模块加载函数
static int __init driver_init(void)
{
	int i;
	printk("module init\r\n");
	
	//输出参数的值
	printk("baud = %d\r\n", baud);
	for(i=0; i<4; i++)
		printk("port[%d] = %d\t", i, port[i]);
	printk("\r\n");
	printk("name = %s\r\n", name);

	return 0;
}

//模块卸载函数
static void __exit driver_exit(void)
{
	printk("module exit\r\n");
}

module_init(driver_init);
module_exit(driver_exit);

MODULE_LICENSE("GPL");
//模块作者信息
MODULE_AUTHOR("csdn");
//模块描述
MODULE_DESCRIPTION("module parameter test");

实验

  1. 从“https://gitcode.net/lf282481431/linux_driver_demo/-/tree/master/01-kernel_module/03-module_param”下载代码,并进行编译,然后拷贝到目标板的root目录中
  2. 执行命令 insmod module_param.ko port=5,6,7 name=“module_test_module” baud=115200 加载模块,这里向模块参数传递了相应的值,在执行加载函数是会将传递到模块参数的值输出
    在这里插入图片描述
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值