首页 > 代码库 > 第二天

第二天

一 动态注册设备号

int alloc_chrdev_region(dev_t *dev, unsigned baseminor, unsigned count,const char *name)
参数:
@dev 获得动态设备号
@baseminor 第一个次设备号
@count 此设备号的个数
@name 名字,可以在/proc/devices文件看到
返回值:
成功返回0,失败返回负的错误码

二、通过主设备号和次设备号生成设备号
宏:MKDEV(major,minor)

三、通过设备号获得主设备号或次设备号

获得主设备号宏:MAJOR(dev_num)
获得次设备号宏:MINOR(dev_num)


四 如何添加驱动的时候,自动生成设备节点

1.创建类(在/sys/class目录下创建一个子目录)

struct class *class_create(struct module *owner, char *name)
参数 :
@owner THIS_MODULE
@name 子目录的名字
放回值:
成功返回有效指针,失败返回负的错误码


2.在sysfs文件中注册设备(导出一些参数:主设备号和次设备号)
struct device *device_create(struct class *class, struct device *parent,
dev_t devt, void *drvdata, const char *fmt, ...)
参数:
@class 类结构体首地址
@parent NULL
@devt 设备号
@drvdata NULL
@fmt 格式化串 "mycdev" 或 "mycdev%d",1
成功返回有效指针,失败返回负的错误码

3.如何判断是有效指针还是负的错误码

宏 :IS_ERR(指针)
返回值:
指针是负的错误码,返回真,否则返回假

宏 :PRT_ERR(指针)
返回值:
负的错误码

 

第二天