|
知识路径: > 嵌入式系统软件基础知识 > 嵌入式软件基础知识 >
|
被考次数:3次
被考频率:中频率
总体答错率:60%  
知识难度系数:
|
由 软考在线 用户真实做题大数据统计生成
|
考试要求:掌握
相关知识点:9个
|
|
|
|
大多数的嵌入式硬件设备都需要某种类型的软件进行初始化和管理,这部分工作是由设备驱动层来完成的,它负责直接与硬件交互,对硬件进行管理和控制,并为上层软件提供所需的驱动支持。
|
|
|
|
设备驱动层也称为板级支持包(Board Support Package,BSP),它包含了嵌入式系统中所有与硬件相关的代码。BSP的基本思想是将嵌入式操作系统与具体的硬件平台隔离开来。也就是说,在BSP当中,把所有与硬件相关的代码都封装起来,并向上提供一个虚拟的硬件平台,而操作系统就运行在这个虚拟的硬件平台上,它使用一组定义好的编程接口来与BSP进行交互,并通过BSP来访问真正的硬件。BSP在嵌入式系统中的角色,类似于PC系统中的BIOS和驱动程序。
|
|
|
对于一个成熟的商用操作系统而言,为了在业界得到广泛应用,就必须要能够支持种类众多的硬件平台,并实现应用程序的硬件无关性。一般来说,这种无关性是由操作系统来实现的。但是对于嵌入式系统来说,它没有像PC那样具有广泛使用的各种工业标准和统一的硬件结构。变化众多的硬件环境就决定了无法完全由操作系统来实现上层软件与底层硬件之间的无关性。因此各种商用的嵌入式操作系统都采用了分层设计的思想,将系统中与硬件直接相关的一层软件独立出来,称之为板级支持包。
|
|
|
对于不同的嵌入式操作系统,BSP的具体结构和组成也各不相同。一般来说,BSP主要包括两个方面的内容:引导加载程序BootLoader和设备驱动程序。
|
|
|
|
引导加载程序BootLoader是嵌入式系统加电后第一时间运行的软件代码。在桌面PC中的引导加载程序是由位于只读存储器ROM中的BIOS和位于硬盘的主引导记录(Master Boot Record,MBR)中的BootLoader引导程序(如LILO和GRUB)两部分代码组成的。BIOS在完成硬件检测和资源分配后,将硬盘MBR中的引导程序读到系统的内存当中,然后由MBR负责启动操作系统。但是在嵌入式系统当中,通常没有像BIOS那样的固件程序,因此整个系统的加载启动任务就完全由BootLoader来完成。例如,在一个基于ARM7TDMI内核的嵌入式系统中,系统在上电或复位时一般都从地址0x00000000处开始执行,而在这个地址处安排的通常就是系统的BootLoader程序。
|
|
|
简单地说,BootLoader就是在操作系统内核运行之前运行的一小段程序。通过这段程序,可以初始化硬件设备、建立内存空间的映射图,从而将系统的软硬件环境配置为一定的状态,以便为最终调用操作系统内核做好准备。
|
|
|
在嵌入式系统中,BootLoader的实现高度依赖于具体的硬件平台,对于不同的CPU体系结构和板级设备配置,需要不同的BootLoader。因此,要想建立一个通用的BootLoader几乎是不可能的。但是,一般来说,它主要包含以下基本功能:
|
|
|
(1)片级初始化。片级初始化主要完成微处理器的初始化,包括设置微处理器的核心寄存器和控制寄存器,微处理器的核心工作模式及其局部总线模式等。片级初始化把微处理器从上电时的缺省状态逐步设置成系统所要求的工作状态。
|
|
|
(2)板级初始化。通过正确地设置各种寄存器的内容来完成微处理器以外的其他硬件设备的初始化。例如,初始化LCD显示设备,初始化定时器,设置中断控制寄存器等。
|
|
|
(3)加载内核。将操作系统和应用程序的映像从Flash硬盘拷贝到系统的内存当中,然后跳转到系统内核的第一条指令处继续执行。
|
|
|
|
在一个嵌入式系统当中,设备驱动程序是必不可少的。所谓的设备驱动程序,就是一组库函数,用来对硬件进行初始化和管理,并向上层软件提供良好的访问接口。对于不同的硬件设备来说,设备驱动程序也是不一样的。但是一般来说,设备驱动程序都会具备以下的基本功能。
|
|
|
(1)硬件启动:在开机上电或系统重启的时候,对硬件进行初始化。
|
|
|
|
|
|
|
|
除了以上这些普遍适用的功能之外,设备驱动程序还可能有很多额外的、特定的功能。在具体实现的时候,这些功能一般是用函数的形式来实现的。这些函数主要有两种组织结构,即分层结构和混合结构,如下图所示。
|
|
|
|
|
所谓分层结构,就是把设备驱动程序当中的所有函数分为两种类型,一种是直接跟硬件交互,直接去操纵和控制硬件设备的,这些函数称为硬件接口;另一种是跟上层软件交互,作为上层软件的调用接口。分层结构的优点是:把所有与硬件有关的细节都封装在硬件接口当中,硬件升级时,只需要改动硬件接口当中的函数,而上层接口当中的函数不用做任何的修改。
|
|
|
所谓混合结构,就是在设备驱动程序当中,上层接口和硬件接口的函数是混在一起、相互调用的,它们之间没有明确的层次关系。无论是分层结构还是混合结构,它们给上层软件提供的调用接口都应该是明确而稳定的,即便设备驱动程序的内部有任何的变化,也不会影响到上层软件,这样,在移植操作系统和应用程序的时候,就非常方便。
|
|
|