数据类型变量的传参
/**
* [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);
网友评论