⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 vxworks.htm

📁 纯粹的BSP所包含的内容一般说来是和系统有关的驱动和程序
💻 HTM
📖 第 1 页 / 共 3 页
字号:
}
#ft A {
	COLOR: #7777cc; TEXT-DECORATION: underline
}
#ft A:link {
	COLOR: #7777cc; TEXT-DECORATION: underline
}
#ft A:visited {
	COLOR: #7777cc; TEXT-DECORATION: underline
}
#usrbar {
	LETTER-SPACING: normal
}
#usrbar A {
	LETTER-SPACING: normal
}
#usrbar A:link {
	LETTER-SPACING: normal
}
#usrbar A:visited {
	LETTER-SPACING: normal
}
#ft {
	LETTER-SPACING: normal
}
#ft A {
	LETTER-SPACING: normal
}
#ft A:link {
	LETTER-SPACING: normal
}
#ft A:visited {
	LETTER-SPACING: normal
}
</STYLE>

<DIV id=usrbar><NOBR>
<SCRIPT> var myref = encodeURI("http://hi.baidu.com/jumbo/blog/item/23fd0c2454417430c9955953%2Ehtml");</SCRIPT>
<A href="http://www.baidu.com/" target=_blank>百度首页</A> | <A 
href="http://hi.baidu.com/" target=_blank>百度空间</A>
<SCRIPT language=JavaScript>
        document.write(" | <a href='http://passport.baidu.com/?login&tpl=sp&tpl_reg=sp&u="+myref+"'>登录</a>");
        </SCRIPT>
 </NOBR></DIV>
<DIV id=main align=left><!--[if IE]>
<SCRIPT>
var objmain = document.getElementById("main");
function updatesize(){ var bodyw = window.document.body.offsetWidth; if(bodyw <= 790) objmain.style.width="772px"; else if(bodyw >= 1016) objmain.style.width="996px"; else objmain.style.width="100%"; }
updatesize(); window.onresize = updatesize;
</SCRIPT>
<![endif]-->
<DIV id=header>
<DIV class=lc>
<DIV class=rc></DIV></DIV>
<DIV class=tit><A class=titlink title="kwovex的空间 http://hi.baidu.com/jumbo" 
href="http://hi.baidu.com/jumbo">舂米六的酱暴</A></DIV>
<DIV class=desc>专业技术文摘 21世纪 生物科技</DIV>
<DIV id=tabline></DIV>
<DIV id=tab><A href="http://hi.baidu.com/jumbo">主页</A><A class=on 
href="http://hi.baidu.com/jumbo/blog">博客</A><A 
href="http://hi.baidu.com/jumbo/album">相册</A><SPAN>|</SPAN><A 
href="http://hi.baidu.com/jumbo/profile">个人档案</A> <SPAN>|</SPAN><A 
href="http://hi.baidu.com/jumbo/friends">好友</A> </DIV></DIV>
<DIV class=stage>
<DIV class=stagepad>
<DIV style="WIDTH: 100%">
<TABLE class=modth cellSpacing=0 cellPadding=0 width="100%" border=0>
  <TBODY>
  <TR>
    <TD class=modtl width=7>&nbsp;</TD>
    <TD class=modtc noWrap>
      <DIV class=modhead><SPAN class=modtit>查看文章</SPAN></DIV></TD>
    <TD class=modtc noWrap align=right></TD>
    <TD class=modtr width=7>&nbsp;</TD></TR></TBODY></TABLE>
