• 软件测试技术
  • 软件测试博客
  • 软件测试视频
  • 开源软件测试技术
  • 软件测试论坛
  • 软件测试沙龙
  • 软件测试资料下载
  • 软件测试杂志
  • 软件测试人才招聘
    暂时没有公告

字号: | 推荐给好友 上一篇 | 下一篇

嵌入式软件测试Linux操作系统的驱动程序开发要点

发布: 2009-8-10 10:56 | 作者: 不详 | 来源: 领测软件测试网采编 | 查看: 246次 | 进入软件测试论坛讨论

领测软件测试网

3. 中断服务子程序,又称为驱动程序的下半部分。在Linux系统中,并不是直接从中断向量表中调用设备驱动程序的中断服务子程序,而是由Linux系统来接收硬件中断,再由系统调用中断服务子程序。中断可以在任何一个进程运行时产生,因而在中断服务程序被调用时,不能依赖于任何进程的状态,也就不能调用任何与进程运行环境有关的函数。因为设备驱动程序一般支持同一类型的若干设备,所以一般在系统调用中断服务子程序时,都带有一个或多个参数,以唯一标识请求服务的设备。

  在系统内部,I/O设备的存/取通过一组固定的入口点来进行,这组入口点是由每个设备的驱动程序提供的。具体到Linux系统,设备驱动程序所提供的这组入口点由一个文件操作结构来向系统进行说明。file_operation结构定义于linux/fs.h文件中。

  struct file_operation{

  int (*lseek)(struct inode *inode, struct file *filp, off_t off, int pos);

  int (*read)(struct inode *inode, struct file *filp, char *buf, int count);

  int (*write)(struct inode *inode, struct file *filp, const char *buf, int count);

  int (*readdir)(struct inode *inode, struct file *filp, struct dirent *dirent, int count);

  int (*select)(struct inode *inode, struct file *filp, int sel_type, select_table *wait);

  int (*ioctl)(struct inode *inode, struct file *filp, unsigned int cmd, unsigned int arg);

  int (*mmap)(void);

  int (*open)(struct inode *inode, struct file *filp);

  int (*release)(struct inode *inode, struct file *filp);

  int (*fasync)(struct inode *inode, struct file *filp);

  };

  file_operation结构中的成员几乎全部是函数指针,所以实质上就是函数跳转表。每个进程对设备的操作都会根据major、minor设备号,转换成对file_operation结构的访问。

  常用的操作包括以下几种:

  lseek, 移动文件指针的位置,只能用于可以随机存取的设备。

  read, 进行读操作,参数buf为存放读取结果的缓冲区,count为所要读取的数据长度。返回值为负表示读取操作发生错误;否则,返回实际读取的字节数。对于字符型,要求读取的字节数和返回的实际读取字节数都必须是inode-i_blksize的倍数。

  

延伸阅读

文章来源于领测软件测试网 https://www.ltesting.net/

32/3<123>

关于领测软件测试网 | 领测软件测试网合作伙伴 | 广告服务 | 投稿指南 | 联系我们 | 网站地图 | 友情链接
版权所有(C) 2003-2010 TestAge(领测软件测试网)|领测国际科技(北京)有限公司|软件测试工程师培训网 All Rights Reserved
北京市海淀区中关村南大街9号北京理工科技大厦1402室 京ICP备10010545号-5
技术支持和业务联系:info@testage.com.cn 电话:010-51297073

软件测试 | 领测国际ISTQBISTQB官网TMMiTMMi认证国际软件测试工程师认证领测软件测试网