设备驱动层解析.docx

上传人:b****2 文档编号:1872302 上传时间:2022-10-24 格式:DOCX 页数:10 大小:45.53KB
下载 相关 举报
设备驱动层解析.docx_第1页
第1页 / 共10页
设备驱动层解析.docx_第2页
第2页 / 共10页
设备驱动层解析.docx_第3页
第3页 / 共10页
设备驱动层解析.docx_第4页
第4页 / 共10页
设备驱动层解析.docx_第5页
第5页 / 共10页
点击查看更多>>
下载资源
资源描述

设备驱动层解析.docx

《设备驱动层解析.docx》由会员分享,可在线阅读,更多相关《设备驱动层解析.docx(10页珍藏版)》请在冰豆网上搜索。

设备驱动层解析.docx

设备驱动层解析

设备驱动层

驱动层一般由硬件抽象层(HAL)、板级支持包(BSP)和驱动程序组成,是嵌入式系统中不可或缺的重要部分。

它的作用是为上层程序提供外部设备的操作接口,并且实现设备的驱动程序。

上层程序可以不管操作的设备内部实现,只需要调用驱动的接口即可。

硬件抽象层(HAL)

硬件抽象层的层次结构

HAL层可细分为:

commonHAL(通用抽象层)、architectureHAL(体系结构抽象层)、variantHAL(变体抽象层)和platformHAL(平台抽象层)。

体系结构抽象层:

eCos所支持的不同处理器系列具有不同的体系结构,如ARM系列、PowerPC系列、MIPS系列等,体系结构抽象层对CPU的基本结构进行抽象和定义,此外它还包括中断的交付处理、上下文切换、CPU启动以及该类处理器结构的指令系统等。

变体抽象层指的是处理器在该处理器系列中所具有的特殊性,这些特殊性包括Cache、

MMU、FPU等,eCos的变体抽象层就是对这些特殊性进行抽象和封装。

平台抽象层是对当前系统的硬件平台进行抽象,包括平台的启动、芯片选择和配置、定时设备、I/O寄存器访问以及中断寄存器等。

硬件抽象层的这三个子模块之间没有明显的界线。

对于不同的目标平台,这种区分具有一定的模糊性。

例如,MMU和Cache可能在某个平台上属于体系结构抽象层,而在另一个平台上则可能属于变体抽象层的范围;再比如,内存和中断控制器可能是一种片内设备而属于变体抽象层,也可能是片外设备而属于平台抽象层

eCos的移植通过这三个子模块来完成,即平台抽象层的移植、变体抽象层的移植和体系结构抽象层的移植。

对一个新的体系结构来说,其体系统结构抽象层的建立相对来说比较困难,需要编写新的体系结构抽象层。

eCos支持大部分当前广泛使用的嵌入式CPU,已具有了支持各种体系结构的硬件抽象层。

因此,eCos的移植很少需要进行体系结构抽象

层的编写。

一般来说,进行eCos开发时,移植的主要工作在于变种抽象层和平台抽象层,这是由于eCos已实现了绝大多数流行嵌入式CPU的体系结构抽象层。

其中,平台抽象层主要完成的工作包括:

内存的布局、平台早期初始化、中断控制器以及简单串口驱动程序等

嵌入式系统通常包含三个部分:

嵌入式应用程序

嵌入式操作系统

硬件平台

应用程序运行在操作系统之上,利用操作系统提供的接口完成特定功能。

操作系统一般是RTOS,完成应用的任务调度和控制等核心功能。

硬件平台根据应用的不同,所具备的功能各不相同,而且所使用的硬件设备也不一样,因此具有复杂的多样性。

由于硬件平台的复杂多样,针对不同平台进行操作系统的移植是极为耗时的工作,因此经过不断发展,嵌入式系统的三层结构演化为四层结构,即在操作系统层和硬件平台之间,增加硬件抽象层(HAL)。

硬件抽象层本质上就是一组对硬件进行操作的API接口,是对硬件功能抽象的结果。

硬件抽象层通过API为操作系统和应用程序提供服务。

