1 什么是BSP:1. 在通电后, 初始化硬件( bootrom )2. 支持VxWorks和硬件驱动通信(Image的底层驱动)3. 本质上是硬件驱动、初始化的合集;2 研究BSP内容:1. 系统image的生成和image的种类2. image的download 下载过程3. 系统的启动顺序和过程4. 调试环境的配置及远端调试的方式和方法5. 相应BSP设置文件的修改(网络,串口..)6. BSP各文件的组成和作用.7. 要对系统底层驱动清楚,也就是对CPU及相关的硬件有所了解•主要是32微处理器(上电启动过程,download image的方式方法,读写ROM地址空间分配,MMU寄存器,中断定义,..).参照硬件资料,多读一些源码会有所帮助.3 BSP主要文件目录的组成及主要文件的作用:3.1 目录target/config/All:这个目录下的文件是所有BSP文件共享的,不是特别需要不要更改里面的任何文件.configAll.h:缺省定义了所有VxWorks的设置.如果不用缺省的设置,可在BSP目录下的config.h文件中用#define或#口门def方式来更改设置.bootInit.c:在romlnit.s 后,完成Boot ROM的第二步初始化.程序从romlnit.s 中的romlnit() 跳到这个文件中的romStart().来执行必要的解压和ROM image的放置.bootConfig.c: 完成Boot ROM image的初始化和控制.usrConfig.c: VxWorks image 的初始化代码.3.2 目录target/config/comps/src:涉及系统核心的components, 主要由target/config/All 中usrConfig.c 中函数调用3.3 目录target/config/bspname:包含系统或硬件相关的BSP文件.一些命令行控制images 的生成, 参见READMEBSP发布纪录,版本,总的文档config.h包括所有涉及CPU主板的设置及定义(includes,definations), 参见configNet.h网络驱动的主要设置文件,主要对END驱动设置.romInit.s汇编语言文件,是VxWorks Boot ROM和ROM based image的入口,参见sysALib.s汇编语言文件,程序员可以把自己的汇编函数放在这个文件里,在上层调用.VxWorks image 的入口点_syslnit在这个文件里,是在RAM中执行的第一个函数.sysLib.c包含一些系统相关的函数例程, 提供了一个board-level 的接口,VxWorks 和应用程序可以以system-indepent 的方式生成. 这个文件还能包含目录target/config/comps/src 的驱动.sysScsi.c可选文件用于Scsi 设备设置和初始化.sysSerial.c可选文件用于所有的串口设置和初始化.bootrom.hexASIC文件包含VxWorks Boot ROM代码VxWorks运行在目标机上,完整的,连结后的VxWorks二进制文件.VxWorks.sym完全的,连结后带有符号表的VxWorks二进制文件完全的,连结后,standalone,带有符号表的VxWorks二进制文件4 VxWorks Image4.1 VxWorks images con sist of:« Text segment---executable instruction.« Data segment---In itilized global and static varibles.• BSS.4.2分类和工作机理:Bootrom不是VxWorks Image,不参与讨论它本质上是一段Boot program,最少的系统初始化,主要用于启动装载VxWorks image.一般有压缩和不压缩两种形式,如bootrom 和boot_uncmp.与VxWorks image 的区别在于一个Bootrom 调用bootConfig.c, 而VxWorks 调用usrConfig.c.VxWorks本质上分为两大类:1. Vxworks分为两大类:1)Uploaded images(通过网口、串口、硬盘、软盘、DOC、ROM中加载到RAM 中执行的)vxWorks - basic Torn ado, shell 和symbol table 在主机端vxWorks.st (文件很大)-独立的image,包含shell和symbol table在目标板运行2)ROM based images直接烧入ROM 的VxWorks):VxWorks_Rom类的Vxworks又分了两类:1)驻留的resident 2不住留的1. 不住留的ROM -Based VxWorks Image2. 驻留的VxWorks_rom_resident2. 说的再具体点:1)可下载的Vxworks image2) ROM中烧制的Image1. vxWorks_rom - Tornado in ROM,非压缩,在RAM 中运行2. vxWorks.res_rom_nosym - Tornado in ROM,非压缩,在ROM 中运行3. vxWorks.st_rom - Stand-alone in ROM,压缩,RAM 中运行4. vxWorks.res_rom - Stand-alone in ROM,非压缩,ROM 中运行3. VxWorks在存储介质中的存放方式5 启动5.1启动概述1. Bootrom的启动最少的系统初始化,主要用于启动装载VxWorksimage. —般有压缩和不压缩两种形式, 如bootrom 和boot_uncmp.与VxWorksimage 的区别在于一个Bootrom 调用bootConfig.c, 而VxWorks调用usrConfig.c.文件romInit.s 中的romInit()----> 文件bootlnit.c 中的romStart()----> 文件bootCo nfig.c 中的usrInit()——>sysHwlnit() >usrKernellnit()——>Ker nell nit(usrRoot,...)其中/target/config/all/bootConfig.c 是Boot ROM设置模块.用于通过网络加载VxWorks image.usrRoot()---->bootCmdLoop(void) 命令行选择,或autobooting——>bootLoad(pLine, &entry) 加载模块到内存(网络,TFFS,TSFS...)——>netifAttach()---->go(entry)——>(en try)() 从入口开始执行,不返回.•各个函数的主要作用romI nit() ——power up,disable in terrupt,put boot type on the stack,clears caches. romStart() ----- load Image Segments into RAM.usrInit() ——Interrupt lock out,save imformation about boot type,handle all the Initialization before the kernel is actually started,then starts the kernel execution to create an initial task usrRoot().This task completes the start up.sysHwInit() ------ Interrup locked,Initializes hardware,registers,activationkernelKernelInit(usrRoot,...) ---*In itializes and starts the kern el.« Defines system memory partiti on.*Activates a task tUsrRoot to complete initalization.*Uni ocks ini errupts.*Uses usrI nit()stack.usrRoot()*初始化内存分区表(memory partition library)*初始化系统系统时钟(system clock)*初始化输入输出系统(I/O system)---- 可选Create devices---- 可选设置网络(Configure network) -------- 可选激活WDE目标通信(Activate WDB agent) ------ 可选调用程序(Activate application)2.VxWorks 的启动1) Loadable VxWorks 的启动a) 使用Bootrom 进行最小系统起动b) 加载程序段、数据段、BBS 段c) 跳转到RAM 中运行的VxWorks 的启动(详见下面)2) VxWork_ROM 的VxWorks 启动1. ROM 中运行的VxWorks 的启动VxWorks在ROM中运行,即写入ROM中的VxWorks是非压缩的,不需要解压,系统直接跳到ROM勺首地址,运行VxWorks.注意:ROM运行的VxWorks并不支持所有的主扳,应以主扳手册为准.文件romInit.s 中的romInit() ----- > 文件bootInit.c 中的romStart() ----------- > 文件usrConfig.c 中的usrInit() ---- >sysHwInit() ---- >usrKernelInit() ---- >KernelInit(usrRoot,...)VxWorks在ROM中运行主要是为了节省RAM空间,以便应用程序有更大的空间运行. 只把VxWorksimage 的data 段复制到RAM勺LOCAL_LOW_ADR&t 部分留在ROM并在ROM 中执行.ROM中运行的VxWorks缺点是运行速度慢.2. RAM 中运行的VxWorks 的启动VxWorks在RAM中运行,即写入ROM中的Boot或VxWorksimage是压缩的,需要先解压copy 所有的text 和data 到RAM勺LOCAL_LOW_AD中S下面sysinit() 主要是初始化RAM 用的,系统直接跳到RAM勺首地址,运行VxWorksusrinit() 前面不压缩, 即rominit(),romStart() 不能压缩.文件rominit.s 中的rominit() ------ > 文件bootinit.c 中的romStart() ----------- >sysaLib.s 中的sysinit() -- > 文件usrConfig.c 中的usrinit() ---- >sysHwinit() ---- >usrKernelinit() ----- >Kernelinit(usrRoot,...)RAM运行的Boot 或VxWorks image 的text 段或data 段会从ROMS制到RAM在RAM 中运行.其中usrRoot()是VxWorks启动的第一个任务,由它来初始化driver,network 等描述: rominit.s first execute in flash,minal initiliz,then jump to romStart.romStart() 开始装载和解压image到RAM,sysaLib.s是在RAM中执行的第一个函数。