文章分类 | 推荐文章 | 最新文章 | 热点文章 | 最新软件 | 精品软件 | 下载排行 | 推荐下载 | firefox | WPS | 杀毒软件 | Picasa
清风网络
首 页 软件下载 网络学院 数码学院
QQ 电脑入门 游戏 操作系统 图形图像 办公软件 媒体动画 精文荟萃 常用软件 网页编程 技术开发 网络技术 认证考试 网站建设 文章专栏
当前位置:清风网络学院操作系统 Linux如何编写Linux设备驱动程序
精品推荐
特别推荐
·为何Linux比Windows更安全?
·Linux和Unix最常用的网络命令
·Linux系统下安全防护十大招数
·Linux各种服务器的架设
·Linux操作系统下用单网卡捆绑双IP
·恢复被误删除的Linux文件
·在Linux服务器上做备份和恢复
·Linux中网络参数的意义及其应用
·linux知识大全
·解析Linux服务器远程控制技术
·新手关于Linux系统的一些错误认识
·Linux系统至少有五大点比Vista更好
·Linux攻略 关于Apache安装、配置、优化
·详细讲解Linux操作系统的进程管理的功能
·解决Linux和Windows双系统的引导问题
·新手学堂:Linux操作系统安全性能检查笔记
·600个优秀网站
·提高Linux操作系统网速的方法
·Linux系统下挂载硬盘光驱和U盘的方法
·Linux发行版图标大全
热点TOP10
·Linux常用命令详解
·Linux学习手册
·网络组建大全(包括企业网、校园网、网吧和基础知识)
·linux知识大全
·Linux各种服务器的架设
·RedHat linux 8.0下内核编译步骤和说明
·linux下jdk的安装与配置
·VMware中Linux内核2.6.14.4编译全过程
·Red Hat9.0与Win XP双系统安装指南
·服务器系统:Unix平稳 Windows欲甩Linux
·LINUX 常见问题1000个详细解答
·Linux系统下的网络安全工具详解
·入门:Linux 2.6 内核的嵌入式系统应用
·Linux以及各大发行版介绍
·linux下通过脚本实现自动重启程序
·用.iso文件从硬盘安装redhat linux 7.3
·Linux无盘工作站架设实例
·Linux和Unix最常用的网络命令
·Linux系统下挂载硬盘光驱和U盘的方法
·Linux下安装和使用杀毒软件AntiVir

如何编写Linux设备驱动程序

日期:2005年5月10日 作者:清风网络学院 查看:[大字体 中字体 小字体]


