首页 > 代码库 > linux字符设备学习笔记【原创】
linux字符设备学习笔记【原创】
1、申请设备号
int register_chrdev_region(dev_t from, unsigned count, const char *name)
指定从设备号from开始,申请count个设备号,在/proc/devices中的名字为name。返回值:成功返回0,失败返回错误码。
2、动态的申请设备号
int alloc_chrdev_region(dev_t *dev, unsigned baseminor, unsigned count, const char *name)
动态申请从次设备号baseminor开始的count个设备号,在/proc/devices中的名字为name,并通过dev指针把分配到的设备号返回给调用函数者。返回值:成功返回0,失败返回错误码。
3、卸载申请的设备号
void unregister_chrdev_region(dev_t from, unsigned count)
使用:释放从from开始count个设备号。
4、注册字符设备
1)分配cdev;
2)初始化cdev;
3)添加cdev;
4.1 分配cdev
struct cdev* test_cdev;test_cdev = cdev_alloc();
4.2 初始化cdev
void cdev_init(struct cdev *cdev, const struct file_operations *fops)
cdev:之前我定义的cdev结构体;fops:设备对应的文件操作结构体。返回值:(函数有可能失败,查看返回值是必须的);成功返回0,示范返回对应的错误码;
4.3 添加cdev
int cdev_add(struct cdev *cdev, dev_t dev, unsigned count)
cdev:指定要被添加的cdev结构体;dev:对应的设备号;count:从设备号dev开始添加count个设备.返回值:成功返回0,失败返回对应的错误码。
4.3 卸载cdev
void cdev_del(struct cdev *p)
5、error
Linux的出错处理在设计的时候是考虑了跟平台架构相关。
6、驱动、设备文件、设备号、应用程序之间的关系
设备号的申请通过register_chrdev_region()调用这个函数进行申请设备号,之后调用cdev_init()将设备注册进内核,要将设备号与驱动关联起来调用cdev_add(),要给应用程序提供一个接口去访问内核的驱动,需要创建一个文本文件可以手动的创建
mknod /dev/test c 250 0 应用程序通过open这个路径"/dev/test"就可以访问内核。
linux字符设备学习笔记【原创】