<DIV class=modbox id=m_blog>
<DIV class=tit>基于VxWorks的BSP技术分析</DIV>
<DIV class=date>2007年11月17日 星期六 05:41 A.M.</DIV>
<TABLE style="TABLE-LAYOUT: fixed">
  <TBODY>
  <TR>
    <TD>
      <DIV class=cnt>
      <P><A 
      href="http://huajide.cn/lufy/24225.html">http://huajide.cn/lufy/24225.html</A></P>
      <P>摘&nbsp;&nbsp; 
      要:结合嵌入式操作系统设计的主要特点,针对486目标机上VxWorks的定制,运用其BSP技术解决了移植过程中底层硬件与上层软件无关性的问题。描述了BSP的概念和启动流程,介绍了BSP设计过程,并结合实际工程给出了486目标机下VxWorks的定制及应用程序加载方法。 
      <BR>关键词:嵌入式操作系统; VxWorks; Tornado; 板级支持包; 映像</P>
      <P>VxWorks是由美国Wind River 
      公司推出的一种强嵌入式实时操作系统(RTOS)。它采用微内核结构,具有高可靠性、实时性、可裁减性等特点,而且支持多种CPU。VxWorks的一个重要特点是它的可移植性,应用程序编码在很大程度上与目标板的硬件和结构无关。它把所有特定的硬件功能都集成在一个称之为板级支持包BSP(Board 
      Support Package)的库中。</P>
      <P>目前为止Wind River公司提供的基于某一CPU 评估板的BSP 
      超过200个,当用户开发自己目标板的BSP时,比较简单的方法是从所提供的BSP中选一个最接近的来修改。这里提到的BSP的设计就是指这种板级的对依赖于硬件的源代码做必要的修改、增加或删除,以满足特定的硬件环境。</P>
      <P><STRONG>1 BSP</STRONG><STRONG>的概念</STRONG></P>
      <P>BSP(Board Support 
      Package,——板级支持包)是介于底层硬件和上层软件之间的底层软件开发包,这源于嵌入式操作系统与硬件无关的设计思想。如今的各种嵌入式系统,都采用了分层的设计方法。它将系统中与硬件直接相关的一层软件独立出来,称之为板级支持包(BSP)。这里BSP的主要功能为屏蔽硬件,提供操作系统的驱动及硬件驱动,具体功能包括:</P>
      <P>(1)目标板硬件初始化,主要是CPU的初始化,为整个系统提供底层硬件支持;</P>
      <P>(2)为操作系统提供设备驱动程序和系统中断服务程序;</P>
      <P>(3)定制操作系统的功能,为软件系统提供一个实时多任务的运行环境;</P>
      <P>(4)初始化操作系统,为操作系统的正常运行做好准备;<EM><A 
      href="http://www.51kaifa.com/shop/read.php?ID=3152" target=_blank><FONT 
      color=#ffffff size=2>无线SOC开发平台</FONT></A><FONT color=#ffffff size=2>499元 
      </FONT><A href="http://www.51kaifa.com/shop/read.php?ID=3140"><FONT 
      color=#ffffff size=2>S3C44B0 ARM7开发板</FONT></A><FONT color=#ffffff 
      size=2>378元 </FONT><A href="http://www.51kaifa.com/shop/read.php?ID=4769" 
      target=_blank><FONT color=#ffffff size=2>S3C2410 ARM9开发板</FONT></A><FONT 
      color=#ffffff size=2>780元 </FONT><A title=AT91SAM7S64 
      href="http://www.51kaifa.com/shop/read.php?ID=4731" target=_blank><FONT 
      color=#ffffff size=2>AT91SAM7S64 ARM7</FONT></A></EM><FONT color=#ffffff 
      size=2> </FONT><A 
      href="http://www.51kaifa.com/shop/read.php?ID=3184"><FONT color=#ffffff 
      size=2>单片机开发板之王——ELITE</FONT></A><A 
      href="http://www.51kaifa.com/shop/read.php?ID=3184" target=_blank><FONT 
      color=#ffffff size=2>-I单片机学习开发系统</FONT></A><FONT size=2><FONT 
      color=#ffffff>1200元 </FONT><A 
      href="http://www.51kaifa.com/shop/read.php?ID=4764" target=_blank><FONT 
      color=#ffffff>S3C2410 ARM9开发板(II)</FONT></A><FONT color=#ffffff> 
      950元</FONT></FONT> <FONT color=#ff0000 size=2><FONT size=2><A 
      title=EPM1270T144C href="http://www.51kaifa.com/shop/read.php?ID=4766" 
      target=_blank><FONT color=#ffffff>EPM1270T144C 
      CPLD开发板</FONT></A></FONT></FONT><FONT color=#ffffff size=2>&nbsp;&nbsp; 
      480元<BR></FONT><STRONG>2 BSP</STRONG><STRONG>文件组成及功能</STRONG></P>
      <P>BSP中包括源代码、头文件、MAKE文件、派生文件以及二进制驱动程序模块。在VxWorks 
      中硬件驱动程序分为通用性和BSP专用性两类。在开发BSP时,既要对BSP专用的驱动程序提供支持,还要将通用的设备驱动程序集成在一起。因此,编写的设备驱动程序,可根据具体情况放在BSP中的合适位置。</P>
      <P>BSP文件在 VxWorks /target /config /all和VxWorks /target /config / 
      bspname文件夹里。其中,all文件夹里的文件是所有BSP的通用文件,bspname文件夹的文件是用户自己定制的BSP文件<SUP>[1]</SUP>。经过编译、链接,并在makefile和depend.bspname等文件的控制下,原程序最后将生成镜像。BSP的组成及主要文件功能如下。</P>
      <P>(1)Tornado 
      argetconfigall目录下的文件。包括bootConfig.c,bootInit.c,usrConfig.c等,它们是所有BSP共享的,主要是缺省定义了所有VxWorks配置以及Boot 
      Rom的初始化控制代码,所以不是特别需要不要更改里面的任何文件。</P>
      <P>(2)Tornado argetconfig 
      spname目录下的文件。包括makefile,depend.bspname,config.h,bspname.h,romInit.s,sysALib.s,sysLib.c,sysSerial.c等,其中config.h中包含特定CPU板的所有包含文件和定义。</P>
      <P>VxWorks支持多种处理器平台,用户可以针对不同的目标系统,通过修改这些文件来完成BSP与 VxWorks在不同平台上的移植。</P>
      <P><STRONG>3 Vxworks</STRONG><STRONG>映像分类及其启动过程</STRONG></P>
      <P>3.1 VxWorks映像及其分类</P>
      <P>VxWorks在启动过程中涉及到两个映像文件:bootrom映像和VxWorks映像。这两个映像文件都要使用BSP代码。bootrom文件是从ROM引导VxWorks的引导目标模块,用于对目标板进行初始化,加载VxWorks操作系统映像。VxWorks 
      image包含VxWorks 
      OS,最终运行于目标板上。VxWorks映像按加载类型可分为:可下载映像和可引导映像;按运行方式分为在ROM中和在RAM中两种。</P>
      <P>可下载映像(Loadable Image),它实际包括两部分,一是VxWorks,二是boot 
      ROM,两部分是独立创建的。可引导映像(Bootable 
      Image)是将引导程序和VxWorks融为一体的映像,一般为最终产品,包括不驻留ROM的映像和驻留ROM的映像两种类型<SUP>[2]</SUP>。</P>
      <P>VxWorks在ROM中运行,只要把VxWorks 
      image的data段复制到RAM的RAM-LOW-ADRS,text部分留在ROM并在ROM执行。在ROM中运行VxWorks可以节省RAM空间,有利于应用程序有更大的空间运行,但是运行速度相对较慢。VxWorks在RAM中运行,写入ROM中的boot或VxWorks 
      image是压缩的,需先解压并复制所有的text或data到RAM的RAM-LOW-ADRS,在RAM中运行。</P>
      <P><IMG src="基于VxWorks的BSP技术分析.files/24224-1.gif" border=0></P>
      <P></P>
      <P>图1 VxWorks加载映象启动顺序</P>
      <P>3.2 VxWorks映像的启动流程</P>
      <P>VxWorks应用系统的启动顺序,一般是先加载BootRom; 
      BootRom再加载VxWorks应用,并跳转到VxWorks的入口SysInit执行。SysInit()复位CPU,执行最少而必要的硬件初始化,转而调用UserInit(),完成内核启动之前的初始化。UserInit()调用子程序激活VxWorks内核。首先子程序SysHWInit()将硬件置于初始的安全状态,然后子程序 
      KernelInit()激活VxWorks内核,生成多任务环境,并产生一个任务来安装驱动程序以及创建设备、初始化VxWorks 
      库、调用应用程序启动代码,而用来生成这个任务的子程序是UserRoot()。可见,通用的设备驱动程序应该位于UserRoot()中,而 
      BSP专用的设备驱动程序则位于子程序SysHWInit()中。整个启动过程完成后,系统进入多任务环境运行<SUP>[3]</SUP>。VxWorks可加载映像的启动顺序如图1所示。</P>
      <P><STRONG>4 
      </STRONG><STRONG>基于</STRONG><STRONG>PC486</STRONG><STRONG>的</STRONG><STRONG>BSP</STRONG><STRONG>设计过程及应用程序加载</STRONG></P>
      <P>4.1 BSP设计过程</P>
      <P>BSP开发处于整个嵌入式开发的前期,是后面系统上应用程序能够正常运行的保证。大体上,BSP的设计与开发可以分为以下几个步骤:</P>
      <P>(1)建立开发环境。安装 VxWorks 集成开发环境 Tornado,采用宿主机目标机交叉开发。</P>
      <P>(2)选择合适的BSP模板。一个合适相近的BSP模板可以大大减少开发周期。</P>
      <P>(3)bootrom的运行。修改、添加WIND内核激活前的初始化代码。</P>
      <P>(4)VxWorks的配置。修改或添加所需要组件及驱动程序,激活内核,实现基本的操作系统功能。</P>
      <P>(5)测试与验证。正确实现bootrom及VxWorks的下载,根据不同需要,进行修改与测试。</P>
      <P>结合实际中的工程,针对单串口的pc486目标机,在串口通信方式下,如何生成BSP及VxWorks系统的启动流程做一简单介绍。VxWorks主机工具与目标记交互关系如图2所示。</P>
      <P><IMG src="基于VxWorks的BSP技术分析.files/24224-2.gif" border=0></P>
      <P>图2 VxWorks主机工具与目标机交互关系</P>
      <P>(1)建立所需目录。</P>
      <P>在c:Tornado argetconfig中建立子目录all486,srl486,拷贝c:Tornado 
      argetconfigall中的全部文件到子目录all486中,拷贝c:Tornado 
      argetconfigpc486中的全部文件到子目录srl486中以便修改且不影响其他人的使用。</P>
      <P>(2)修改makefile。</P>
      <P>修改或添加以下语句:</P>
      <P>TARGET_DIR =srl486,TARGET_DIR为bsp目录名,将其指向要修改的bsp目录。</P>
      <P>CONFIG_ALL=..all486,将缺省ALL的文件复制到all486目录,在all486目录下做自己的修改。</P>
      <P>正确理解四个地址的含义,如下:</P>
      <P>ROM_BASE_ADRS: rom的起始地址。</P>
      <P>ROM_TEXT_ADRS: rom映象的起始地址。</P>
      <P>ROM_SIZE: rom的大小。</P>
      <P>RAM_HIGH_ADRS: VxWorks应用在存储器低端定位开始的地址。</P>
      <P>上述地址根据目标机实际的硬件情况进行设置,在config.h,makefile和makefile.*文件中都要定义,且大小必须要保持一致。Makefile中的上述地址不以0X开头,与config.h中有所区别。</P>
      <P>(3)修改config.h。这里config.h修改包括:</P>
      <P>#define DEFAULT_BOOT_LINE</P>
      <P>tsfs(0,0)host:vxWorks h=192.168.0.66 e=192.168.0.98 u=target</P>
      <P>…</P>
      <P>#if TRUE</P>
      <P>#define INCLUDE_PC_CONSOLE</P>
      <P>#endif</P>
      <P>…</P>
      <P>#undef&nbsp;&nbsp; WDB_TTY_DEV_NAME</P>
      <P>#define WDB_TTY_DEV_NAME /tyCo/0</P>
      <P>#undef&nbsp;&nbsp; CONSOLE_TTY</P>
      <P>#define CONSOLE_TTY NONE</P>
      <P>#undef&nbsp;&nbsp; WDB_TTY_CHANNEL</P>
      <P>#define WDB_TTY_CHANNEL 0</P>
      <P>#undef&nbsp;&nbsp; WDB_COMM_TYPE</P>
      <P>#define WDB_COMM_TYPE&nbsp;&nbsp; WDB_COMM_SERIAL</P>
      <P>#undef&nbsp;&nbsp; WDB_TTY_BAUD</P>
      <P>#define WDB_TTY_BAUD 38400</P>
      <P>#define INCLUDE_TSFS_BOOT</P>
      <P>#undef&nbsp;&nbsp; INCLUDE_WDB_TSFS</P>
      <P>#define INCLUDE_WDB_TSFS</P>
      <P>…</P>
      <P>同时屏蔽掉与网络相关的组件。</P>
      <P>(4)生成bootrom和VxWorks映像。在生成bootrom时,可在Tornado的集成环境下Build菜单中选择Build Boot 
      ROM来创建指定类型的Boot ROM。在生成VxWorks映像时,可在Tornado的集成环境下Build菜单中选择standard BSP 
      Builds来生成VxWorks映像。此外,也可以在命令行环境下利用Makefile创建各种映像类型。</P>
      <P>根据bootCongfig.c中的说明,我们的在config.h中的设置使能了虚拟控制台,所以bootrom启动后,我们在Tornado开发环境中,通过选中configure 
      target server的target server property中的console and 
      redirection项,启动虚拟控制台。这样在虚拟控制台可以看到启动信息,且按下 “@” 之后开始加载 VxWorks image。</P>
      <P>4.2基于VxWorks的应用程序的加载</P>
      <P>应用程序运行于VxWorks操作系统上。对于已存在的应用程序,VxWorks主要通过两种方式添加。一类是可下载的应用程序;一类是可启动的应用程序。</P>
      <P>一个可下载的应用程序包含一个或多个目标对象模块,这些模块可以下载和动态链接到VxWorks,并从shell或调试器中启动<SUP>[4]</SUP>。即允许目标模块装载到一个运行的系统中。通过创建一个可下载的工程,构建该工程,使用适当的映像启动目标。下载工程所产生的部分链接和变换的.out文件。</P>
      <P>一个可启动的应用程序包含一个链接到VxWorks映像的应用程序<SUP>[4]</SUP>。目标机启动时,可启动的应用程序开始运行。通过创建一个可启动的工程添加应用程序文件,然后编辑VxWorks初始化文件usrAppInit.c,为应用程序的初始化和启动工程添加调用。</P>
      <P><STRONG>5 </STRONG><STRONG>结束语</STRONG></P>
      <P>VxWorks以其良好的性能和持续发展能力在各种高精尖技术及实时性要求极高的领域得到了越来越广泛的应用,同时希望能将其移植到更多的硬件平台上。本文对基于VxWorks的BSP进行了分析,并在实际工程中得到了实现。但是针对不通的CPU板,BSP的实现不同,需根据具体的硬件板进行具体设计,这是嵌入式设计的难点所在。</P>
      <P>本文作者创新点:在运用BSP技术解决VxWorks移植的过程中,提出了串口通信以及其相应的应用程序的加载方法。</P>
      <P><STRONG>参考文献:</STRONG></P>
      <P>[1] WindRiver System Inc. VxWorks BSP Developer’s Guide 
