首页 > 代码库 > 第二天
第二天
一 动态注册设备号
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(指针)
返回值:
负的错误码
第二天