美文网首页
Linux内核模块传参

Linux内核模块传参

作者: 二进制人类 | 来源:发表于2022-10-28 14:09 被阅读0次

数据类型变量的传参

/**
 * [module_param 内核接收参数]
 * @param  name [传入参数名称]
 * @param  type [传入参数类型,有byte, short, ushort, int, uint, long, ulong, charp, bool,invbool这几种类型]
 * @param  perm [
 * 
#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    // 其他人可执行权限
 * ]
 */
#define module_param(name, type, perm)

数组类型传参

/**
 * [module_param_array 数组类型传参]
 * @param  name [数组名]
 * @param  type [数组元素类型]
 * @param  nump [一般使用NULL]
 * @param  perm [访问权限]
 */
#define module_param_array(name, type, nump, perm)

实例

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

/* 该程序实现内核模块参数传递 */

static int num = 23;
static char *str = "hello mymodule";
static int arr[] = {1,2,3,4,5};

MODULE_LICENSE("GPL");

module_param(num, int, 0644);
module_param(str, charp, 0644);
module_param_array(arr, int, NULL, 0);


/* 定义模块加载函数 */
static int __init my_module_init(void)
{
    /* 输出:KERN_INFO(正常运行输出) */
    printk(KERN_INFO "my module init\n");   
    printk(KERN_INFO "num = %d\n", num);
    printk(KERN_INFO "str:%s\n", str); 
    int i;
    //for (i = 0; i < sizeof(arr)/sizeof(arr[0]); i++) {
    for (i = 0; i< ARRAY_SIZE(arr); i++) {
        printk(KERN_INFO "arr[%d] = %d\n", i, arr[i]);
    }
    return 0;
}

/* 定义模块卸载函数 */
static void __exit my_module_exit(void)
{
    printk(KERN_INFO "my module exit\n");
}
/* 声明模块的加载入口 */
module_init(my_module_init);
/* 声明模块的卸载入口 */
module_exit(my_module_exit);

相关文章

网友评论

      本文标题:Linux内核模块传参

      本文链接:https://www.haomeiwen.com/subject/ezkzzrtx.html