linux驱动(二):驱动模块传参

姓名:谢焕彬 学号:19020100303
在编写应用我们可以通过终端向main函数传参,其实在驱动模块中我们同样可以传参,但需要遵从一定的格式要求。

在驱动的模块中声明一下你要传递的参数名称,类型和权限

    module_param(变量的名称,类型,权限);

传递整型:

    int intval ;
    module_param(intval, int , 0664);

传递字符指针:这个稍微特殊一点,参数类型设定为charp

   char *p = NULL;
   module_param(p, charp, 0664);

传递数组: module_param_array(数组名, 元素类型, 元素个数(取地址), 权限);

    int array[3] = {};
    int num = 3;
    module_param_array(array, int, &num, 0664);

传递字符串: module_param_string(传递参数时的字符串名称, 字符串名称, 字符串大小, 权限);

    char str[12] = {};
    module_param_string(estr, str, sizeof(str), 0664);

    前两个参数容易混淆,第二个是在程序中的名称,第一个是你在传递参数的名称,一般可以起一样的名字。

另外还可以添加参数描述,如:

           MODULE_PARM_DESC(参数名称, 参数描述);

例程:

include <linux/init.h>

include <linux/module.h>

include <linux/kernel.h>

MODULE_LICENSE("GPL");

int intval = 0;
module_param(intval, int , 0664);
MODULE_PARM_DESC(intval, "This is a interger.");

char *p = NULL;
module_param(p, charp, 0664);
MODULE_PARM_DESC(p, "This is a char * string.");

int array[3] = {};
int num = 3;
module_param_array(array, int, &num, 0664);
MODULE_PARM_DESC(array, "This is a array.");

char str[12] = {};
module_param_string(estr, str, sizeof(str), 0664);
MODULE_PARM_DESC(estr, "This is a char[] array.");

static int __init demo_init(void)
{
int i = 0;

printk("%s,%d\n", __func__, __LINE__);
printk("intval:%d\n", intval);
printk("p:%s\n", p);

for(i = 0; i < num; i++)
{
    printk("array[%d] = %d\n", i, array[i]);
}

printk("str:%s\n", str);

return 0;

}

static void __exit demo_exit(void)
{
printk("%s,%d\n", func, LINE);

}

module_init(demo_init);
module_exit(demo_exit);
我们看一下执行结果

   加载模块后,都会在/sys/modules下生成一个模块的文件夹,文件夹下会有一个parameters文件夹,里面包含的就是以参数名命名的文件节点

里面保存的就是我们设置的值,例如在intval中

————————————————
版权声明:本文为CSDN博主「念念有余」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/u012142460/article/details/78884144

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容