您的位置:首页 > 其它

设备驱动概述以及开发环境的构建继续1

2017-02-01 01:30 267 查看
在没有操作系统的情况下,设备驱动的接口被直接提交给应用软件工程师。应用软件没有跨越任何层次就直接访问设备

的接口,驱动包含的接口函数也与硬件的功能直接吻合。没有任何的附加功能。
另一种不合理的设计在于在应用用操作硬件的寄存器,而不单独设计驱动模块。

有操作系统时的是设备驱动
无操作系统时设备驱动的硬件操作工作仍让是比不可少的。没有这一部分,驱动不可能与硬件打交道。
其次,我们还要将驱动融入内核。为了实现融合,必须在所有设备的驱动中设计面向操作系统内核的接口。这样的接口

由操作系统规定,对一类设备而言结构一致,独立于具体的设备。
由此可见,当系统中存在操作系统的时候,驱动就变成了连接硬件和内核的桥梁。操作系统的存在势必要求设备驱动附

加更多的代码和功能。时把单一的“驱使硬件设备行动”变成操作系统内与硬件交互的模块。他对外呈现为操作系统的API不再

给应用软件工程师直接提供接口。

一个复杂的软件系统需要处理多个并发的任务。没有操作系统,想要完成多任务并发是很困难的。
其次,操作系统给我们提供内存管理机制。对于的多数喊MMU的32位处理机而言,Linux操作系统可以让每个进程都可以独

立地访问4GB的内存空间。
不幸的是,操作系统通过给驱动设备制造麻烦来达到给上层应用提供便利的目的。当驱动都按照操作系统给出的独立于设

备的接口而设计时,应用程序将可以使用统一的系统调用接口来访问各种设备。
对于类UNIX的VxWorks,Linux等操作系统而拖延,当应用程序通过write(),read()等函数读写文件就可以访问各种字符设

备和块设备。而不论设备的具体类型和工作方式。

Linux设备驱动
驱动针对的对象是存储器和外设,包括CPU内部集成的存储器和外设。而不是针对CPU内核,Linux将存储器和外设分为三个

基础大类:
字符设备
块设备
网络设备

字符设备指那些必须以串行顺序依次进行访的设备,比如:触摸屏,磁带驱动器鼠标等。
块设备可以按任意顺序进行访问。以块为单位进行访问,如硬盘 MMC等。

字符设备和块设备的驱动设计有很大的差异。他们都要使用文件系统的操作接口open(),close(),read(),write()
网络设备面向数据包的发送和接收设计,他并不倾向于对应于文件系统的节点。内核与网络设备的通信与内核和字符设备,

块设备的通信方式不同。使用套接字进行通信。
除网络设备外,字符设备与块设备都被映射到Linux文件系统的文件和目录,通过文件系统的系统调用接口即可访问字符设

备和块设备。Linux的块设备有两种访问方法:一种是类似dd命令对应的原始块设备。例如/dev/sdb1;(这就是原始块设备哦),

另外一种是在块设备上建立FAT等文件系统。针对磁盘·Linux的虚拟文件系统则对他们进行了抽象。
应用程序可以使用Linux的系统调用接口编程。
Linux设备驱动的难点重点:
学习是一项繁浩的工程。
编写linux驱动要求工程师有非常好的硬件基础。总的各个总线的原理,以及轮询,中断,DMA的原理,PCI总线的工作方式

以及CPU的内存管理单元。
编写驱动要求工程师有非常好的C语言基础。能灵活地运用C语言的结构体、指针、函数指针以及内存的动态申请和释放等。
编写Linux设备驱动要求工程师有一定的Linux内核基础。至少要明白驱动与内核的接口。尤其是对块设备,网络设备,Flash

设备,串口设备等复杂设备,内核定义的驱动体系结构本身就非常复杂。

编写Linux设备驱动要求工程师有非常好的多任务并发控制和同步的基础。因为在驱动中会大量使用自旋锁。

爱你 YZ
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: