概述
前言
最近在看kernel源码的时候看到了下面这个宏定义
module_param_named(name, name, type, perm)
记得之前在买的书《奔跑吧 Linux内核——入门篇》中看过这方面的内容,现在就将它摘抄出来,以方便日后查看吧,权当一个学习笔记吧。
正文
内核模块作为一个可扩展的动态模块,为Linux内核提供了灵活性。但是有时候要根据不同的应用场景给内核模块传递不同的参数,所以Linux内核就提供了一个宏来实现模块的参数传递。
#define module_param(name, type, perm)
module_param_named(name, name, type, perm)
#define MODULE_PRAM_DESC(_parm, desc)
__MODULE_INFO(parm, _parm, #_parm ":" desc)
module_param()宏由3个参数组成,name表示参数名,type表示参数类型,perm表示参数的读写等权限。MODULE_PARAM_DESC()宏为这个参数的简单说明,参数类型可以是byte、short、ushort、uint、long、ulong、char和bool等类型。perm指定在sysfs中相应文件的访问权限,如设置为0表示不会出现在sysfs文件系统中;设置为S_IRUGO(0444)可以被所有人读取,但是不能被修改;设置为S_IRUGO|S_IWUSR(0644),说明可以让root权限的用户修改这个参数。下面以一个代码示例来说明:
#include <linux/module.h>
#include <linux/init.h>
static int debug = 1;
module_param(debug, int, 0644);
MODULE_PARM_DESC(debug, "enable debugging information");
#define dprintk(args...)
if (debug) {
printk(KERN_DEBUG args);
}
static int mytest = 100;
module_param(mytest, int, 0644);
MODULE_PARM_DESC(mytest, "test for module parameter");
static int __init my_test_init(void)
{
dprintk("my first kernel module initn");
dprintk("module patameter = %dn", mytest);
return 0;
}
static void __exit my_test_exit(void)
{
printk("goodbyen");
}
module_init(my_test_init);
module_exit(my_test_exit);
MODULE_LICENSE("GPL");
我们可以看到模块定义了一个参数debug,初始值为1,表明打印是默认输出的;另外一个参数mytest,初始值为100。
当加载上面编译出来的模块后,我们可以看到内核打印为:
my first kernel module init
module patameter = 100
但是当通过下面的命令来加载模块时:
insmod mymodule.ko mytest=200
内核的打印输出就是
my first kernel module init
module patameter = 200
当然,我们可以也通过给debug参数赋值,关闭掉模块的日志输出。
最后
以上就是开朗红酒为你收集整理的内核中的模块参数前言正文的全部内容,希望文章能够帮你解决内核中的模块参数前言正文所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复