块设备定义:
具有一定结构的随机存取设备,对这种设备的读写是按块进行的,他使用缓冲区来存放临时数据,待条件成熟后,从缓存一次性写入设备或从设备中一次性读出放入到缓冲区。
* 对性能要求高
驱动工作流程:
* 注册块设备驱动程序
int register_blkdev(unsigned int major, const char *name);
* 注销块设备驱动
int unregister_blkdev(unsigned int major, const char *name);
*块设备的操作
int (*open)(struct inode *inode,struct file *filp);
i
nt (*release)(struct inode *inode,struct file *filp);
int(*ioctl)(struct inode *inode,struct file *filp,unsigned int cmd, unsigned long arg);
int(*media_changed)(struct gendisk *gd);
*gendisk 结构
* gendisk的操作
struct gendisk *alloc_disk(int minors); //minors是该磁盘使用的次设备号
void del_gendisk(struct gendisk *gd); //卸载磁盘
void add_disk(struct gendisk *gd); //一旦调用了该函数,磁盘设备将被“激活”,并随时会调用它提供的方法
* sbull设备的初始化
sbull_major = register_blkdev(sbull_major,"sbull");
* scull_dev结构
* 请求处理
块设备驱动程序的核心是请求函数
内核的块设备子系统在编写的时候非常注意性能的问题,除了从锁控制的设备上获得信息以外,块设备子系统为驱动程序完成了所有可能的工作。
* request函数
void request(request_queue_t *queue);
内核需要驱动程序处理读取,写入以及其他队设备的操作时,就会调用该函数。
对大多数真是设备而言,它没有完成任何请求,它必须穷对请求的相应,并保证所有的请求最终被驱动程序所处理。
阅读(3183) | 评论(0) | 转发(0) |