这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » MCU » 我的BSP理解文档,贴出来和大家共享。希望大家多多指正!(1)

共46条 1/5 1 2 3 4 5 ›| 跳转至

我的BSP理解文档,贴出来和大家共享。希望大家多多指正!(1)

菜鸟
2004-12-30 20:46:05     打赏
1 什么是BSP? BSP为VXWORKS提供了访问硬件的一些主要接口。它负责系统上电的时候硬件的初始化,提供了VXWORKS访问硬件的时候的一些驱动。在VXWORKS中集成了与硬件有关和无关的一些软件。它的组成有头文件,源文件,MAKEFILE文件,继承文件和二进制驱动模块。硬件驱动分为一般的驱动和BSP特定驱动。一般的硬件驱动可以从一个环境中移植到另一个环境中,而BSP驱动与特定的目标环境有关。BSP开发者负责集成一般的驱动到BSP驱动环境下,完成指定环境下的BSP驱动。VXWORKS去访问硬件是通过BSP的支持来进行的,这也是BSP怎么访问硬件的。

2 BSP与VXWORKS的关系以及它在整个系统中的地位?

3 BSP在系统中起的作用

VXWORKS的启动顺序和具体的处理器和硬件环境有关,一般的初始化包括:在内存中特殊的地方放置一段代码,这段代码在系统复位和上电的时候执行;将处理器置于一个特别的状态;初始化内存和内存地址;关闭中断;传递控制结构到另外的启动陷入代码;加载必须的VXWORKS段到内存当中去;在初始化VXWORKS内核之前将硬件置于静止状态。

有一些驱动是由BSP例程提供的,驱动定义了一些ISR(中断服务程序),这些ISR由BSP连接到某一个中断向量。由BSP提供,驱动来使用的一些偏移常量和一些访问宏。

4 BSP的组成

主要的BSP文件:头文件,源文件和MAKEFILE文件。与一个CPU板有关的文件都放在两个文件中,源文件就是那些C文件,与特定结构有关的文件是用汇编写的经过优化了的汇编代码。MAKEFIEL文件负责所有文件的编译和连接规则。继承文件由主要的BSP文件,驱动源程序文件和VXWORKS结构库中的模块组成。继承文件可分为一下几类:硬件初始化对象模块,VXWORKS启动对象模块,VXWORKS镜像和VXWORKS二进制符号表。一个完整的BSP将产生所有这些文件,最终用户在配置这些文件时可能还要重新创建这些文件。还有两个非标准的继承文件:如果镜像的文本段写保护被激活的时候,就要有一个文件来保证在内存当中,文本段和代码段部共享同一个内存页面。应为同一个内存页面的读写权限只有一个,而此时代码段和文本段的读写权限是不一样的,所以要分开来放。这个对象文件就是用来保证能做到这一点的。还有一个文件就是由另一个文件继承过来的ASCII文件。

5 BSP开发步骤

开发BSP应该采用一种渐进的方法:首先建立一个开发环境(下载路径,调试策略等等),编写内核运行之前的初始化代码,利用串口或者网口激活WDB代理和TORNADO工具,从最精简的VXWORKS内核开始,慢慢在系统上增加系统时钟和中断处理,直至在自己的硬件环境中所需要的所有功能,之后测试和编写文档。

6 vxworks的镜像类型

镜像类型有三种,可加载型镜像,基于ROM型镜像和ROM驻留型镜像。可加载型镜像是有BOOT加载近内存的,BOOT是一个单独的VXWORKS应用程序,它其实是烧在ROM或者FLASH上的一段代码。基于ROM的镜像也是要加载到内存种去的,不过它的加载是它自己完成的。ROM驻留型镜像只是把数据段和BSS段加载到内存种去运行。代码段还留在ROM中运行。

7 vxworks镜像的组成

vxworks镜像由文本段,数据段和BSS段组成,文本段相当于代码段,是由一些指令组成的,数据段就是由一些初始化过的全局和静态变量组成。BSS段也是由全局变量和静态变量组成,只不过他们都没有经过初始化。

8 vxworks镜像的启动顺序

虽然vxworks的镜像有好几种类型,不过他们的启动顺序还是一样的。系统加电后,处理器会跳到BOOT陷入代码处去执行,这段代码的作用主要有:关中断,初始化目标机内存,加载镜像到内存,跳转到使目标机处于静止状态的代码处运行。下面分别叙述每种镜像的启动顺序。

1 可加载型镜像

BOOT陷入代码首先执行,加载文本段和数据段到内存中,如果BOOT代码是压缩的,加载时解压,如果没压缩,就直接加载,如果BOOT是ROM驻留的,就只加载数据段。然后BOOT开始运行,加载VXWORKS镜像,跳到VXWORKS镜像开始点运行。系统的初始化代码静态连接到已经加载的VXWORKS镜像,完成系统初始化。在这个过程中,一开始BOOT用的那段内存空间在VXWORKS镜像执行后,还要被VXWORKS回收。然后再次分配利用。执行的流程图如下:

这里注意几个地址:

LOCAL_MEM_LOCAL_ADRS是RAM的起始地址。

RAM_LOW_ADRS是VXWORKS镜像加载到内存中的开始地址,也是镜像中文本段的开始地址。

FREE_RAM_ADRS是VXWORKS镜像在内存中布局的结束地址,这个地址同时也是系统内存或者目标服务器的内存开始地址。

RAM_HIGH_ADRS是BOOT的开始地址,也是BOOT文本段的开始地址,如果BOOT是ROM驻留型的镜像,则这个地址相应的就是数据段的开始地址。

2 ROM驻留型镜像的启动顺序

