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:该类设备的设备个数
一般请情况下,主设备号用来标识设备驱动对应的驱动程序;次设备号由内核使用,用于正确确定设备文件所指的设备。内核中,一般用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:该类设备的设备个数
相关文章推荐
- Android笔记--两种双击退出程序的方法
- 用R语言进行回归分析
- POJ 1995 Raising Modulo Numbers 【快速幂+同余定理】
- TextView更多的属性
- SDUT3325顺序表应用2:多余元素删除之建表算法
- [Cloud Computing]Mechanisms: Virtual Firewall
- 研究完Linux C的文件IO和文件系统,接着需要看进程和信号控制
- HDOJ 1597 find the nth digit
- 我的文章:Filter
- Java Mysql Hive操作
- 1171 潜伏者
- Java引用类型
- WEB前端animation和鼠标hover事件属性改变问题。
- iOS杂记——category分类、extension扩展、protocol协议
- HDU - 3555 Bomb
- 如何提高php性能1
- Java开发必装的IntelliJ IDEA插件
- SDUT1197约瑟夫问题
- Longest Increasing Subsequence
- 进程控制( 一)