1、注册设备驱动
major = register_chrdev(0, "100ask_led", &led_fops)
1、0表示动态分配设备号
2、100ask_led是字符驱动的名字
3、led_fops是该驱动可以使用的操作函数结构体
2、删除设备驱动
unregister_chrdev(major, "100ask_led");//删除主设备号、删除驱动名字
3、创建出/dev/myled设备节点
led_class = class_create(THIS_MODULE, "myled");//owner、name
device_create(led_class, NULL, MKDEV(major, 0), NULL, "myled")
1、cls的结构体指针、
2、NULL
3、主设备号为major次设备号为0
4、NULL
5、设备节点的名字
4、销毁设备节点
device_destroy(led_class, MKDEV(major, 0));//类、主副设备号
class_destroy(led_class);
5、写数据到驱动中
static ssize_t led_write(struct file *filp, const char __user *buf,
size_t count, loff_t *ppos)
1、文件结构体
2、用户空间
3、读取数据的小
4、数据的偏移量
6、 驱动open函数
led_open(struct inode *inode, struct file *filp)
1、内核中用来标识文件的数据结构
2、该结构体标识了一个打开的文件,系统会为每一个打开的文件关联一个struct file 数据结构,是在内核打开文件的同时,将该参数传递到和文件操作相关的所有需要该参数的接口中
7、用户与驱动之间的数据传输
copy_from_user(&val, buf, 1);//将数据从buf存放到val中,拷贝一个字节