您的位置:首页 > 其它

LDD3 字符设备驱动

2016-07-28 08:54 197 查看
主次设备号:
一般请情况下,主设备号用来标识设备驱动对应的驱动程序;次设备号由内核使用,用于正确确定设备文件所指的设备。内核中,一般用dev_t类型来保存设备编号,将主次设备转换为dev_t类型的宏
MKDEV(int major, int minor)
分配和释放设备编号:
主要由两种方法 1)、明确知道设备编号,则使用register_chrdev_region();
        2)、对于一个新设备,建议使用动态分配机制alloc_chrdev_region();
通常情况下,我们不需要cdev结构本身,而是希望包含cdev结构的scull_dev结构,内核源码中通过container_of(inode->i_cdev,
struct scull_dev, cdev),来实现这种操作。
 
字符设备的注册:
staticvoid
xxx_setup_cdev(struct
xxx_dev *dev, int index)

㈠、驱动的初始化:
1.1分配设备描述结构(struct
cdev)---两种分配方式:静态分配和动态分配
1>静态分配:struct cdev mdev;
2>动态分配:struct cdev *pdev = cdev_alloc();
       
注:注册设备号(动态)alloc_chrdev_region
1.2初始化设备描述结构---- cdev_init()函数;<linux/cdev.h>
函数原型:voidcdev_init(struct cdev *cdev, const struct file_operations *fops);

参数:
cdev:
待初始化的cdev结构
fops:设备对应的操作函数集

注:将设备结构与操作其设备的函数集相关联。
 
1.3注册设备描述结构---cdev_add()函数;<linux/cdev.h>

int cdev_add(struct cdev *p, dev_t dev, unsigned count)

参数:
p:待添加到内核的字符设备结构
dev:设备号
count:该类设备的设备个数
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: