




已阅读5页,还剩23页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Technical Note广州致远电子有限公司VxWorks技术笔记 基于s3c2440a的VxWorks BSP移植TN01010101 V0.01 Date:2009/04/08VxWorks BSP移植技术笔记类别内容关键词VxWorsk BSP s3c2440a摘 要VxWorks的BSP开发 VxWorks BSP移植技术笔记 广州致远电子有限公司VxWorks技术笔记修订历史版本日期原因V0.012009/04/08创建文档销售与服务网络(一)广州周立功单片机发展有限公司地址:广州市天河北路689号光大银行大厦12楼F4邮编:510630电话:(020)38730916 38730917 38730972 38730976 38730977传真:(020)38730925网址:广州专卖店地址:广州市天河区新赛格电子城203-204室电话:(020)87578634 87569917传真:(020)87578842南京周立功地址:南京市珠江路280号珠江大厦2006室电话:(025)83613221 83613271 83603500传真:(025)83613271北京周立功地址:北京市海淀区知春路113号银网中心A座1207-1208室(中发电子市场斜对面)电话:(010)62536178 62536179 82628073传真:(010)82614433重庆周立功地址:重庆市石桥铺科园一路二号大西洋国际大厦(赛格电子市场)1611室电话:(023)68796438 68796439传真:(023)68796439杭州周立功地址:杭州市天目山路217号江南电子大厦502室电话:(0571) 28139611 28139612 28139613 28139615 28139616 28139618传真:(0571) 28139621成都周立功地址:成都市一环路南二段1号数码同人港401室(磨子桥立交西北角)电话:(028)85439836 85437446传真:(028)85437896深圳周立功地址:深圳市深南中路 2070号电子科技大厦C座4楼D室电话:(0755)83781788(5线)传真:(0755)83793285武汉周立功地址:武汉市洪山区广埠屯珞瑜路158号12128室(华中电脑数码市场)电话:(027)87168497 87168297 87168397传真:(027)87163755上海周立功地址:上海市北京东路668号科技京城东座7E室电话:(021)53083452 53083453 53083496传真:(021)53083491西安办事处地址:西安市长安北路54号太平洋大厦1201室电话:(029)87881296 83063000 87881295传真:(029)87880865销售与服务网络(二)广州致远电子有限公司地址:广州市天河区车陂路黄洲工业区3栋2楼邮编:510660传真:(020)38601859网址:(嵌入式系统事业部) (工控网络事业部) (楼宇自动化事业部)技术支持:CAN-bus:电话:(020)22644381 22644382 22644253邮箱:iCAN及数据采集:电话:(020)28872344 22644373邮箱:MiniARM:电话:(020)28872684 28267813邮箱:以太网:电话:(020)22644380 22644385邮箱:无线通讯:电话:(020) 22644386邮箱:串行通讯:电话:(020)28267800 22644385邮箱:编程器:电话:(020)22644371邮箱:分析仪器:电话:(020)22644375 28872624 28872345邮箱:ARM嵌入式系统:电话:(020)28872347 28872377 22644383 22644384邮箱:楼宇自动化:电话:(020)22644376 22644389 28267806邮箱: 销售:电话:(020)22644249 22644399 22644372 22644261 28872524 28872342 28872349 28872569 28872573 38601786维修:电话:(020)22644245VxWorks技术笔记 2009 Guangzhou ZHIYUAN Electronics CO., LTD. iii目 录1. 适用范围12. BSP分析22.1BSP的文件构成22.2BSP的执行逻辑32.2.1BootROM image32.2.2VxWorks image42.2.3Driver加载的时机53. 移植要点63.1异常处理63.2中断处理93.3时钟113.4串口驱动113.4.1概述113.4.2ttyDrv(包括tyLib)123.4.3xxDrv驱动的实现153.5编译链接224. 参考资料23移植技术笔记 2009 Guangzhou ZHIYUAN Electronics CO., LTD. 11. 适用范围主要从几个关键主题描述s3c2440a的 VxWorks BSP定制工作, 对整个过程作了详细描述。另外提供一些开发中需要使用的参考资源,包括手册、文档、代码和工具等。适用于基于ARM的VxWorks 的BSP开发。此次移植的VxWorks BSP基于Tornado 2.2,适用于EPC6000,MiniHMI-1000等基于s3c2440a的工控板上。实现了向量表映射,中断异常管理,系统时钟,辅助时钟,Uart等最基本的驱动与功能。可用于生成VxWorks的bootrom和VxWorks镜像。2. BSP分析2.1 BSP的文件构成VxWorks的BSP组成文件主要包含在四个目录下:l Tornadotargetconfigall:所有BSP的公共部分;l Tornadotargetconfigcompsvxworks:基本模块描述文件(*.cdf);l Tornadotargetconfigcompssrc:模块配置文件(被usrConfig.c使用);l Tornadotargetconfigbspname:与目标板相关的部分。通常将targetconfigall下的文件拷贝到targetconfigbspnameall,同时修改makefile文件中的“CONFIG_ALL”项,设置为正确的路径。这样做的目的是为了在修改all目录下文件时不影响其它的BSP。下面分别介绍这些文件:1. all目录:在该目录下主要有如下几个文件:bootConfig.c:是bootrom的主要初始化与控制文件。BootConfig.c是usrConfig.c的一个子集,所以bootrom只能提供完整VxWorks Image中的部分功能。bootrom不使用MMU库(SPARC除外)。在集成环境下修改工程相关的配置信息不会影响bootrom,只有直接修改config.h,configAll.h,bootConfig.c和bootInit.c文件才会影响到bootrom;bootInit.c:定义了romStart()函数,用于bootrom的第二阶段初始化。首先把text和data段从ROM拷到RAM中,然后初始化部分RAM,进行解压;usrConfig.c:包含VxWorks镜像的主要初始化代码。在Tornado集成环境下生成VxWorks镜像时会用到此文件。2. bspname目录:在该目录下主要有如下几个文件:Makefile:bootrom的Makefile文件。其中定义了一些宏,如:ROM_TEXT_ADRS,ROM_SIZE,RAM_LOW_ADRS,RAM_HIGH_ADRS;这些宏定义应该与config.h下的定义相一致;config.h:包含所有的头文件和与CPU及系统相关的宏定义,如:对Cache和MMU的配置,RAM和ROM的定位以及大小配置;romInit.s:该文件是bootrom和带ROM启动功能的 VxWorks 镜像的初始化入口汇编代码,即实现了romInit()。目标板一上电就开始执行romInit(),主要完成三部分工作:l 关看门狗,屏蔽中断,禁能MMU,Cache,配置处理器时钟;l 初始化内存控制器;l 初始化堆栈指针和其它寄存器以执行C语言,然后调用romStart().注意:romInit()中的函数或变量必须设计成与内存地址无关的代码(PIC),如程序清单 2.1所示:程序清单 2.1 与内存地址无关代码L$_HiPosn: .long ROM_TEXT_ADRS + HiPosn - FUNC(romInit)L$_rStrtInRom: .long ROM_TEXT_ADRS + FUNC(romStart) - FUNC(romInit)L$_SMRDATA: .long ROM_TEXT_ADRS + SMRDATA - FUNC(romInit)romInit.s只执行一些必要的初始化,其余的初始化工作在后面完成。sysALib.s:包含目标板或系统相关的汇编语言函数,即实现了_sysInit(),是基于RAM的VxWorks镜像的入口程序,当bootrom引导完镜像后,就会从此出开始执行。sysALib.s类似于romInit.s完成的工作,但它不必设计成PIC,且可调用其它库中的函数。sysSerial.c:串口驱动程序的安装和初始化。bspname.h:包含与处理器相关的宏定义。sysLib.c:包含与目标板或系统相关的C语言函数,sysLib.c中应该实现以下几类函数:l 系统时钟中断相关的函数:sysClkConnect(),sysClkDisable(),sysClkEnable(),l sysClkInt(),sysClkRateGet(),sysClkRateSet();l 系统硬件初始化函数:sysHwInit(),sysHwInit2()l 内存相关的函数:sysMemTop(),sysNvRamGet(),sysNvRamSet()l 串口相关的函数:sysSerialHwInit(),sysSerialHwInit2(),sysSerialChanGet()l 杂项函数:sysBspRev(),sysModel(),sysToMonitor()l 其它可选函数:如:辅助时钟中断相关函数,总线相关函数其中部分函数的实现在驱动程序子文件中完成。通过包含C文件的方式引入到sysLib.c中,如程序清单 2.2所示:程序清单 2.2 包含C文件#include sysInt.c /* sys interrupt */#include sysTimer.c /* sys timer */#include sysSerial.c /* sio channel */#ifdef INCLUDE_END#include ax88796End.c /* END device */#endif2.2 BSP的执行逻辑2.2.1 BootROM image bootrom主要用于启动装载VxWorks image,因此完成较少的系统初始化,。一般有压缩和不压缩两种形式,如bootrom和boot_uncmp。与VxWorks image的主要区别在于Bootrom调用bootConfig.c,而VxWorks镜像调用usrConfig.c。1. bootrom的执行逻辑:文件romInit.s中的romInit文件bootInit.c中的romStart文件bootConfig.c中的usrInitsysHwInit()usrKernelInit()KernelInit(usrRoot,.)usrRootbootCmdLoop(void)命令行选择,或autobootbootLoad(pLine, &entry)加载模块到内存(网络,TFFS,TSFS) netifAttach()go(entry) (entry)()从入口开始执行,不返回。2.2.2 VxWorks image 1. 不带ROM引导功能的VxWorks镜像不带ROM引导功能的VxWorks镜像向需要bootrom将其加载到RAM中,sysaLib.s是在RAM中执行的第一个函数,执行逻辑如下:文件sysaLib.s中的sysInit文件usrConfig.c中的usrInitsysHwInitusrKernelInitKernelInit(usrRoot,.)其主要函数及功能如表 2.1 函数说明表 2.1 函数说明函 数函 数 功 能所 在 文 件sysInit()(a)锁住中断;(b)禁用缓冲;(c)初始化处理器寄存器到一缺省值;(d)清除所有悬置中断;(e)激活usrInit(),指明启动类型。sysALib.susrInit()(a)对bss赋零;(b)保存bootType于sysStartType;(c)调用excVecInit(),初始化所有系统和缺省中断向量;(d)依次调用sysHwInit(), usrKernelInit(),kernelInit().usrConfig.cusrKernelInit()依次调用classLibInit(),taskLibInit(),taskHookInit(),semBLibInit(),semMLibInit(),semCLibInit(),semOLibInit(),wdLibInit(),msgQLibInit(),qInit(),workQInit()usrKernel.ckernelInit()初始化并启动内核。(a)激活intLockLevelSet();(b)从内存池顶部创建根堆栈和TCB;(c)调用taskInit(),taskActivate(),用于usrRoot();(d)调用usrRoot().kernelLib.cusrRoot()初始化I/O系统,驱动器,设备(在configAll.h和config.h中指定)(a)调用sysClkConnect(),sysClkRateSet(),iosInit(),ttyDrv();(b)初始化excInit(),logInit(),sigInit().(c)初始化管道,pipeDrv();(d)stdioInit(),mathSoftInit()或mathHardInit()(e)wdbConfig():配置并初始化目标代理机usrConfig.c2. 带ROM引导功能的VxWorks镜像其中ROM驻留型的镜像在执行romStart函数时只把VxWorks镜像的data段复制到RAM的LOCAL_LOW_ADRS, text部分留在ROM并在ROM中执行,执行逻辑如下:文件romInit.s中的romInit文件compssrcromStart.c中的romStart文件usrConfig.c中的usrInitsysHwInitusrKernelInitKernelInit(usrRoot,.)其主要函数及功能如表 2.2所示:表 2.2 函数说明函数函数功能所在文件1.romInit()(a)禁止中断;(b)保存启动类型;(c)硬件初始化;(d)调用romStart();romInit.s2.romStart()(a)将数据段从ROM拷贝到RAM,清内存;(b)有必要的话将代码段从ROM拷贝到RAM,有必要的话解压缩;(c)调用usrInit();romStart.c3.usrInit()初始化程序usrConfig.c4.usrKernelInit()如果相应的配置文件被定义,对应函数被调用usrKernel.c5.kernelInit()初始化并启动内核kernelLib.c6.usrRoot()初始化I/O系统,驱动器,创建设备usrConfig.c2.2.3 Driver加载的时机在syslib.c文件中,被初始化的设备是系统或调试所依赖的,我们称为“近设备”,例如串口、时钟;在用户应用程序内被初始化的设备是依赖于操作系统的,我们成为“远设备”,例如在driver中需要使用信号量。3. 移植要点3.1 异常处理在VxWorks中对异常向量表的初始化是通过intVecBaseSet和excVecInit这两个函数来完成的。在ARM体系机构中,VxWorks提供的异常向量初始化大致如程序清单3.1所示:程序清单3.1 VxWorks提供的excVecInitstatic struct excEnterEntry excEnterEntrys5= (unsigned char *)(0x00000004),(unsigned char *)excEnterUndef, (unsigned char *)(0x00000008),(unsigned char *)excEnterSwi, (unsigned char *)(0x0000000c),(unsigned char *)excEnterPrefetchAbort, (unsigned char *)(0x00000010),(unsigned char *)excEnterDataAbort, (unsigned char *)(0x00000018),(unsigned char *)intEnt;STATUS excVecInit (void) int i; armInitExceptionModes(); for(i = 0;i5;i+) *(unsigned int*)(excEnterEntrys.vectorBase) = 0xe59ff0f4; *(unsigned int *)(excEnterEntrys.vectorBase+0xfc) = (int)(excEnterEntrys.vectorReal); if(cacheLib.textUpdateRtn !=NULL) cacheLib.textUpdateRtn(0,0x1c); _func_armIrqHandler = (FUNCPTR)intEnt; return OK;从中可以看出,VxWorks不支持对ARM的FIQ的处理,异常向量表中的5个异常处理函数,是由VxWorks提供的异常处理函数,不需要用户来直接操作。使用机器码0xe59ff0f4等同于“ldr pc,pc+0xfc”。这段程序的意思是在异常向量表的安装基地址0地址开始处填写异常向量表跳转语句,在0x100处写异常处理的跳转地址。VxWorks本来提供了intVecBaseSet函数来设置异常向量表的安装基地址,但是在ARM体系结构中intVecBaseSet是空的,根本不能通过调用该函数来改变异常向量表的安装基地址。对于一些ARM体系结构的处理器来说,根本没有提供地址重映射功能,如s3c44B0x,或者是能映射的地址空间有限,如LPC2xxx,能重映射到0地址的RAM空间只有64字节。通常这些处
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年VR虚拟现实智能家居设备市场分析及行业应用拓展报告
- 动漫产业产业链协同与创新型产业园区运营报告:2025年行业创新发展指南
- 煤库火灾应急预案(3篇)
- 婚礼火灾应急预案(3篇)
- 学前教育机构师资队伍教育教学改革案例研究报告
- 2025年市政工程考试关注点试题及答案
- 2025年高考第三次模拟考试物理(安徽卷)(全解全析)
- 2025年高考第三次模拟考试物理一(江苏卷)(全解全析)
- 2025年自考行政管理的具体实例解析试题及答案
- 2025年项目关键指标监控试题及答案
- 苏教版五年级下册数学 第4单元 第10招 分数单位的拆分 知识点梳理重点题型练习课件
- 开关设备检修工(技师)技能鉴定备考试题库及答案
- 川教版二年级《生命.生态.安全》下册第10课《面对学习困难》课件
- 端午节趣味谜语及答案
- 机械制造工艺学 王先逵课后答案
- 招商计划书内容
- 2023年高考英语模拟卷(天津专用)(解析版)
- 地铁车站毕业设计
- 小学数学前置性探究学习的实践研究
- 轨道交通信号基础知到章节答案智慧树2023年同济大学
- 如何预防与处理劳动争议培训课件
评论
0/150
提交评论