- 1、本文档共54页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
[计算机软件及应用]linux驱动原理-LED驱动分析
信盈达嵌入式实训学院--嵌入式Linux 培训教程
第五章:Linux 驱动介绍
5.1 驱动原理:
LINUX 提供标准接口函数给底层,底层驱动按照 LINUX 编程规则进行驱动编写。操作系统是通过各
种驱动程序来驾驭硬件设备的,它为用户屏蔽了各种各样的设备,驱动硬件是操作系统最基本的功能,并
且提供统一的操作方式。设备驱动程序是内核的一部分,硬件驱动程序是操作系统最基本的组成部分,在
Linux 内核源程序中也占有60%以上。因此,熟悉驱动的编写是很重要的.
Linux 内核中采用可加载的模块化设计(LKMs,Loadable Kernel Modules),一般情况下编译的
Linux 内核是支持可插入式模块的,也就是将最基本的核心代码编译在内核中,其他的代码可以编译到内
核中,或者编译为内核的模块文件(在需要时动态加载)。
5.2 内核模块的主要相关命令
lsmod:列出当前系统中加载的模块,其中左边第一列是模块名,第二列是该模块大小,第三列
则是使用该模块的对象数目。
rmmod:是用于将当前模块卸载。
insmod 和modprobe 是用于加载当前模块,但insmod 不会自动解决依存关系,即如果要加
载的模块引用了当前内核符号表中不存在的符号,则无法加载,也不会去查在其他尚未加载的模
块中是否定义了该符号;modprobe 可以根据模块间依存关系以及/etc/modules.conf 文件中的
内容自动加载其他有依赖关系的模块。
5.3 设备分类
Linux 系统的设备分为三类:字符设备-- (包含一个混杂设备)、块设备和网络设备。
字符设备通常指像普通文件或字节流一样,以字节为单位顺序读写的设备, 如并口设备、虚拟控制台
等。字符设备可以通过设备文件节点访问,它与普通文件之间的区别在于普通文件可以被随机访问(可以
前后移动访问指针),而大多数字符设备只能提供顺序访问,因为对它们的访问不会被系统所缓存。但也有
例外,例如帧缓存(framebuffer)是一个可以被随机访问的字符设备。
块设备通常指一些需要以块为单位随机读写的设备,如 IDE 硬盘、SCSI 硬盘、光驱等。块设备也是
通过文件节点来访问,它不仅可以提供随机访问,而且可以容纳文件系统(例如硬盘、闪存等)。Linux 可
以使用户态程序像访问字符设备一样每次进行任意字节的操作,只是在内核态内部中的管理方式和内核提
供的驱动接口上不同。
$ ls –l /dev
crw-rw 1 root uucp 4, 64 08-30 22:58 ttyS0 /*串口设备, c 表示字符设备*/
brw-r 1 root disk 8, 0 08-11 23:03 sda /*硬盘设备,b 表示块设备*/
5.4 设备驱动程序工作原理
模块在调用insmod 命令时被加载,此时的入口点是init_module()函数,通常在该函数中完成设
备的注册。同样,模块在调用 rmmod 命令时被卸载,此时的入口点是 cleanup_module()函数,在
该函数中完成设备的卸载。在设备完成注册加载之后,用户的应用程序就可以对该设备进行一定的操作,
深圳信盈达电子有限公司 专业提供单片机、嵌入式、ARM、LINUX、Android 技术服务、技术培训。
信盈达嵌入式实训学院--嵌入式Linux 培训教程
如open()、read()、write()等,而驱动程序就是用于实现这些操作,在用户应用程序调用相应入口函
数时执行相关的操作。
5.5 应用程序、库、内核、驱动程序的关系:
4 层软件关系如下:
1. 应用程序通过open 函数打开设备文件;
2. 库根据open 函数执行swi 中断,引起异常进入内核;
3. 内核根据异常相关参数(应用程序传递的)找到相应驱动程序,并返回一文件句柄给库;
4. 库根据文件句柄,触发库提供的write 或ioclt 函数(函数相关参数由应用程序提供)执行swi 触
发异常后进入内核;
5. 内核根据传递的相关参数调用驱动程序相关函数进行相关操作,如点亮led 等。
5.6 LINUX 驱动程序开发步骤:
1. 查看原理图、数据手册,了解设备的操作方法;
2. 在内核中找到相
文档评论(0)