您的位置:首页 > 运维架构 > Linux

linux设备驱动编程-初探(1)--驱动程序概念

2010-05-24 17:02 309 查看
------linux设备驱动程序的简介
之前只是做项目的时候用过一段时间linux,对linux其实不怎么熟悉,但是大致的操作,编程的方法,工具(eclipse, gcc)方面还是稍微懂一点的,对于我来说,一直使用的是C语言(多数嵌入式系统开发使用),一直想花点时间来好好的学习一下linux下的驱动开发,正好这段时间一直在待业阶段,就好好的利用起这段时间来学习一下linux的驱动开发吧。
学习用书----O'REILLY 写的《LINUX 设备驱动程序》第三版,这本书也是大家所推荐的。
###########################################################
今天花了一个下午,把这本书的前2章看了一下,虽然很多东西不理解,但是有些理解的东西和概念还是有必要在这里总结一下,帮助自己理解。
设备驱动程序的作用:
据我的理解这个话题可能说起来要讲很多,但是简单的来说,驱动程序的作用就是就是应该处理如何让硬件可用的问题。
书中一直强调驱动程序的编写一定要注意【机制】和【策略】的区分。机制就是驱动程序提供的功能;策略则强调的是如何使用这些功能。对于使用,编程驱动程序的人员来说,驱动程序的机制是应该由驱动程序的编写人员的实现的,至于怎么样使用这些机制,则由上层的驱动程序使用人员【上层应用程序】来进行处理。所以,在编写不带策略的驱动程序的时候必须要注意一下:同时支持同步和异步的操作,驱动程序能够被多次打开,充分利用硬件特性,以及不具备用来“简化任务”的或者提供与策略相关的软件层。以上几点的理解:如下简单的示意图所示
+-----------------------+
|          App              |
+-----------------------+
|          driver           | ---->Kernel部分
+-----------------------+
|        hardware       |
+-----------------------+
图示中App层负责组织策略,调用driver提供的接口(API),使之能更有效的使用硬件的相关功能。其中driver部分应该属于OS的一部分,随OS一起发行,对于在linux系统中,程序员可以自己向linux系统内核添加功能,当然也可以移除该功能。
设备驱动程序的作用:
1.对设备初始化和释放;
2.把数据从内核传送到硬件和从硬件读取数据.;
3.读取应用程序传送给设备文件的数据和回送应用程序请求的数据.;
4.检测和处理设备出现的错误。
驱动程序与内核
内核功能分成以下几部分:进程管理,内存管理,文件管理,设备控制,网络功能。使用insmod程序将模块连接到正在运行的内核,也可以使用rmmod程序移除连接。linux系统将设备分成三种基本类型:字符模块,块设备,网络模块。其中字符设备是个能够像字节流一样被访问的设备,由字符设备驱动程序来实现这种特性,一般字符设备驱动程序要实现open,close,read,write等基本的系统调用。块设备。。。。。网络接口:负责发送和接受数据包,但是它不需要了解每项事务如何映射到实际传送的数据包。
系统调用init_module会检查调用进程是否具有将模块装载到内核的权利。
关于许可证条款:
GNU通用公共许可证GPL(General Public License):我们的GNU通用公共许可证决意保证你有发布自由软件的自由(如果你愿意,你可以对此项服务收取一定的费用);保证你能收到源程序或者在你需要时能得到它;保证你能修改软件或将它的一部分用于新的自由软件;而且还保证你知道你能做这些事情。具体的自由软件方面的版本的知识,请参考相关资料,以后逐步完善。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: