首页 > 代码库 > 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字符设备学习笔记【原创】