LINUX设备驱动开发及内核原理

LINUX设备驱动开发及内核原理

ID:38567496

大小:350.32 KB

页数:95页

时间:2019-06-15

LINUX设备驱动开发及内核原理_第1页
LINUX设备驱动开发及内核原理_第2页
LINUX设备驱动开发及内核原理_第3页
LINUX设备驱动开发及内核原理_第4页
LINUX设备驱动开发及内核原理_第5页
资源描述:

《LINUX设备驱动开发及内核原理》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、嵌入式Linux驱动高级开发及内核原理陈应刚chenyg@miiceic.org.cn日程安排设备驱动简介建立和运行模块字符驱动调试技术并发和竞争高级字符驱动操作时间,延时和延后工作分配内存与硬件通讯中断处理块设备驱动日程安排设备驱动简介设备驱动简介驱动是什么Driverisasoftwarelayerthatliesbetweentheapplicationsandtheactualdevice驱动程序的角色提供机制,而不是策略隐藏在UNIX中的哲学mechanism:Whatcapabilitiesareprovided.policy:Howthesecapabili

2、tiescanbeused.Kernel的作用Kernel可划分为下列功能单元进程管理:进程调度,资源分配,进程间通信.内存管理:其实也算是资源分配的一部分文件系统:管理,组织物理媒介上数据的方法设备控制:设备驱动(ldd3所关注的)网络:实质上是进程间通信.但它不局限于一个特定的进程.它关注收/发packets,路由,地址解析...Kernel的结构模块可加载模块(lodablemodules)module:可实时加载到内核中的代码,它可动态连接到内核(insmod,rmmod)设备驱动就是module的代表,但module还包括文件系统等等.设备和模块的分类模块分为这

3、些类型,每种类型的模块驱动对应类型的设备charactermodule,blockmodule,networkinterfaceothermodule字符设备和块设备字符设备:以字节流的形式被访问的设备。e.g:/dev/console:文本控制台./dev/ttyS0:串口它通过文件系统节点被访问.e.g:/dev/tty1,/dev/lp0字符设备与一般文件(regularfile)的区别可以在一般文件中前后移动(lseek),但只能顺序访问字符设备.当然,也有特例:framegrabbers.块设备:能支持文件系统的设备传统的UNIX:只能以block(512B)为

4、单位访问块设备Linux:能以访问字符设备的方式访问块设备,即以字节文单位访问块设备.Linux中字符设备与块设备的区别内核内部对数据的组织和管理不同,对驱动开发者来说透明接口不同:使用两套不同的interface网络设备网络接口:能与其他主机通信的设备它可以是硬件设备,也可以是软件设备,比如lo.(参考TCP/IP详解p26)网络接口只管收发数据包,而不管这些数据包被什么协议所使用不同于字符设备和块设备,网络接口没有对应的文件系统节点.虽然可以通过类似eth0这样的"文件名"来访问网络接口,但文件系统节点中却没有针对网络接口的节点内核与网络接口之间的通信也不同于内核与字

5、符/块设备之间的通信(read,write),它们之间使用特定的传输数据包的函数调用其他设备也有一些module不能严格地划分类型.USBmodule:它工作在内核的USB子系统之上实际的USB设备可以是字符设备,块设备,也可以是网络接口在设备驱动之外,别的功能,不论硬件和软件,在内核中都是模块化的例如文件系统日程安排设备驱动简介建立和运行模块建立和运行模块建立开发环境ldd3例子开发环境linux2.6.102.6驱动开发需要预先安装内核源码源码需要从官方下载kernel.org或者其他发行版的官方下载直接解压到/usr/src目录下版本影响内核官方版本注意kernel

6、.org注意发行版的内部版本最新内核版本linux2.6.20/21工作队列接口变化小版本变动不会对驱动的架构造成太大影响对于不同发行版,不同内核版本要做少量移植和测试内核模块VS应用程序执行机制不同模块初始化模块退出类似事件编程使用库不一样无法使用标准库只能调用内核提供的函数用户空间VS内核空间用户空间VS内核空间应用程序运行在用户空间设备模块运行在内核空间运行模式不一样内存地址映射也不一样用户空间和内核空间的转换可能发生在进程中的系统调用时或者硬件中断系统调用虽然在内核中执行,但是依然是在进程的上下文中进行的,所以可以访问到进程中的数据。中断处理和进程是异步的了,而且

7、不和任何进程有关系模块跨越两个空间,有两个触发入口一些函数作为系统调用的一部分执行一些函数负责中断处理内核中的并发应用程序很多时候是按照顺序来执行的内核处于并发的执行环境当中内核当中有并发的进程中断需要响应和处理内核中的服务也在运行对称多处理器导致并行模块的加载卸载和查看加载使用insmod卸载使用rmmod查看使用lsmod模块代码staticint__initinitialization_function(void){/*initializationcodehere*/}module_init(initialization

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

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

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