BOOT陷入代码加载VXWORKS镜像到内存中,数据段和文本段都加载,然后跳转到VXWORKS镜像中初始化代码处运行。完成系统初始化。内存布局见下图:

3 ROM驻留型镜像

BOOT陷入代码开始执行,只加载VXWORKS镜像的数据段到内存,程序跳转到VXWORKS镜像初始化代码处运行,完成系统的初始化。内存布局见下图:

9 VXWORKS初始化代码做的工作

在完成VXWORKS镜像的加载后,就跳转到VXWORKS初始化代码处运行,这段代码做的工作有:

l 将系统硬件环境置于一个静止状态

l 初始化并且开始WIND内核的运行

l 开始一个完成系统初始化的任务

可加载型镜像并部认为自己是由BOOT加载的,因此由BOOT陷入代码做的初始化工作在VXWORKS的初始化代码中还会再重复做一遍。VXWORKS中的系统初始化任务会安装驱动和ISR,创建设备和 初始化I/O体统,一般这个任务在结束之前,会产生一个用户程序的初始化任务。

10 TORNADO的目录结构

TORNADO是一些模块的集合,模块的目的在于可移植性,灵活性和系统的易维护性。这些模块之间的依赖性被设计为最小。主要模块有:

l 主机支持包(HSP),与主机有关的TORNADO组件。

l 一般的目标无关VXWORKS,主要有WIND内核和I/O模块等

l 结构模块,提供对目标机处理器的支持。

l BSP 提供对目标硬件的支持

l WDB代理,提供主机上的工具和目标机的通信。

各个模块之间的关系图:

总体目录树结构:

主机目录树结构:

目标机目录树结构:

11 与BSP有关的一些文件

系统上电时执行的代码处于config目录底下,一般的驱动代码可提供为多个BSP使用,BSP驱动代码是提供给某一个特定硬件使用的,别的BSP一般不可使用。WRS提供的一般的驱动代码处于系统../src/drv 和 ../h/drv.子目录底下,不是由WRS提供的一般驱动代码处于<bspName>目录下或者它的子目录下。

12 与BSP有关的一些硬件

l 特定的体系结构,比如cache MMU 中断控制器等等。

l 总线 ,总线控制器和总线桥

l 内存,内存控制器和芯片

l 设备,架构,总线

对这些硬件提供的支持有初始化和访问。

13 BSP和CPU

管理CPU的组件是TORNADO组件的一部分。一些CPU结构和BSP开发相关。比如MMU,中断处理,浮点支持和CACHE缓存。这些结构在启动VXWORKS系统初始化的时候非常重要。

14 MMU内存管理单元

内存管理单元控制内存的访问,包括:

l 分配和释放内存

l 解决CACHE一致性问题

l 对内存的写保护

l 虚拟内存交换

l 分页和分段机制

l 垃圾回收

MMU要求一个驻留于内存的映射表,标明物理内存地址和虚拟内存地址之间的映射关系。

MMU由于访问延时和内存开销,对于实时系统来说可能不是太合适。

MMU硬件实现可能和CPU在同一个集成电路板上。

VXWORKS启动的时候,MMU功能是关闭的,直到WIND内核启动后才打开,启动过程中还要建立映射表。这个映射表在VXWORKS的任务中并不是任务上下文的一部分。任务不会处于虚拟内存当中,默认的虚拟内存映射是全局和平面的。

15 CACHE缓存

cache是CPU和内存之间的一个接口,大部分现代处理器都支持指令缓冲和数据缓存。提高了访问数据的速度,CACHE工作的模式有两种:

l 直写方式-数据直接由处理器写入到CACHE中,然后再更新主存。

l COPYBACK-数据只写入到CACHE中。

CACHE在板上的位置,一级缓存和CPU同处于一个ASIC,二级缓存在CPU的ASIC外部。二级缓存后面,是扩展的一级缓存。由特殊的总线和CPU相连。有一些体系结构的CPU提供了专门用来访问CACHE的指令,如果支持CACHE,则CPU每次访问内存的时候总是先查看CACHE,如果数据在CACHE中存在,则命中,不访问内存,如果不存在,则访问内存。

CACHE一致性问题:理想情况下,CACHE是内存的写照,两者是一致的。总线控制器和DMA控制器更新内存的时候可能不更新CACHE。CPU在更新CACHE的时候可能不更新内存。造成两者的不一致。因此为了保持一致性,更新一个的同时必须更新另外一个,或者通过硬件电路的检测来自动更新。这是最快的方法。

在启动VXWORKS的时候,在系统处于一个静止状态之前,CACHE一直是关闭的,配置好CACHE模式后,在WIND内核启动前,打开CACHE。当MMU打开的时候,CACHE的管理和控制是由MMU库来完成的。

[/replyview]

[/replyview][/replyview] [align=right][color=#000066][此贴子已经被作者于2005-1-13 19:04:29编辑过][/color][/align]



关键词: 我的     理解     文档     出来     大家     共享     希望     多多         

菜鸟
2004-12-30 20:56:00     打赏
2楼
:)

菜鸟
2004-12-30 20:59:00     打赏
3楼
youma

菜鸟
2004-12-30 22:55:00     打赏
4楼
see

菜鸟
2004-12-31 00:58:00     打赏
5楼
up

菜鸟
2004-12-31 07:32:00     打赏
6楼
hao

菜鸟
2004-12-31 17:53:00     打赏
7楼

顶来看看


菜鸟
2004-12-31 18:16:00     打赏
8楼
see see

菜鸟
2004-12-31 18:34:00     打赏
9楼
??????????? Ok,look look

菜鸟
2004-12-31 20:32:00     打赏
10楼
谢谢

共46条 1/5 1 2 3 4 5 ›| 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]