Linux是Unix操作系统的一种变种,在Linux下编写驱动程序的原理和思想完全类似于其他的Unix系统,但它dos或window环境下的驱动程序有很大的区别。在Linux环境下设计驱动程序,思想简洁,操作方便,功能也很强大,但是支持函数少,只能依赖kernel中的函数,有些常用的操作要自己来编写,而且调试也不方便。本人这几周来为实验室自行研制的一块多媒体卡编制了驱动程序,获得了一些经验,愿与Linux fans共享,有不当之处,请予指正。

  以下的一些文字主要来源于khg,johnsonm的Write linux device driver,Brennan's Guide to Inline Assembly,The Linux A-Z,还有清华BBS上的有关device driver的一些资料. 这些资料有的已经过时,有的还有一些错误,我依据自己的试验结果进行了修正.

  一、Linux device driver 的概念

  系统调用是操作系统内核和应用程序之间的接口,设备驱动程序是操作系统内核和机器硬件之间的接口.设备驱动程序为应用程序屏蔽了硬件的细节,这样在应用程序看来,硬件设备只是一个设备文件, 应用程序可以象操作普通文件一样对硬件设备进行操作.设备驱动程序是内核的一部分,它完成以下的功能:

  1.对设备初始化和释放.

  2.把数据从内核传送到硬件和从硬件读取数据.

  3.读取应用程序传送给设备文件的数据和回送应用程序请求的数据.

  4.检测和处理设备出现的错误.

  在Linux操作系统下有两类主要的设备文件类型,一种是字符设备,另一种是块设备.字符设备和块设备的主要区别是:在对字符设备发出读/写请求时,实际的硬件I/O一般就紧接着发生了,块设备则不然,它利用一块系统内存作缓冲区,当用户进程对设备请求能满足用户的要求,就返回请求的数据,如果不能,就调用请求函数来进行实际的I/O操作.块设备是主要针对磁盘等慢速设备设计的,以免耗费过多的CPU时间来等待.

  已经提到,用户进程是通过设备文件来与实际的硬件打交道.每个设备文件都都有其文件属性(c/b),表示是字符设备还蔤强樯璞?另外每个文件都有两个设备号,第一个是主设备号,标识驱动程序,第二个是从设备号,标识使用同一个设备驱动程序的不同的硬件设备,比如有两个软盘,就可以用从设备号来区分他们.设备文件的的主设备号必须与设备驱动程序在登记时申请的主设备号一致,否则用户进程将无法访问到驱动程序.

  最后必须提到的是,在用户进程调用驱动程序时,系统进入核心态,这时不再是抢先式调度.也就是说,系统必须在你的驱动程序的子函数返回后才能进行其他的工作.如果你的驱动程序陷入死循环,不幸的是你只有重新启动机器了,然后就是漫长的fsck.//hehe

  读/写时,它首先察看缓冲区的内容,如果缓冲区的数据

  如何编写Linux操作系统下的设备驱动程序


  二、实例剖析

  我们来写一个最简单的字符设备驱动程序。虽然它什么也不做,但是通过它可以了解Linux的设备驱动程序的工作原理.把下面的C代码输入机器,你就会获得一个真正的设备驱动程序.不过我的kernel是2.0.34,在低版本的kernel上可能会出现问题,我还没测试过.//xixi

  #define __NO_VERSION__
  #include <linux/modules.h>
  #include <linux/version.h>

  char kernel_version [] = UTS_RELEASE;

  这一段定义了一些版本信息,虽然用处不是很大,但也必不可少.Johnsonm说所有的驱动程序的开头都要包含<linux/config.h>,但我看倒是未必.

  由于用户进程是通过设备文件同硬件打交道,对设备文件的操作方式不外乎就是一些系统调用,如 open,read,write,close...., 注意,不是fopen, fread,但是如何把系统调用和驱动程序关联起来呢?这需要了解一个非常关键的数据结构:

strUCt file_operations {

int (*seek) (struct inode * ,struct file *, off_t ,int);

[1] [2] [3] [4] 下一页 




上一篇:Linux中文件查找方法大全

下一篇:MySQL 如何对抗解密高手

如何编写Linux设备驱动程序 相关文章:
·局域网中映射网络驱动器的使用
·Windows中如何正确认识和安装驱动程序
·Vista中摄像头驱动问题!
·图解安装--nForce2芯片组USB2.0驱动
·kernel2.6.10安装ATI8.8.25驱动
·SATA串口硬盘Vista系统驱动安装实录
·没有SATA硬盘驱动如何装xp
·3DS MAX图文教程:事件驱动粒子系统——喷泉效果
·开发WDM型的USB设备驱动程序
·ATi显卡驱动安装和改造问题解答
如何编写Linux设备驱动程序 相关软件:
·万能声卡驱动下载适用于VIA芯片声卡
·万能显卡驱动下载适用于所有显卡
·万能光驱驱动
·AMD Processor Driver(AMD驱动程序)V1.3.2.6 WHQL
·VIA AC97 Vinyl Audio driver(VIA威盛声卡驱动)V6.80b 多国语言
·Realtek瑞昱AC97声音芯片驱动V3.94
·LINUX设备驱动程序(内核2.2)
·万能摄像头驱动下载FOR Windows
·易驱动个人版v3.1
·WindowsNT设备驱动程序设计指南

特别声明:本站除部分特别声明禁止转载的专稿外的其他文章可以自由转载,但请务必注明出处和原始作者。文章版权归文章原始作者所有。对于被本站转载文章的个人和网站,我们表示深深的谢意。如果本站转载的文章有版权问题请联系编辑人员,我们尽快予以更正。
[打印本页] [关闭窗口] 转载请注明来源:http://www.viphot.com
| 帮助(?) | 版权声明 | 友情连接 | 关于我们 | 信息发布
Copyright 2007 www.viphot.com All Rights Reserved. 鄂ICP备05000083号Powered by:vipcn