VxWorks及BSP启动流程与顺序.doc
《VxWorks及BSP启动流程与顺序.doc》由会员分享,可在线阅读,更多相关《VxWorks及BSP启动流程与顺序.doc(33页珍藏版)》请在咨信网上搜索。
1、目 录1vxworks映像类型11.1可加载的映像类型(vxwoks)12vxworks映像启动顺序12.1可加载型vxworks映像启动顺序22.2基于ROM的vxworks映像启动顺序22.3基于ROM驻留型vxworks映像启动顺序33BSP基础知识33.1BSP的定义33.2BSP的功能33.3 BSP的组成44BSP的启动44.1 BSP的启动流程44.2.1romInit.s:romInit()函数54.2.2bootInit.c:romStart()函数144.2.3bootConfig.c分析244.2.4sysLib.s:sysInit()函数264.2.5usrconfig
2、.c:usrInit()函数274.2.6usrconfig.c:usrRoot()函数285总结3132VxWorks及BSP启动流程与顺序 李守轩摘要:本文首先介绍vxworks映像的类型及各类型vxworks映像的启动顺序;然后介绍BSP的启动流程与初始化顺序。关键词:vxworks映像;BSP启动;代码分析1 vxworks映像类型对于vxworks映像的启动情况,从根本上看,在初始化和装载vxworks映像的过程中,处理器所执行的步骤在逻辑上是一样的。对于有些处理器可能需要增加一些额外的步骤,而另一些处理器可能会省略掉某些步骤。当构造vxworks映像时,根据需要可以构造不同类型的映
3、像,系统把这些映像划分成以下三种类型。1.1 可加载的映像类型(vxwoks)可加载型映像的执行需要通过引导代码把它装载到目标机RAM中,然后才开始执行。而引导代码分为两种:(1) 引导代码固化在ROM或FLASH中;(2) 引导代码是一个独立的vxworks应用;引导代码通常也是一种vxworks映像,也被称为引导映像。它的作用就是把包含应用的vxworks映像装入到RAM中。引导映像可能在ROM/FLASH中执行,也可能在RAM中执行。1.2 基于ROM的映像类型(vxworks_Rom & vxwoks_RomCompress)基于ROM的vxworks映像在执行前首先把自己从ROM/F
4、LASH中装载到RAM中,这种类型的映像通常在启动阶段较慢,但在执行阶段比ROM驻留型要快。1.3 基于ROM驻留映像类型(vxwoks_RomResident)ROM驻留型映像在启动时把数据段拷贝到目标机RAM中,这种类型的映像在启动阶段比较快,当RAM空间比较小的时候通常使用它。在嵌入式应用中通常会使用该类型的映像,然而,它在目标机上执行的速度要比其他类型要慢,原因是CPU访问ROM比访问RAM要慢。2 vxworks映像启动顺序在目标机加电启动时发生的顺序启动事件是一个典型vxworks映像需要执行的功能。所有类型的vxworks映像在初始化阶段启动顺序是一样的,处理器通过“jump”跳
5、转指令跳转到ROM或Flash中引导带代码入口处,这段引导代码所要执行的操作包括:(1) 关中断;(2) 初始化目标机内存;(3) 装载适当的vxworks映像段;(4) 跳转到设置目标机为静止状态的代码处。不同类型的vxworks映像启动顺序略有不同,下面介绍vxworks映像的启动顺序。2.1 可加载型vxworks映像启动顺序可加载型vxworks映像引导的详细过程如下: (1)数据段和代码段的装入。系统加电后执行引导带代码,首先把引导代码的代码段和数据段从ROM或Flash里装入RAM中。此时需要考虑下列情况: 压缩型引导代码,这种类型的引导代码在拷贝时,需要对它进行解压缩; 非压缩型
6、引导代码,这种类型的引导代码直接进行拷贝即可; 驻留型引导代码,这种类型的引导代码在拷贝时,仅仅拷贝它的数据段。(2)vxworks映像的装入。引导代码执行后,把vxworks映像装入到RAM中,然后跳转到vxworks映像装入点。(3)系统初始化。执行静态链接在vxworks映像里的系统初始化代码,最终完成系统初始化操作。2.2 基于ROM的vxworks映像启动顺序基于ROM的vxworks映像启动详细过程如下:(1)VxWorks映像的装入。系统加电后执行引导带代码,首先把VxWorks映像的代码段和数据段从ROM或Flash里装入RAM中。此时需要考虑下列情况: 压缩型VxWorks映
7、像,这种类型的VxWorks映像在拷贝时,需要对它进行解压操作; 非压缩型VxWorks映像,这种类型的VxWorks映像直接进行拷贝操作; (2)控制权转移。VxWorks映像被装入后,系统控制权转移给RAM中的vxworks映像的初始化代码。(3)系统初始化。执行静态链接在vxworks映像里的系统初始化代码,最终完成系统初始化操作。2.3 基于ROM驻留型vxworks映像启动顺序基于ROM驻留型的vxworks映像启动详细过程如下:(1)VxWorks映像数据段的装入。系统加电后执行引导带代码,首先把VxWorks映像的数据段从ROM或Flash里装入RAM中。(2)控制权转移。VxW
8、orks映像数据段被装入后,系统控制权转移给ROM或Flash中的vxworks映像的初始化代码。(3)系统初始化。执行ROM或Flash中的静态链接在vxworks映像里的系统初始化代码,最终完成系统初始化操作。3 BSP基础知识BSP是VxWorks的一个重要组成部分,在目标机加电后,首先执行的代码就是BSP,可以说VxWorks的启动流程就是BSP的启动流程。3.1 BSP的定义BSP(board support package)即板级支持包,是介于底层硬件环境和VxWorks之间的一个软件接口。3.2 BSP的功能BSP主要功能是系统加电后初始化目标机硬件、初始化操作系统及提供部分硬件
9、的驱动程序。具体如下。(1)初始化。 CPU初始化。初始化CPU内部寄存器。 目标机初始化。初始化控制芯片的寄存器,为整个软件系统提供底层硬件环境的支持。 系统资源初始化。为操作系统及系统的正常运行做准备,进行资源初始化。(2)使VxWorks能够访问硬件驱动程序。主要是指BSP包含部分必要的设备驱动程序和相关设备的初始化操作。(3)在VxWorks系统中,集成了与硬件相关的软件和部分硬件无关的软件。3.3 BSP的组成开发板上电后首先跑的就是BSP的代码,BSP主要由源文件、头文件、派生文件、Makefile文件组成。BSP包含的具体文件请参考相关资料。BSP在Tornado安装目录中的位置
10、如图3.1中所示。4 BSP的启动下面首先给出BSP的启动流程,然后对启动过程执行的函数进行具体分析,这是本文的重点和难点,是建立在作者自己理解角度和深度基础之上的。4.1 BSP的启动流程BSP的启动流程如图3.2所示,从代码执行的角度描述了BSP的启动过程及启动过程中先后调用函数的功能。4.2 BSP的启动过程分析从BSP的启动流程图中可以看出BSP启动过程中先后执行的函数,上面对这些函数进行详细描述。4.2.1 romInit.s:romInit()函数1. romInit()函数的功能romInit()函数与包含在romInit.s文件中,且用汇编语言编写。它是系统加电后首先执行的代码
11、,也是所有从ROM/FLASH启动的VxWorks映像的入口点。它执行目标机最小的初始化操作及调用romStart()函数,其它硬件初始化操作推迟到sysHwInit()函数中进行。romInit()函数必须包含下列功能:(1)屏蔽处理器中断及处理器复位;(2)初始化内存系统;(3)初始化堆栈指针和其它寄存器,开始执行romStart()函数及传递启动类型。2. 冷启动与热启动 (1)冷启动。所谓冷启动是指硬件环境通过加电启动。在romInit()函数中需要保存系统启动类型,启动类型的宏定义为BOOT_COLD。 (2)热启动。所谓热启动是通过调用reboot()、Ctrl+X或异常中断重新启
12、动目标机系统。实际上这些操作是把控制权传递给ROM中的监控函数sysToMonitor(),这个函数包含在sysLib.c文件中,如执行sysToMonitor(2),则系统执行热启动。3. 代码分析(1)X86硬件相关知识 IDT是中断描述表,是由门描述符组成的一个数组,每个门描述符对应一个中断/ 异常向量,其可以保存在内存中的任何位置,CPU通过访问IDTR寄存器获取IDT的位置。IDTR寄存器的长度为48位,其中包括保存IDT的32位线性地址和16位的大小。对于IDTR寄存器的操作包括两个指令:一个是LIDT,另一个是SIDT。LIDT用来将指定IDT所在线性地址和其长度装入LDTR寄存
13、器;而SIDT则是将IDTR寄存器的内容读出。 从实模式切换到保护模式之前,必须将基址和限长的值用指令LGDT装入GDTR,一旦系统切换到保护模式,则表所在的物理地址就不再改变,同时立即启用全局描述表,IDT表的基址用指令IDTR。 32位控制器CR0的0位为保护允许位PE(protected enable),用于启动保护模式,pe=1,保护模式启动;pe=0,实模式下运行。 实模式进入保护模式的步骤:初始化段描述符准备并加载GDTR打开地址线A20设置CR0寄存器,进入保护模式跳转32位代码段。 A20地址线的激活请查阅相关资料。上述相关知识是作者在理解代码过程中了解的,当然与硬件相关的知识
14、很多,详细请查阅相关资料。(3) 代码分析从作者理解的角度给出了romInit()函数的流程图,如图4.1所示。具体的代码分下如下:包含C的4个头文件。vxWorks.h为系统头文件sysLib.h为系统提供给BSP的头文件config.h是BSP的头文件Asm.h是系统头号文件开始数据段。以下内容出现在数据段里:.globl copyright_wind_river.long copyright_wind_river /* the first in .data */.globl romwait.globl _romInit.globl _sdata 等等申明全局变量_romInit和_sda
15、ta等定义一个以0结尾的字符串”start of data”。这个串出现在数据段的第一个无名变量之后.text.align 16 .text开始代码段,以下内容出现在代码段里。.align 16使对齐编译器进行填充,使得下一条指令出现在能被16整除的地址上。对齐可使CPU取指令快一点。 进入rominit处: Cli关中断 jmp cold 跳转到cold处。这是段内相对跳转。 balign 16 在32-bit代码前加这样的前缀可以让它变为16-bit代码;在16-bit代码前可以变为32-bit代码进入romWarmHigh处:Cli关中断movl SP_ARG1(%esp),%ebx 把
16、esp+ SP_ARG1偏移处的值赋予ebx寄存器jmpwarm 跳转到warm处。这是段内相对跳转.balign 16 在32-bit代码前加这样的前缀可以让它变为16-bit代码;在16-bit代码前可以变为32-bit代码进入romWarm Low处:cli关中断cld清方向标志movl$ RAM_LOW_ADRS,%esi/* 把RAM_LOW_ADRS 地址赋给esi movl$ ROM_TEXT_ADRS,%edi/*把RAM_LOW_ADRS 地址赋给edimovl$ ROM_SIZE,%ecx/*把RAM_size 地址赋给ecxshrl$2,%ecx/* ecx 右移两位25
17、6字节变成64个双字repmovsl循环执行esi-edi 真到ecx=0movl SP_ARG1(%esp),%ebx 把esp+ SP_ARG1偏移处的值赋予ebx寄存器jmpwarm/* jump to warm */.ascii Copyright 1984-2002 Wind River Systems, Inc.balign 16,0x90cold: /cold处.byte0x67, 0x66与blign16功能相同lidt%cs:(romIdtr - romInit)将中断和量表加载到cs:(romIdtr - romInit)处.byte0x67, 0x66与blign16功能
18、相同lgdt%cs:(romGdtr - romInit)将断描述表加载到cs:( romGdtr - romInit)处mov%cr0,%eax/* move CR0 to EAX */.byte0x66/* next inst has 32bit operand */or$0x00000001,%eax/* set the PE bit */mov%eax,%cr0/* move EAX to CR0 */ /以上代码的作用是将控制寄存器 cr0的PE位 置1jmpromInit1/*跳转到rominit1处。Rominit1:进入rominit1处.byte0x66/* next ins
19、t has 32bit operand */mov$0x0010,%eax/* set data segment 0x10 is 3rd one */mov%ax,%ds/* set DS */mov%ax,%es/* set ES */mov%ax,%fs/* set FS */mov%ax,%gs/* set GS */mov%ax,%ss/* set SS */.byte0x66/* next inst has 32bit operand */mov$ ROM_STACK,%esp /* set lower mem stack pointer */.byte0x67, 0x66/* ne
20、xt inst has 32bit operand */ljmp$0x08, $ ROM_TEXT_ADRS + romInit2 - romInit现在已进入保护模式。然而各个段寄存器的值,以及它们的高速缓存寄存器中的值还是实模式下的。把DS, ES, FS, GS, SS寄存器设为0x0010,即指向GDT的第2项(从0开始),DPL=0。它们都指向一个段。把堆栈指针esp设为ROM_STACK,由于CS还是以前的值,意味着目前代码段的属性还是16-bit代码。所以使用指令前缀以执行32-bit代码。执行一个远程段间跳转修改CS。CS的新值为0x08,即GDT的第1项,DPL=0。修改CS
21、时它的高速缓存寄存器也会自动更新。romIDT(Interrupt Description Table),中断描述符表,空的。 romGdtr: .word 0x0027 .long ROM_TEXT_ADRS + ROM_GDT /设置段描述表的大小及基地址 balign 16,0x90 romGdt: 段描述表/* 0(selector=0x0000): Null descriptor */.word0x0000.word0x0000.byte0x00.byte0x00.byte0x00.byte0x00/* 1(selector=0x0008): Code descriptor */.w
22、ord0xffff/* limit: xffff */段界限低16位.word0x0000/* base : xxxx0000 */ 基地址低16位.byte0x00/* base : xx00xxxx */基地址中间8位.byte0x9a/段属性.byte0xcf/段属性 含段界限高4位.byte0x00/* base : 基地址高8位/* 2(selector=0x0010): Data descriptor */.word0xffff/* limit: xffff */.word0x0000/* base : xxxx0000 */.byte0x00/* base : xx00xxxx
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 完整 word VxWorks BSP 启动 流程 顺序
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【a199****6536】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【a199****6536】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。