Linux设备驱动开发入门

Linux设备驱动开发入门

ID:36773234

大小:580.84 KB

页数:32页

时间:2019-05-15

Linux设备驱动开发入门_第1页
Linux设备驱动开发入门_第2页
Linux设备驱动开发入门_第3页
Linux设备驱动开发入门_第4页
Linux设备驱动开发入门_第5页
资源描述:

《Linux设备驱动开发入门》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、ddd1:Linux设备驱动开发入门2:本文以快捷而简单的方式讲解如何像一个内核开发者那样开发linux设备驱动3:4:源作者:XavierCalbet5:6:版权:GNUFreeDocumentationLicense7:8:翻译:顾宏军(http://www.ossp.cn)9:10:中文版权:创作共用.署名-非商业用途-保持一致11:知识准备12:要开发Linux设备驱动,需要掌握以下知识:13:14:•C编程需要掌握深入一些的C语言知识,比如,指针的使15:用,位处理函数,等。16:•微

2、处理器编程需要理解微机的内部工作原理:存贮器地17:址,中断,等。这些内容对一个汇编程序员应该比较熟18:悉。19:Linux下有好几种不同的设备。为简单起见,本文只涉及以模块20:形式加载的字符设备。使用2.6.x的内核。(特别是DebianSarge使用的2.6.8内核。)21:用户空间和内核空间22:23:当你开发设备驱动时,需要理解“用户空间”和内核空间之间的区别。24:25:-1/32-ddd26:•内核空间:Linux操作系统,特别是它的内核,用一种简单27:而有效的方法管理机器的硬

3、件,给用户提供一个简捷而统28:一的编程接口。同样的,内核,特别是它的设备驱动程29:序,是连接最终用户/程序员和硬件的一坐桥或者说是接30:口。任何子程序或者函数只要是内核的一部分(例如:模31:块,和设备驱动),那它也就是内核空间的一部分。32:33:•用户空间.最终用户的应用程序,像UNIX的shell或者其它的34:GUI的程序(例如,gedit),都是用户空间的一部分。很显然,35:这些应用程序需要和系统的硬件进行交互。但是,他们不36:是直接进行,而是通过内核支持的函数进行。它们的关

4、系可以通过下图表示:37:38:39:图1:应用程序驻留在用户空间,模块和设备驱动驻留在内核空间40:-2/32-ddd41:用户空间和内核空间之间的接口函数42:43:内核在用户空间提供了很多子程序或者函数,它们允许用户应用44:程序员和硬件进行交互。通常,在UNIX或者Linux系统中,这种45:交互是通过函数或者子程序进行的以便文件的读和写操作。这是因为从用户的视角看,UNIX的设备就是一个个文件。46:47:从另一方面看,在Linux内核空间同样提供了很多函数或者子程48:序以在底层直接

5、地对硬件进行操作,并且允许从内核向用户空间传递信息。49:50:通常,用户空间的每个函数(用于使用设备或者文件的),在内51:核空间中都有一个对应的功能相似并且可将内核的信息向用户传52:递的函数。这种关系可从下表看出来。目前这个表是空的,在我们后面每个表项都会填入对应的函数。53:54:表1.设备驱动事件和它们在内核和用户空间的对应的接口函数55:56:57:事件用户函数内核函数58:59:60:加载模块61:62:63:打开设备64:65:66:读设备67:68:69:写设备70:71:72

6、:关闭设备73:74:75:卸载模块76:77:78:内核空间和硬件设备之间的接口函数79:在内核空间同样有可以控制设备或者在内核和硬件之间交80:换信息的函数。表2解释了这些概念。同样的,这个表将在介绍到相应内容时填写上。81:82:83:表2.设备驱动事件和它们在内核空间与硬件设备之间对应的接口函数84:事件内核函数-3/32-ddd86:87:读数据88:89:写数据90:91:92:第一个驱动:在用户空间加载和卸载驱动93:94:这一节将向你展示如何开发你的第一个Linux设备驱动,该驱

7、动作为一个内核模块存95:在。96:首先,写一个文件名为nothing.c的文件,代码如下:97:=98:#include99:MODULE_LICENSE("DualBSD/GPL");100:101:内核从2.6.x开始,编译模块变得稍微复杂些。首先,你需要有一102:份完整的,编译了的内核源代码树。如果你使用的是Debian103:Sarge系统,你可以按照附录B(在本文末尾)的步骤进行操作。104:在以下的内容里,假设你使用的是2.6

8、.8内核。105:106:接下来,你需要撰写一个makefile。本例子所用的makefile文件名107:称为Makefile,内容如下:108:=109:obj-m:=nothing.o110:111:和之前版本的内核不同,你需要使用和你当前系统所用内核版本112:相同的代码来编译将要加载和使用的模块。编译该模块,可以使113:用以下命令:114:$make-C/usr/src/kernel-source-2.6.8M=`pwd`modules115:这个非常简单的模块在加载

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。