| 网站首页 | 文章中心 | 电子书下载 | 矢量图库 | 视频教程 | 素材下载 | 程序代码下载 | JS代码 | 论坛 | 
龙腾教程网  
常用软件类:
|杀毒安全 |联络聊天 |网络软件 |多媒体类 |系统工具 |图形图像 |系统工具 |应用软件 |行业软件
开发设计类:
|动画制作 |图像处理 |3D设计 |操作系统 |站长学院 |网络相关 |WEB设计 |数据库类 |程序开发
 
  您当前位置:您现在的位置: 龙腾软件教程网 >> 文章中心 >> 操作系统 >> linux >> 文章正文>>>>>> 
Linux系统下驱动程序框架概述

一、linux的设备驱动程序与外界的接口可以分为三个部分:

1.驱动程序与操作系统内核的接口。通过file_operations(include/linux/fs.h)数据结构来完成的。

2.驱动程序与系统引导的接口。这部分利用驱动程序对设备进行初始化。

3.驱动程序与设备的接口。这部分描述了驱动程序如何与设备进行交互,与具体的设备密切相关。

二、根据功能划分,设备驱动程序的代码有以下几部分:

1.驱动程序的注册和注销。

2.设备的打开和释放。

3.设备的读写操作。

4.设备的控制操作。

5.设备的中断和轮询处理。

三、驱动程序的注册和注销:

设备驱动程序可以在系统启动的时候初始化,也可以在需要的时候动态加载。字符设备的初始化由chr_dev_init()完成,包括对内存(devfs_register_chrdev(MEM_MAJOR,"mem",&memory_fops)),终端(tty_init()),打印机(lp_init()),鼠标(misc_init())等字符设备的初始化。

块设备初始化由blk_dev_init()完成,这包括对IDE硬盘(ide_init()),软盘(floppy_init()),光驱等块设备的初始化。

每个字符设备或是块设备的初始化都是通过devfs_register_chrdev()或是devfs_register_blkdev()向内核注册。在关闭字符设备或是块设备时,还需要通过devfs_unregister_chrdev()或是devfs_unregister_blkdev()从内核中注销设备。

四、设备的打开和释放:

打开设备是由open()来完成的。例如,打印机是用lp_open()打开的,而硬盘是用hd_open()打开的。在大部分设备驱动程序中,open完成如下工作:

1.增加设备的是用计数。

2.检查设备的相关错误,如设备尚未准备好或是类似硬件的问题。

3.检查是首次打开,则初始化设备。

4.识别次设备号,如有必要则更新f_op指针。

5.如果需要,分配且设置要放在filp->private_data里的数据结构。

释放设备由release()来完成,例如释放打印机是用lp_release(),而释放终端设备是用tty_release()。释放设备的一般步骤包括:

1.释放在filp->private_data中的open分配的内存。

2.如果是最后一次释放,则关闭设备。

3.递减设别的使用计数。

五、设备的读写操作:

字符设备使用各自的read()和write()来进行数据读写。例如,对虚拟终端的读写是通过vcs_read()和vcs_write()来进行数据读写的。

块设备使用通用的generic_file_read()和generic_file_write()来进行数据读写。这两个通用函数向请求表添加读写请求,内核可以通过ll_rw_block()优化请求顺序。由于是对内存缓冲区而不是设备进行操作的,因而可以加快读写请求。如果内存缓冲区内没有要读入的数据或是要将写请求写入设备,那么就要真正的执行数据传输。这是通过数据结构request_queue和request_fn()来完成(include/linux/blkdev.h)。

六、设备的控制操作:

除了读写操作,有时还要控制设备。这可以通过设备驱动程序中的ioctl()来完成。例如IDE硬盘的控制可以通过hd_ioctl(),对光驱的控制可以通过cdrom_ioctl()。

与读写操作不同,ioctl()的用法与具体设备密切相关。以软驱的floppy_ioctl()为例(drivers/block/floppy.c):

static int fd_ioctl(struct inode *inode,

struct file *filp,

unsigned int cmd,

unsigned long param);

其中,cmd的取值及含义都是与软驱有关的,比如,FDEJECT表示弹出软盘。

除了ioctl(),设备驱动程序还可能有其他控制函数,比如llseek()等。

七、设备的轮询和中断处理:

对于不支持中断的设备,读写时需要轮询设备状态,以及是否需要继续进行数据传输。例如,打印机。如果设备支持中断,则可按照中断方式进行。


上一篇:
  • 上一篇文章:
  • 下一篇
  • 下一篇文章: 没有了
  • 收藏此文到百度搜藏 百度搜藏| 新浪VIvi| 365key| Younote| 博采中心| 你好BLOG| 亿友网摘| 和讯网摘|
    相关文章    
    使用Linux系统架设安全的网关
    Linux系统安全机制进阶分析
    剖析Linux病毒工作过程和关键环节
    Linux在企业安全管理中的应用
    Linux下DNS服务器安装配置方法
    Linux 汇编语言开发指南 八、小结
    Linux 汇编语言开发指南 七、GCC 内联汇编
    Linux 汇编语言开发指南 六、命令行参数
    Linux 汇编语言开发指南 五、系统调用
    Linux 汇编语言开发指南 四、Linux 汇编工具
     
     
     
    最新文章
    普通文章 Linux系统下驱动程序框架概述最新文章
    普通文章 关闭暴风影音stormliv.exe进程最新文章
    普通文章 Oracle数据库中如何使用超过2G的最新文章
    普通文章 Discuz!论坛时尚表情包安装方法最新文章
    普通文章 MAYA制作古装美女最新文章
    普通文章 利用快车打造网上装机库最新文章
    普通文章 AutoCAD最新 2009版本 新特性体验最新文章
    普通文章 GreenBrowser浏览器保存图片使用最新文章
    普通文章 Photoshop制作清凉诱人的哈密瓜最新文章
    普通文章 Photoshop绘制卡通造型的头发最新文章
     
    热门文章
    推荐文章 Illustrator手绘古典游戏美女图片最新文章
    推荐文章 Photoshop绘制奇幻的宇宙幻想图最新文章
    推荐文章 Painter手绘逼真的百合花最新文章
    推荐文章 Photoshop绘制卡通动漫娃娃
     
     
    设为首页 | 加入收藏 | 联系站长 | 友情链接 | 版权申明 

    版权所有2006-2008 龙腾教程网