当前位置:
文档之家› VxWorks引导程序启动详细过程
VxWorks引导程序启动详细过程
|
kernelInit ((FUNCPTR) usrRoot,,,,,, )
|
|
|
|
|
|
sysLib.c
负责在内核激活前,将硬件置于静止状态: 1. 安装中断向量 ISR:
S3C2410ExcVecSet(); 2. 安装 IRQ/SVC 的堆栈设置程序: _func_armIntStackSplit = sysIntStackSplit; 3. 复制命令行: strncpy(sysBootLine,DEFAULT_BOOT_LIN,strl
|
| bootConfig.c ->usrRoot (char *pMemPoolStart, unsigned memPoolSize):
|
|
用于完成系统最后的初始化以及所有硬件的初始化:
|
1. 初始化系统内存池:
|
memInit (pMemPoolStart, memPoolSize);
|
2. 安装始终中断 ISR,设置始终频率,使能时钟:
|
bootCmdTaskStackSize, (FUNCPTR) bootCmdLoop,
|
0,0,0,0,0,0,0,0,0,0);
|
| bootConfig.c -> void bootCmdLoop (void): 待续… |
|
|
|
||||源自||||
vxBootFile[0] = NULL;
|
6. 打开 Target Server Console:/* for Target Server Console */
|
consoleFd = open ("/vio/0", O_RDWR, 0);
|
7. 设置标准 I/O 输入输出:
|
ioGlobalStdSet (STD_IN, consoleFd);
VxWorks 引导程序启动详细过程(bootrom_uncmp.bin)
系统上电
=====
| romInit.s -> romInit() : 初始化 CPU;配置处理器的工作模式;配置存储器;关闭中断和看门狗;清除 Cache; 设置堆栈指针;特定
| |
于 CPU 的其他初始化;配置启动参数(冷启动还是热启动)跳到 romStart(int startType).
|
sysClkConnect((FUNCPTR) usrClock, 0);/、connect clock interrupt routine
|
sysClkRateSet (SYS_CLK_RATE);
/* set system clock rate */
|
sysClkEnable ();
/* start it */
classLibInit (); 2. 初始化任务变量:
taskLibInit (); 3. 配置内核任务队列:
qInit (&readyQHead, Q_PRI_LIST); qInit (&activeQHead, Q_FIFO); qInit (&tickQHead, Q_PRI_LIST); workQInit ();
|
3. 初始化 IOS:
|
selectInit (NUM_FILES);
|
iosInit (NUM_DRIVERS, NUM_FILES, "/null");
|
consoleFd = NONE;
|
4. 初始化串口设备,安装串口设备驱动程序,并启动串口设备:
|
/*
*/
|
5. 初始化 WDB:
|
wdbConfig(); /* configure and initialize the WDB agent */
|
态。引导阶段已经实现了( 2), 一 次 该 函 数
|
功能就是使设备处于静止状态。
|
0. 用户定义 BSP 初始化
|
SYS_HW_INIT_0 ();(sysHwInit0())无
|
1. 初始化 Cache;
|
cacheLibInit()
|
2. 清零 BBS;
|
bzero (edata, end - edata);
|
ioGlobalStdSet (STD_OUT, consoleFd);
|
ioGlobalStdSet (STD_ERR, consoleFd);
|
8. 安装管道驱动程序:
|
pipeDrv ();
|
9. 初始化各种可得设备:
|
/*
*/
|
10.启动 bootCmdLoop 任务:
|
taskSpawn ("tBoot", bootCmdTaskPriority, bootCmdTaskOptions,
|
|bootConfig.c ->usrInit(int startType): 用于用于完成最后的 CPU 初始化部分,并且
|
关闭系统的其他硬件设备,为内核的初始化
|
和启动准备一个单任务的环境(无中断,无
|
任 务 )。完 成 内 核 激 活 的 准 备 工 作 :(1)设备
|
处 于 静 止 状 态 ;( 2)处理器中断处于禁止状
|
|bootInit.c ->romStart(int startType) : | | |
将 Flash 中的启动代码拷贝到 RAM 中,最后调用 ROM 或 RAM 中的 usrInit();拷贝的内容与 生成的内核类型有关,但通常都需将数据段拷贝到 RAM 中。如果是压缩格式映象,除了拷贝还 要进行解压。最后调用 sysALibs.s 中的 sysInit(int startType).
|
3. 暗黄安装中断向量;
|
excVecInit ( );
|
4. 置硬件静止状态;
|
sysHwInit ();
|
5. 配置 Wind 内核,初始化任务管理和任务
|
队列
|
usrKernelInit ();
|
6. 使能 Cache;
|
cacheEnable(INSTRUCTION_CACHE);
|
7. 激活跟任务;
en(DEFAULT_BOOT_LINE)+1); 4. 初始化串口设备,数据结构和禁止串口中断:
-> sysHwInit(): sysSerialHwInit ();
usrKernel.c -> usrKernelInit(void):
配置 Wind 内核,初始化任务管理和任务队列: 1. 初始化类库: