vxworks init
2016-11-10 22:54:53 0 举报
vxworks init
作者其他创作
大纲/内容
romInit.s:romInit()
对多任务环境初始化而且不会再返回。1、调用intLockLevelSet(),设置中断锁级别;2、禁止roundRobin模式,即禁止轮询模式;3、创建中断堆栈(如果体系结构支持);4、从内存池顶端创建一个根堆栈和TCB,产生root任务usrRoot(),并结束usrInit()线程。此时,系统中断被打开。
完成系统硬件环境下必要的初始化工作。1、禁止系统级中断2、设置存储器系统(一般包括禁用高速缓冲存储器,根据需要设置存储器的控制器。对SPARC体系结构,必须激活MMU)3、设置堆栈区指针(即初始化函数调用所需的栈,将堆栈定位在文本段之前,并反方向增加)和其他寄存器,以便开始执行C程序。计算romStart()函数地址并调用它。
按configAll.h和config.h中的配置来初始化I/0系统、安装驱动、创建设备并设置网络。1、调用memInit()来初始化内存池及内存信息显示组件;2、初始化系统时钟,并使能系统时钟中断;3、内核组件初始化;4、初始化I/O系统;5、调用ExcInit()程序初始化异常处理功能;6、按configAll.h定义对其他功能和设备有选择的初始化;7、创建并启动shell终端。
将文本和数据段从ROM复制到RAM,并解压缩。(先将自己及非romInit()复制到RAM,然后开始从RAM执行)1、如果文本段不是常驻ROM,则文本和数据段都被复制;2、如果文本段是常驻ROM的,只有数据段被复制到RAM;3、将未使用的存储器清空,来对其初始化;4、如果需要,对代码解压缩。5、调用usrInit()
保存关于启动类型的信息,处理在内核启动之前所有必须完成的初始化工作,并启动内核。(是VxWorks中运行的第一段C程序,在关掉所有硬件中断的特权模式下运行。1、高速缓存器初始化;2、bss段清零(C/C++规定未初始化变量初始值必须为0,这些未初始化变量被放在bss段。usrInit()是执行的第一段C程序,所以必须清空存储器的bss部分);3、初始化中断向量。调用intVecBaseSet()建立向量表基址,调用excVecInit()将所有异常向量初始化为异常处理程序(并非将ISR与中断源相连,由于内存池尚未被初始化,这个相连直到usrRoot执行完之后才做);4、系统硬件初始化。调用sysHwInit()初始化系统硬件,主要包括复原和禁用在启用中断之后能引起中断的硬件设备。
系统加电
usrConfig.c:usrRoot()
bootInit.c: romStart()
usrConfig.c:usrInit()
VxWorks启动完成
lib/*.a:kernelInit()
0 条评论
下一页