一般上HAL包含相关硬件的初始化、数据的输入输出操作、硬件设备的配置操作等功能有了硬件抽象层,操作系统和应用程序就不需要关心底层的硬件平台信息,内核与硬件相关的代码也不必因硬件的不同而修改,只要硬件抽象层能够提供必需的服务即可,从而屏蔽底层硬件,方便进行系统的移植。

HAL只是对硬件的一个抽象,对一组API进行定义,却不提供具体的实现。

通常HAL各种功能的实现是以BSP的形式来完成对具体硬件的操作的。

HAL设计的一些要素是:

与硬件的密切相关性

与操作系统的无关性

接口的功能包括硬件或者系统所需硬件支持的所有功能

接口简单明了

板级支持包(BSP)

板级支持包是介于系统硬件和操作系统的驱动程序之间的一层,是HAL的具体实现,

所以有些人也称BSP层位HAL。

BSP主要实现对操作系统的支持,为上层驱动程序提供访问硬件设备寄存器所需的函数,使之能够更好的运行于硬件主板。

BSP的特点有:

硬件相关性,BSP程序直接对硬件进行操作;操作系统相关性,不同操作系统的软件层次结构不同,硬件抽象层的接口定义不同,因此具体实现也不一样。

BSP,一定要按照操作系统的接口定义来实现,因此,大多数的BSP编程过程都是在某一个成型的BSP模板上进行修改。

具体功能体现在两个方面:

1.系统启动时,完成对硬件的初始化,如对系统内存,寄存器以及设备的中断设置等。

2•为操作系统的通用设备驱动程序提供访问硬件的手段,亦即硬件相关的设备驱动

设备驱动程序

设备驱动程序是指操作系统中的驱动程序,为上层软件提供设备的操作接口,必要的时使用BSP提供的函数来实现硬件设备操作。

驱动程序的好坏直接影响系统的性能。

BSP(boardsupportpackage)板级支持包BSP(boardsupportpackage)是板

级支持包,是介于主板硬件和操作系统之间的一层,应该说是属于操作系统的一部分,主要

目的是为了支持操作系统,为上层的驱动程序提供访问硬件设备寄存器的函数包,使之能够更好的运行于硬件主板。

在嵌入式系统软件的组成中,就有BSP。

BSP是相对于操作系

统而言的,不同的操作系统对应于不同定义形式的BSP例如VxWorks的BSP和Linux

的BSP相对于某一CPU来说尽管实现的功能一样,可是写法和接口定义是完全不同的,所以写BSP一定要按照该系统BSP的定义形式来写(BSP的编程过程大多数是在某一个成型的BSP模板上进行修改)。

这样才能与上层OS保持正确的接口,良好的支持上层

OS。

BSP主要功能为屏蔽硬件,提供操作系统及硬件驱动,具体功能包括:

1.单板硬件初始化,主要是CPU的初始化,为整个软件系统提供底层硬件支持

2.为操作系统提供设备驱动程序和系统中断服务程序

3.定制操作系统的功能,为软件系统提供一个实时多任务的运行环境

4.初始化操作系统,为操作系统的正常运行做好准备

举例在VxWorks中的网卡驱动,首先在config.h中包含该网卡,然后将网卡含网卡的信息的参数放入数组END_TBL_ENTRYendDevTbl[]中,系统通过函数muxDevLoad()调用这个数组来安装网卡驱动。

而在Linux中的网卡驱动,是在space.c中声明该网络设备,再把网卡驱动的一些函数加到dev结构中,由函数ether_setup()来完成网卡驱动的安装。

纯粹的BSP所包含的内容一般说来是和系统有关的驱动和程序,如网络驱动和系统中网络协议有关,串口驱动和系统下载调试有关等等。

离开这些驱动系统就不能正常工作。

用户也可以添加自己的程序到BSP中,但严格来说不应该算BSP.—般来说这种做法不建议。

因为一旦操作系统能良好运行于最终的主板硬件后,BSP也就固定了,不需要做任何改动。

而用户自己在BSP中的程序还会不断的升级更新,这样势必对BSP有不好的影响,对系统造成影响,同时由于BSP调试编译环境较差,也不利于程序的编译调试。

上层程序

Tools-Applications

I/OSystem

VxWorksLibraries

TCP/IP

WindKernel

BSP

SCSIControllerr

SerialController

