1.1.板级支持包BSP
板级支持包BSP负责目标板硬件的初始化,实时内核的载入等。
对于硬件初始化的顺序,大致可按下表中形式进行:
函 数 | 函 数 功 能 | 所 在 文 件 |
sysInit() | (a)锁住中断;(b)禁用缓冲; (c)用缺省值初始化系统中断表(仅i960); (d)用缺省值初始化系统错误表(仅i960); (e)初始化处理器寄存器到一缺省值; (f)使回溯失效;(g)清除所有悬置中断; (h)激活usrInit(),指明启动类型。 | sysALib.s |
UsrInit() | (a)对bss赋零; (b)保存bootType于sysStartType; (c)调用excVecInit(),初始化所有系统和缺省中断向量; (d)依次调用sysHwInit(), usrKernelInit(),kernelInit(). | usrConfig.c |
usrKernelInit() | 依次调用classLibInit(),taskLibInit(),taskHookInit(),semBLibInit(),semMLibInit(),semCLibInit(),semOLibInit(),wdLibInit(),msgQLibInit(),qInit(),workQInit() | usrKernel.c |
kernelInit() | 初始化并启动内核。 (a)激活intLockLevelSet(); (b)从内存池顶部创建根堆栈和TCB; (c)调用taskInit(),taskActivate(),用于usrRoot(); (d)调用usrRoot(). | kernelLib.c |
UsrRoot() | 初始化I/O系统,驱动器,设备(在configAll.h和config.h中指定) (a)调用sysClkConnect(),sysClkRateSet(), iosInit(),[ttyDrv()]; (b)初始化excInit(),logInit(),sigInit(). (c)初始化管道,pipeDrv(); (d)stdioInit(),mathSoftInit()或mathHardInit() (e)wdbConfig():配置并初始化目标代理机 | usrConfig.c |
在大多数目标板的板级支持包中,VxWorks的入口点由两个函数:romInit()和romStart()来完成,而非sysInit()。具体基于ROM的VxWorks的初始化过程如下表所示:
函数 | 函数功能 | 所在文件 |
1.romInit()
2.romStart()
3.usrInit()
4.usrKernelInit() 5.kernelInit()
6.usrRoot()
7.Application routine | (a)禁止中断; (b)保存启动类型; (c)硬件初始化; (d)调用romStart();
(a)将数据段从ROM拷贝到RAM,清内存; (b)将代码段从ROM拷贝到RAM,有必要的话解 压缩; (c)调用usrInit();
初始化程序
如果相应的配置文件被定义,对应函数被调用
初始化并启动内核
初始化I/O系统,驱动器,创建设备
应用程序代码 | romInit.s
bootInit.c
usrConfig.c
usrKernel.c
kernelLib.c
usrConfig.c
Application source file |