5.5[M].2002.</P>
      <P>[2] 王学龙.嵌入式VxWorks系统开发与应用[M].北京:人民邮电出版社,2003.</P>
      <P>[3] 陈智育.VxWorks程序开发实践[M].北京: 人民邮电出版社,2004.</P>
      <P>[4] WindRiver System Inc. Tornado User’s Guide 2.2[M].2003.</P>
      <P>[5] 
孙建恒.嵌入式系统应用研究及实例[J].微计算机信息,2004,20(6):65-66</P></DIV></TD></TR></TBODY></TABLE><BR>
<DIV class=opt><A title=查看该分类中所有文章 
href="http://hi.baidu.com/jumbo/blog/category/&frac14;&frac14;&Ecirc;&otilde;">类别:技术</A> | <A 
title=将此文章添加到百度搜藏 onclick="return addToFavor();" 
href="http://cang.baidu.com/do/add" target=_blank>添加到搜藏</A> | 浏览(<SPAN 
id=result></SPAN>) | <A 
href="http://hi.baidu.com/jumbo/blog/item/23fd0c2454417430c9955953.html#send">评论</A>&nbsp;(0)
<SCRIPT language=javascript>
/*<![CDATA[*/
var pre = [true,'基于RS-485总线的PC与多单片机间的串行通信', '基于RS-485总线的PC与多单片机间...','/jumbo/blog/item/efb3ff0369a07b8bd53f7c53.html'];
var post = [true,'基于JPEG2000的无线图像监控系统的设计与实现','基于JPEG2000的无线图像监控系统...', '/jumbo/blog/item/5fc3aa770ff41e18b151b95c.html'];
if(pre[0] || post[0]){
	document.write('<div style="height:5px;line-height:5px;">&nbsp;</div><div id="in_nav">');
	if(pre[0]){
		document.write('上一篇:<a href="' + pre[3] + '" title="' + pre[1] + '">' +  pre[2] + '</a>&nbsp;&nbsp;&nbsp;&nbsp;');
	}
	if(post[0]){
		document.write('下一篇:<a href="' + post[3] + '" title="' + post[1] + '">' +  post[2] + '</a>');
	}
	document.write('</div>');
}
/*]]>*/
</SCRIPT>
 </DIV>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -