Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2145790
  • 博文数量: 333
  • 博客积分: 10161
  • 博客等级: 上将
  • 技术积分: 5238
  • 用 户 组: 普通用户
  • 注册时间: 2008-02-19 08:59
文章分类

全部博文(333)

文章存档

2017年(10)

2014年(2)

2013年(57)

2012年(64)

2011年(76)

2010年(84)

2009年(3)

2008年(37)

分类: LINUX

2013-12-25 15:16:11

块设备定义:

    具有一定结构的随机存取设备,对这种设备的读写是按块进行的,他使用缓冲区来存放临时数据,待条件成熟后,从缓存一次性写入设备或从设备中一次性读出放入到缓冲区。
   * 对性能要求高

驱动工作流程:
* 注册块设备驱动程序
  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);
 int (*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) |
0

上一篇:块设备驱动笔记

下一篇: python with用法

给主人留下些什么吧!~~