ClockTimer

EthernetController

....硬件BSP在嵌入式系统和Windows系统中的不同

其实运行与PC机上的windows或linux系统也是有BSP的。

只是PC机均采用统一的X86体系架构,这样一定操作系统(windows,linux..)的BSP相对x86架构是单一确定的,不需要做任何修改就可以很容易支持OS在x86上正常运行,所以在PC机上谈论BSP这个概念也没什么意义了。

而对嵌入式系统来说情况则完全不同,目前市场上多种结构的嵌入式CPU(RISC)并

存(PPC,ARM,MIPS...J,为了性能的需要,外围设备也会有不同的选择和定义。

一个嵌入式操作系统针对不同的CPU,会有不同的BSP即使同一种CPU,由于外设的一点差别(如外部扩展DRAM的大小,类型改变),BSP相应的部分也不一样。

所以根据硬件设计编写和修改BSP,保证系统正常的运行是非常重要的。

BSP和PC机主板上的BIOS区别很大,BIOS主要是负责在电脑开启时检测、初始化系统设备(设置栈指针,中断分配,内存初始化..)、装入操作系统并调度操作系统向硬件发出的指令,它的Firmware代码是在芯片生产过程中固化的,一般来说用户是无法修改。

其实是为下载运行操作系统做准备,把操作系统由硬盘加载到内存,并传递一些硬件接口设置给系统。

在OS正常运行后,BIOS的作用基本上也就完成了,这就是为什么更改BIOS一定要从新关机开机。

PC机BIOS的作用更象嵌入式系统中的Bootloader(最底层的引导软件,初始化主板的基本设置,为接收外部程序做硬件上的准备)。

与Bootloader不同的是BIOS在装载OS系统的同时,还传递一些参数设置(中断端口定义,...),而Bootloader只是简单的装载系统

BSP是和操作系统绑在一起运行在主板上的,尽管BSP的开始部分和BIOS所做的工作类似,可是大部分和BIOS不同,作用也完全不同。

此外BSP还包含和系统有关的基本驱动(串口,网口…),此外程序员还可以编程修改BSP,在BSP中任意添加一些和系统无关的驱动或程序,甚至可以把上层开发而系统规划法的统统放到BSP中。

而BIOS程序是用户不能更改,编译编程的,只能对参数进行修改设置。

更不会包含

一些基本的硬件驱动。

BSP开发处于整个嵌入式开发的前期,是后面系统上应用程序能够正常运行的保证。

大概步骤如下:

1.硬件主板研制,测试。

2.操作系统的选定,BSP编程。

3.上层应用程序的开发。

BSP部分在硬件和操作系统,上层应用程序之间。

BSP是一种根据上层接口描述的一种硬件的支持包,对于某些嵌入式操作系统来说,就是驱动,但对于纯软件来说,驱动一般描述为基于pc或者linux或工作站的驱动,上层接口是操作系统,对驱动这个“名词”理解不同,会得到不同的定义。

一般来说前者接口简单(比如接口是一个结构体),而后者,理解其工作模型才是关键,如果都是针对于硬件做驱动,那么,配置寄存器就是相同点!

bsp可以理解成就是最简单的驱动代码,它属于OS或Firmware的一部分,在PC平台最小的BSP需完成的任务上就是初始化芯片组上中断控制器、内存控制器、PCI控制器与串口(作为调试接口,如果你没钱买那些昂贵的硬件仿真器),基本上有这些你就可以对系统板进行调试了,比如DEBUG各种设备驱动:

VGA、USB、IDE、MAC、AC97等。

在OS上的driver一般都是可动态加载的,当然嵌入OS里头直接编进去也就行了,对于一个最小的可运行OS核心来说,BSP是必不可少的,但driver不是。

这里的BSP是BoardSupportPackage的缩写,意为板载支持包。

在这里我们可以

把BSP与通用计算机领域中的BIOS(BasicInputandOutputSystem)对比,以加深对

BSP的认识。

首先来看看BIOS的功能。

BIOS是硬件与软件之间的一个接口,它足固化到计算机存储器中的段程序,主要提供以下功能。

1自检及初始化计算机:

主要负

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > IT计算机 > 电脑基础知识

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1