Linux内核驱动
自动创建设备文件
创建设备文件的方式:
1.手动创建:sudo mknod /dev/haha0 c 250 0
2.自动创建—》使用内核函数
linux内核为我们提供了一组内核函数,用于在模块加载时自动在/dev目录下创建响应的设备文件,并在卸载时删除该设备文件。
创建流程:
1 class_create—》创建设备文件类
2 device_create—》创建设备文件
删除流程:
3 device_destory 删除设备文件
4 class_destory 删除设备文件类
设备 主设备–》一类设备
次设备–》该类设备中的某一个设备
设备文件:一个设备文件对应一个次设备
1.class_create–>创建设备文件类
struct class *class_create(owner,name)
//参数1:owner:表示模块本身THIS_MODULE
//参数2:name:设备模块名
//返回值:指向设备文件类的指针(struct class表示设备文件类)
2.device_create创建设备文件
struct device *device_create(struct class *class,struct device *parent,sev_t devt,void *drvdata,const char *fmt,....)
//参数1:*class:指向设备文件类的指针
//参数2:*parent:指向符设备的指针,一般为NULL
//参数3:devt:设备号由主次设备号构成
//参数4:*drvdata:指向设备私有数据,若无,给NULL;
//参数5:*fmt:设备文件名(haha0/haha1...)
//...可变参数
//返回值:成功struct device *,失败err,需要判断
实例:
3.device_destroy删除设备文件
void device_destroy(struct class *class, dev_t devt)
//作用:删除设备文件
//参数1:*class:指向设备文件类的指针
//参数2:devt:设备号
4.class_destory 删除设备文件类
void class_destory(struct class *cls)
//作用:删除设备文件类
//cls:指向设备文件类的指针
测试步骤:
1 sudo insmod hello.ko2 dmesg |tail
3 ls -l/dev/hah*–》查看是否生成了设备文件haha0/haha1?
4 sudo ./test
5 sudo ./test1
open haha1 ok
6 sudo rmmod hello.ko
7 ls -l/dev/hah*—>查看设备文件是否被删除