- 1、本文档共38页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
说在前面 Linux设备驱动只有专著,没有教材,高校几乎均未开设此课,仅少数社会培训机构开展过培训,培训费天价 涉及内核,内容多,难理解,难表达,属费力不讨好的课,中国高校往往重科研轻教学,象这类需花费太多力气的课没人愿开 嵌入式系统的价值在软件,软件的核心在驱动 嵌入式系统方向不开Linux设备驱动不够深入,前几届未开主要缺人手,看到部分同学自学时总感到遗憾 课难,要有思想准备,有不懂正常,不求全懂,先打下点基础,以后有机再深入进去 说在前面 强调Linux内核基础知识与驱动程序设计方法,不在于某一具体设备的驱动程序的编写,授人以“渔”,而不是授人以“鱼” 如以太网卡、USB等设备,数据手册上百页,寄存器上百个,讲透一个设备的驱动就需一门课时间 本书使用“虚拟设备”,避开处理复杂的实际设备,将重点放在内核知识与驱动设计方法上 本书是一本公认的非常权威的专著,翻译也不错,跟着书走总不会错 要读书,读懂过的书即使10年也能轻易重新拾起 增加随堂考试,课堂讨论,课堂读书 参考书 深入理解Linux内核,第3版,陈莉君等译 深入理解Linux内核架构,郭旭译 Linux内核设计与实现,陈莉君等译 精通Linux设备驱动程开发,宋宝华等译 Linux设备驱动开发详解,宋宝华编著 什么是设备驱动程 设备驱动程序是对设备直接进行操作控制的程序 操作包括初始化、读、写等 什么是设备驱动程 (1)双亮驱动 void leds_on() { Led_Display(0x3); } 什么是设备驱动程 void led1_on() { led_state = led_state | 0x1; Led_Display(led_state); } 什么是设备驱动程 void led1_off() { led_state = led_state 0xfe; Led_Display(led_state); } 什么是设备驱动程 设备驱动程序是操作系统中直接控制硬件设备的程序,是内核的一部分,约占Linux内核源程序的60%~80% Linux内核采用可加载的模块化设计(LKMs,Loadable Kernel Modules)。将最基本的核心代码编译在内核中,其他的代码则往往编译为内核模块,在需要时才动态加载到内核中 通常CPU、PCI、TCP/IP、APM、VFS等的驱动直接编译在内核文件中,其它驱动(声卡、网卡等)则作为模块动态加载。 什么是设备驱动程 设备驱动程的作用在于提供机制,而不是策略 机制- 功能 策略-如何使用功能 驱动程序应该处理如何使硬件可用的问题,而将怎样使用硬件的问题留给上层应用程序 可装载模块 可装载模块是Linux 最吸引人的一个特性,用户可将一时不用或很少使用的功能(包括设备驱动程序)编译为模块,需要时再装载,不用时卸载,这样可以有效地减小内核。 当操作系统内核需要的扩展功能不存在时,内核模块管理守护进程kmod自动执行modprobe命令加载所需的内核模块 用户也可在命令行执行modprobe/insmod 命令将模块连接到运行中的内核中(装载),执行 rmmod 程序移除连接(卸载) 设备和模块的分类 Linux 设备可分为 3 种基本类型:字符设备、块设备与网络接口,相应地,设备驱动模块也有3种类型 字符设备 字符( char ) 设备是一种可以当作字节流来存取的设备( 如同一个文件 ); 字符驱动负责实现这种行为。 这样的驱动常常至少实现 open, close,read, 和 write 系统调用 字符终端( /dev/console )和串口( /dev/ttyS0 等 )是字符设备的例子, 因为它们很好地展现了流的抽象 字符设备通过文件系统结点来存取, 例如 /dev/tty1 和 /dev/lp0 字符设备文件和普通文件之间的唯一不同在于对普通文件的访问可以前后移动位置, 但是大部分字符设备只能顺序存取 设备和模块的分类 块设备 与字符设备类似, 块设备也通过位于 /dev 目录下的文件系统结点来存取。但块设备(例如一个磁盘)上能够容纳文件系统。 在Unix 系统, 进行I/O 操作时块设备每次只能传送一个或多个完整的块,每块包含 512 字节( 或一个更大的 2 的幂的数据 )的整块。 Linux可以让应用程序象读写字符设备一样地读写块设备,一次可传送任意数目的字节。 因而块和字符设备的区别仅仅在于内核内部管理数据的方式, 也就是在于内核与驱动程序之间的软件接口上,即块驱动和字符驱动的不同在内核接口上. 设备和模块的分类 网络接口 任何网络事务都通过一个网络接口来进行。 网络接口是 一个能够与其他主机交换数据的设备。通常, 网络接口是个硬件设备, 但是也可能是个纯软件设备,比如环回(lo
文档评论(0)