驱动中添加参数进行调试和控制设备驱动

来源:互联网 发布:mt4行情分析软件 编辑:程序博客网 时间:2024/06/10 21:38
1.在加载驱动的时候向驱动传入参数:
1.1传入字符型参数
static char *name;
module_param(name, charp, 0);
MODULE_PARM_DESC(name, "param description");
1.2传入无符号整型参数
static unsigned rotate;
module_param(rotate, uint, 0);
MODULE_PARM_DESC(rotate,"param description");
1.3使用方法
insmod xxx.ko name = "abc"

2.在驱动加载后去向驱动传参数控制设备
驱动中添加CLASS属性步骤:

2.1 定义一个类:
static struct class *example_class = NULL;
2.2 在入口函数中创建设备类,并且在类下创建属性文件
example_class = class_create(THIS_MODULE, "example_class");
if (IS_ERR(example_class))
{
printk("Create class example_class failed.\n");
return -ENOMEM;
}
ret = class_create_file(example_class, &class_attr_example);


2.3 定义属性文件的读写函数及权限 example是属性文件名字 后面两个参数是操作属性文件的读写方法
static CLASS_ATTR(example, 0660, arr_class_read, arr_class_write);
2.4 在出口函数中销毁类
class_remove_file(example_class, &class_attr_example);
class_destroy(example_class);


example1:#include <linux/kernel.h>#include <linux/module.h>#include <linux/init.h>#include <linux/platform_device.h>#include <linux/device.h>#include <linux/fs.h>#include <linux/gpio.h>#include <linux/slab.h>#include <linux/uaccess.h>#include <linux/syscalls.h>static unsigned int value;//写文件函数static ssize_t arr_class_write(struct class *cls, struct class_attribute *attr, const char *_buf, size_t _count){value = simple_strtol(_buf, NULL, 10);printk("value = %d\n",value);return _count;}//读文件函数static ssize_t arr_class_read(struct class *cls, struct class_attribute *attr, char *_buf){return sprintf(_buf,"%d\n",value);}static struct class *example_class = NULL;/*CLASS_ATTR(在/sys/class/example_class/操作的文件,读文件函数,写文件函数)*/static CLASS_ATTR(example, 0660, arr_class_read, arr_class_write);static int __init class_file_init(void){int ret;printk(KERN_INFO" class_file_init \n");example_class = class_create(THIS_MODULE, "example_class");if (IS_ERR(example_class)){ printk("Create class example_class failed.\n"); return -ENOMEM;}ret = class_create_file(example_class, &class_attr_example);return 0;}static void __exit class_file_exit(void){printk(KERN_INFO"class_file_exit \n");class_remove_file(example_class, &class_attr_example);class_destroy(example_class);example_class = NULL;return ;}module_init(class_file_init);module_exit(class_file_exit);MODULE_AUTHOR("Dave/nova_wangwenbo@126.com");MODULE_LICENSE("GPL");