围城
分类: LINUX
2015-03-13 18:45:37
首先来看看BIOS的功能。BIOS是硬件与软件之间的一个接口,它足固化到计算机存储器中的段程序,主要提供以下功能。
①自检及初始化计算机:主要负责计算机的启动,主要有加电白检(POST)、初始化和引导程序三个步骤,目的是为了完成检查计算机硬件、创建中断向量及中断向量表、设置寄存器、对外部设备进行初始化、引导操作系统等任务。
②程序服务处理及硬件中断处理:程序服务处理主要是指与输入输出设备相关的操作,比如读写硬盘、与打印机扫描仪的数据传输等。硬件中断处理就足处理硬件的一些需求。只有将下面两大功能处理好,计算机才能真正地“软”“硬”结合正常工作。
③程序服务请求:主要是为了调用中断处理来实现硬件的某些功能,并将这些功能以分组的方式分配以中断号,当需要某功能时,直接调用即可。
在嵌入式操作系统中,BSP以嵌入式操作系统“驱动程序”的身份出现,在系统启动之初,BSP所做的工作类似于BIOS,也是负责系统加电、初始化各种设备、装入操作系统等。但BSP与BIOS是不同的,尤其是在系统启动完成之后。二者主要有以下几个方面的区别。
①BSP是与操作系统相适应的,但BIOS却是和所在的主板相适应的,虽然BSP和BIOS通常都由硬件制造商提供,但二者提供BSP或者BI0S的“初衷”不一样,前者是为了让自己的硬件支持某种嵌入式操作系统,而后者则是为了所有操作系统都能够正常在其生产的硬件上正常工作。
②开发人员可以对BSP做一定的修改,加入自己想加入的一些东西,像驱动程序。但BIOS一般不能更改,开发人员只能对其进行升级或者更改配置的操作,相对来讲,嵌入式开发人员对于BSP的自主性更大。
③一个BSP对应一个硬件和一个嵌入式操作系统,即同一个处理器可能对应多个BSP,同一个嵌入式操作系统针对不同的处理器也需要不同的BSP。而一个BIOS是对应一个硬件和多个操作系统,也就是说只要硬件确定,其BIOS就确定,无论使用哪种通用操作系统。
④BSP里可以加入非系统必需的东西,比如一些驱动程序甚至一些应用程序,但通用计算机的主板生产商一般不会这样做。
对BSP和B10S的区别有了一定认识,我们再来看看BSP的特点:
①操作系统相关性;
②硬件相关性。
即上面所说的,嵌入式操作系统、BSP、硬件都是1:1:1的单独对应关系,比如,对于三星公司的S3C4510B处理器,嵌入式Linux和Windows CE的BSP就不一样。而Windows CE对应的Intel E5345和S3C4510B的BSP也是不同的。
BSP主要做以下两方面的工作:
①系统初始化;
②硬件相关的设备驱动。
系统初始化的过程从底到顶可以分为三个过程分别是片级初始化、板级初始化、系统级初始化。
片级初始化主要是对处理器进行初始化,在这一工作阶段,主要是设置处理器的寄存器、调整处理器的核心工作模式和局部总线模式,目的是为了把处理器从默认的工作状态设置到嵌入式操作系统所要求的状态,是一个纯硬件的初始化过程。然后是板级初始化,板级初始化的一个任务是要初始化除处理器外的所有硬件设各,另外一个任务是要对其他所需软件的数据结构和参数进行设置,为随后的系统级初始化建立硬件和软件环境。板级初始化是一个同时包含硬件和软件初始化的过程。紧接着是系统级初始化,这一过程主要是对操作系统进行一定的初始化,通过这一初始化,嵌入式操作系统的全部初始化工作完成,创建了应用程序的运行环境,把系统的控制权转交给应用程序的入口。
BSP的另一主要功能就是提供与硬件相关的设备驱动。上面提到一个板级初始化的过程,在这一过程中,BSP会把设备驱动程序与嵌入式操作系统中的通用设备驱动程序关联起来,当某个应用需要某个硬件设备时,通用设备驱动程序会调用硬件设备驱动程序,以达到操作硬件的目的。
BSP开发一般处在整个嵌入式系统开发生命周期的前半部分,对开发人员综合素质要求较高,不仅要有软件编程能力。还要对操作系统、硬件工作原理等都有一定了解。BSP开发的工作量是非常大的。
通常,为了减少BSP开发的难度,并不是从头开始去设计和编写个BSP,而是通过现有的BSP来进行修改。比如,可以通过现有比较流行或者大量投入使用的BSP进行修改,也可以对嵌入式操作系统提供的一些BSP模板进行修改。Windows CE的定制工具Platform Builder本身就附带了大量的BSP模板以供开发人员使用。以后的内容中将介绍如何使用一个现有的BSP来修改得到自己想要的BSP。