怎么学习wince bsp开发设备驱动及BSP的开发

OK6410开发板实物图
OK6410核心板外观(正面)
OK6410核心板外观(背面)
&&& 从一开始,飞凌的开发板设计就源自OEM项目的实施经验。这一传统鲜有其他制造商能够比拟。OK6410汇聚了当今主流ARM11平台的精髓,融入“立足高端,让学习更容易,开发更简单”的理念,在提供稳定的系统、丰富的接口以及出色的性能表现的同时,确保您的使用得心应手。选择飞凌、信任飞凌!
&&&&飞凌S3C6410开发板品质保证
开发板采用“核心板+底板”结构,比整板结构更易于产品应用;
提供完整底板PCB,用户可根据自己的需要裁减出相应的产品;
板对板之间选用精良连接器,镀金工艺可保证其常年运行不氧化;
整个核心板全部机器贴片,杜绝手工焊接造成的众多隐患;
为保证用户自行设计的产品品质,采用6410核心板用户可免费得到四组底板插座。
&&&&飞凌S3C6410开发板性能保证
采用低功耗、高性价比的S3C6410处理器,丰富的资源配置,可广泛应用于移动设备、手持终端和通用处理等领域;
为2.5G和3G通信服务提供了优化的硬件性能,内置强大的硬件加速器,包括运动视频处理、音频处理、2D加速、显示处理和缩放等;
集成了一个MFC(Multi-Format video Codec)支持MPEG4 / H.263 / H.264编解码和VC1的解码,能够提供实时的视频会议以及NTSC和PAL制式的CVBS输出;
具有先进的3D加速器,支持OpenGL ES 1.1 / 2.0和D3DM API,能实现4M triangles/s的3D加速;
包含了优化的外部存储器接口,该接口能满足在高端通信服务中的数据带宽要求。
&&&&飞凌S3C6410开发板应用保证
提供丰富的外围设备,除串口、网口、USB等常用接口外还配备了包括WIFI、GPS、GPRS、VGA/TV、摄像头、液晶屏、CAN总线、3G模块以及矩阵键盘在内的十余种功能扩展板;
提供原版的原理图、原件封装库、接口库,底板PCB版图,BootLoader、Linux/WinCE/Android/Ucos-II操作系统和数十种应硬件设备驱动、应用程序源码。更加方便用户裁剪、添加硬件,极大的提高项目开发效率;
配套资料是由飞凌工程师精心准备的学习教程和操作手册。首创全图形化引导和视频讲解形式,力图层次清晰、内容丰富、生动易懂;
飞凌为客户提供完善快捷的售后保证制度,包括专业的技术服务和质量保证。
&&&&适用于高端消费类电子、工业控制、车载导航、人机界面、多媒体终端、POS机、行业PDA等领域。
&核心板―长宽尺寸仅5CM*6CM(业内最小!)
飞凌6410核心板资源
Samsung S3C6410处理器,ARM1176JZF-S内核,主频533MHz/667MHz
标配128M字节DDR内存(可选配为256M)
256M NAND Flash,独家采用4位纠错技术,确保信息存储安全可靠(可选配为2G NAND)
12MHz、48MHz、27MHz、32.768KHz时钟源
支持5V电压供电
采用进口高质量板对板接插件,确保长期运行可靠性
OK6410底板资源
一个复位按键,采用专用芯片进行复位,稳定可靠
系统启动方式设置开关,采用 8 位拨码开关
四路串口,包括一个五线RS 232电平串口(DB9母座)和三个TTL电平串口(20pin 2.0mm间距插头座)
一个100M网口,采用DM9000AE,带连接和传输指示灯
一个USB HOST插口,支持USB1.1协议,可插鼠标、U盘等
一个USB Slave接口,支持USB2.0协议,使用mini-USB插座,可与PC连接
一个高速 SD 卡座。可以实现 SD Memory 功能和 SDIO 功能
一个无线网卡(WIFI)扩展接口
三个3.5mm标准立体声音频插座。其中包括一个音频输出插座,可与耳机连接;一个话筒输入插座;一个线路输入插座
触摸板接口支持4线电阻式触摸板;LCD接口支持3.5肌4.3肌5.6肌5.7肌7肌8嫉TFT LCD,独家支持10寸LVDS液晶屏
一个CMOS摄像头接口,支持ITU-R BT601/656 8位模式,使用10X2插针连接器
内部实时钟,带有后备锂电池座,断电后系统时间不丢失
一个JTAG接口,使用10*2插针连接器
温度传感器接口
1个单线数字式温度传感器接口(DS18B20)
一个红外模块
一个蜂鸣器
3个10×2插针扩展口。一个 包括1路GND、1路DA、8路AD、10路IO、1路SPI。一个用来扩展8×8矩阵键盘,另一个可连接3个TTL电平的串口和6路IO口,这3个串口中,包括1个五线串口和2个三线串口
&测试项目:
&&&&& OK6410开发板在强电磁干扰、强粉尘环境、高低温、潮湿等严酷工业环境中均测试通过,连续工作无异常状态产生。
&开发板实物图:
&核心板尺寸图:
&嵌入式Linux操作系统:
Linux软件资源
交叉编译器
arm-linux-gcc-4.3.2.tgz
&&&&1.&&&USB单步烧写(开发必备,可灵活烧写单个文件,便于调试);&&&&2.&&&SD卡自动烧写(简单快捷,适合规模化生产及批量更新系统);&&&&3.&&&全程支持Windows 7下的系统烧写。
版本:U-Boot-1.1.6
支持USB OTG2.0下载
支持命令行烧写uboot.bin, 内核zImage 和cramfs文件系统。
支持SD卡烧写,不需要与PC连接即可实现系统的安装。
支持SD卡烧写cramfs,(Linux 文件系统),yaffs2(Android文件系统)
支持USB OTG2.0 烧写Uboot, 内核和文件系统
版本: Linux-2.6.28 Linux-2.6.36.2 Linux-3.0.1
支持YAFFS2/CRAMFS/NFS/UBIFS/NFS/FAT32等格式的文件系统
看门狗驱动
4个LED驱动
6个用户按键驱动
PWM控制蜂鸣器驱动
CPU本身所带触摸屏控制器驱动
LCD驱动(3.5", 4.3", 7", 8")
USB Host驱动: 支持U盘,蓝牙,USB WiFi,USB 3G等USB设备
USB鼠标,键盘
万能USB摄像头
4个串口驱动
SD WiFi驱动
USB WiFi驱动
音频驱动(WM9714:ALSA接口)
以太网络(DM9000)
CMOS摄像头,TV-OUT
USB转串口驱动
矩阵键盘驱动
红外接收器驱动
温度传感器驱动
FrameBuffer驱动 支持Double Buffering双重缓冲区处理
版本:busybox-1.13.3
命令行测试程序
ADC转换测试程序
按键测试程序
CMOS摄像头测试程序
LED测试程序
PWM控制蜂鸣器测试程序
支持320*240、480*272、640*480、800*480、800*600、等多种分辨率
Qtopia-2.2.0: 经典的嵌入式图形界面系统,Linux系统启动后会自动运行该图形界面系统,可以使用触摸功能操作图形界面也可以使用USB鼠标操作界面,默认使用触摸功能。
Qt/E-Extended-4.4.3: 手机版的Qtopia
Qt/E-4.7.1 最新的Qt/Embedded,图形界面库,时尚,动感。
触摸屏和USB鼠标共存
可以选择启动Qtopia2.2.0, Qt/ Extended-4.4.3,Qt/E-4.7.1
图形应用测试程序
系统默认启动Qtopia2.2.0,里面含有飞凌公司开发的测试应用程序,以下为应用程序列表,我们提供的测试程序,全部开源,您可以拿来参考和使用。
浏览器软件:Konqueror/E 用于网络连接测试,验证上网功能,该浏览器支持简体中文和英文的显示。
LED测试:用于测试LED的灯开和灯关
按键测试:测试开发板上的按键,共有六个按键,实现“上,下,左,右,确定,取消”功能。您也可以使用按键操作Qtopia2.2.0的图形界面,就像您使用键盘一样方便。
蜂鸣器测试:用于测试PWM控制蜂鸣器的开和关
ADC转换测试:控制开发板上的可调电阻,界面显示不同的数值
3G拨号软件:支持WCDMA ,CDMA2000 ,TD-SCDMA三种制式的3G网络,拨号成功后可以直接使用Konqueror/E浏览器浏览网页。
WiFi:无线网络连接,适用于USBWiFi,SDIO WiFi,使用DHCP分配IP地址,网关和DNS,网络连接后,可以直接使用Konqueror/E浏览网页。
图片浏览器
MediaPlayer
日历、时钟、计算器、IE浏览器
文件管理器
触摸校正程序
插件管理器功能
Qt移植文档和视频教程
我们独家提供《Qt移植百科全书》,里面有Qtopia2.2.0,Qt/E-Extended-4.4.3,Qt/E-4.7.1的移植过程,语言描述详细,站在Qt初学者的角度讲述Qt的移植,并且讲述使用诺基亚最新发布的QtCreator2.0.1集成开发工具开发经典HelloWorld应用程序的过程,以供您参考学习。
&WINCE操作系统:
Windows CE 6.0 软件资源
BootLaoder
EBOOT 支持USB2.0高速下载
&&&&1.&&&USB单步烧写(开发必备,可灵活烧写单个文件,便于调试)&&&&2.&&&SD卡一键烧写(简单快捷,适合规模化生产及批量更新系统)&&&&3.&&&全程支持Windows 7下的系统烧写
WinCE 6.0 R3 (开放BSP 源代码)
系统中断和系统时钟驱动
串口驱动(支持三串口)
SD卡驱动,支持热插拔,最高支持32G
Nand Flash驱动
以太网卡驱动
实时时钟驱动 (掉电后可保存时间)
USB Host驱动
USB OTG驱动
液晶(LCD)驱动
触摸屏驱动 (四线电阻式,支持从3.5至10.4英寸LCD型号)
CMOS摄像头驱动
蜂鸣器驱动
温度传感器驱动
CMOS摄像头测试程序
TV测试程序
LED跑马灯测试程序
PWM 蜂鸣器测试程序
温度传感器测试程序
ADC测试程序
音频测试程序(录音、回放)
三串口测试程序
JPEG硬件解码测试
MFC(Multi Format Codec)测试 支持硬件解压MPEG-4/H.263/H.264格式视频
HybridDivx测试
OPENGLES测试 (包括OPENGL1.1和OPENGL2.0)
Samples for DShowFilters
Samples for HW Jpeg encoder/decoder
Samples for HW Mfc decoder
Samples for CMM(Codec Memory Menagement) driver
Samples for DivX decoder
提供源码、实例及相关API说明
提供注册表管理、屏幕旋转、文本编辑、EXCEL编辑、图片浏览、多媒体播放、游戏等应用程序
支持320×240、640×480、800×600、等分辨率
USB设备支持
U盘、USB鼠标、USB键盘、USB HUB、USB蓝牙适配器、USB无线网卡
PC端开发环境
VS2005 + CE6.0 R3 提供详细的环境搭建及相关使用说明
以补丁形式更新,用户可在第一时间得到我们的最新研发成果
支持启动进度条;支持MediaPlayer播放器、IE浏览器、word编辑等;支持注册表保存功能;支持MFC、.NET2.0及以上版本;可使用C/C++/C#/VB等多种语言开发上层应用程序
Android-2.3.4操作系统(首家推出,完全开源!)
Android 2.3.4(之前的Android 2.3.3仍然提供)
烧写安装方式
支持SD卡脱机一键烧写,采用yaffs2文件系统,不需要连接PC,方便用户安装系统,且支持SD卡和SDHC卡。
Linux-2.6.36.2
交叉编译器
Android源码编译采用Android源码包中自带的交叉编译器,不需要额外的安装。 Android的内核和Uboot的编译采用4.5.1交叉编译器。支持硬浮点运算。采用armv6指令集。
优盘即插即用
支持SD卡与U盘的即插即用,提供驱动程序源代码。
USB蓝牙即插即用
支持USB蓝牙,可以与手机之间传输文件,提供驱动程序源代码。
3G无线上网
支持3G拨号, 提供驱动程序源代码。
USB 3G上网卡
支持WCDMA,CDMA2000,TD-SCDMS 三种3G网络,支持USB 3G模块,即插即用,miniPCIe接口的3G模块同样支持,提供驱动程序源代码。
有线网络设置
支持,自动获取IP地址, DNS,提供驱动程序源代码。
支持,自动获取IP地址, DNS,提供驱动程序源代码。
CMOS摄像头
支持,提供2.6.36内核驱动与应用源码。
ADB同步功能
触摸屏校正
Android第一次运行将自动出现校准界面,进行校准。
LED, PWM, I2C等测试
支持,且我们会提供所有程序的源代码,和开发文档。
系统编译方式
& 一键编译Android,不需要您修改脚本和代码。
语言描述详细,方便您学习,我们的文档将以用户学习为侧重点,每一次阅读都会给您带来新的认识。
嵌入式Linux操作系统:
多媒体硬件解码测试
四通道视频同时解码测试
JPEG硬件编解码测试
摄像头&视频编解码测试
telent 服务
串口&485总线测试程序
vmware+ubuntu开发环境
Windows CE操作系统:
LED驱动测试程序
AD驱动测试程序
温度传感器测试程序
蜂鸣器测试程序
触摸屏校准
COMS摄像头测试程序
串口测试程序
串口测试程序
jpeg编解码测试
声音测试(录音、回放)
OPENGLES测试
& Android-2.01操作系统(飞凌嵌入式首家推出!当前最高版本):
Android-2.01操作系统
Android-2.01操作系统
一块已测试好的 OK6410-A开发板(包括核心板与底板)
OK6410-A用户光盘(5张)
一条串口线(一头针一头孔)
一条网线(交叉网线)
一个5V 直流电源
一个包装盒
基础光盘(包括开发板原理图,底板封装、PCB和原理图文件,WinCE、Linux、Ucos的源码、映像和使用手册,裸机程序源码和调试方法,开发工具,芯片手册);
Android-2.2操作系统源代码及编译工具; (使用手册,烧写映像等);
vs2005 安装程序;
WinCE6.0-A WinCE6插件;
WinCE6.0-B WinCE6补丁;
vmware + ubuntu9.10;
配置及价格(元)
128MB 内存256M&Nand Flash
256MB 内存2GB Nand Flash
S3C6410核心板
OK6410-A开发(不配屏)
OK6410-A开发板+3.5寸LCD
OK6410-A开发板+4.3寸LCD
<SPAN style="COLOR: #ff
<SPAN style="COLOR: #ff
OK6410-A开发板+5.6寸LCD
OK6410-A开发板+7寸LCD
OK6410-A开发板+8寸LCD
每周一到周五: 上午:9:00―11:30; 下午:13:30―17:00
公司按照国家法定节假日安排休息,在此期间无法提供技术支持,有问题请在论坛发帖或在qq群里留言,我们会尽快给您回复。
(需要资料请到此处注册下载。正确注册后24小时之内开通权限,用户可下载最近更新的资料。 )
开发板型号
FL2440交流群-1
FL2440交流群-2
FL2440交流群-3
FL2440交流群-4
FL2440交流群-5
FL2440交流群-6
FL2440交流群-7
FL2440交流群-8
OK6410交流群-1
OK6410交流群-2
OK6410交流群-3
OK6410交流群-4
OK6410交流群-5
OK6410交流群-6
OK6410交流群-7
OK6410交流群-8
OK6410交流群-9
OK6410交流群-10
OK6410交流群-11
&OK6410交流群-12
&OK6410交流群-13
OK6410交流群-14
OK6410-B交流群-1
OK2440交流群-1
OK2440交流群-2
TE2440交流群-1
TE2440交流群-2
TE6410交流群-1
TE6410交流群-2
&&&&我公司由多名具有丰富嵌入式研发经验的工程师组成的专职技术服务团队,能够高效的解决您在产品使用过程中遇到的问题。同时,我们开通了QQ技术群、BBS、邮箱、QQ及MSN技术交流平台,方便用户与我们沟通交流。
上一篇:没有了[]下一篇:
合作站点:&&&7650人阅读
一个成熟的商用操作系统,其被广泛应用的必要条件之一就是能够支持众多的硬件平台,并实现应用程序的硬件无关性。一般来说,这种无关性都是由操作系统实现的。
但对于嵌入式系统来说,它没有像PC机那样具有广泛使用的各种工业标准、统一的硬件结构。各种嵌入式系统各不同的应用需求就决定了它一般都选用各自定制的硬件环境,每种嵌入式系统从核心的处理器到外部芯片在硬件结构上都有很大的不同。这种诸多变化的硬件环境就决定了无法完全由操作系统来实现上层软件与底层硬件之间的无关性。
因此各种商用实时操作系统,都采用了分层设计的方法,它将系统中与硬件直接相关的一层软件独立出来,称之为Board Support Package,简称为BSP。顾名思义,BSP是针对某个特定的单板而设计的。并且它对于用户(指开发者)也是开放的,用户可以根据不同的硬件需求对其作改动或二次开发。 BSP在嵌入式系统中的角色,很相似于在PC系统中的BIOS地位。
BSP软件与其他软件的最大区别在于BSP软件有一整套模板和格式,开发人员必须严格遵守,不允许任意发挥。在BSP软件中,绝大部分文件的文件名和所要完成的功能都是固定的。所以,BSP软件的开发一般来说都是在一个基本成型的BSP软件上进行修改,以适应不同单板的需求。 针对某类CPU的硬件单板,如vxWorks)通常提供有其DEMO板的BSP, 这些程序位于指定的目录之下。也就是我们所说的最小系统BSP。一般来说,我们在硬件系统设计好之后,都会先找到一个与自己系统相近的DEMO板BSP(最起码是使用相同的CPU)。并以此为基础,开发自己单板的BSP。
BSP就是为软件操作系统正常运行提供最基本、最原始的硬件操作的软件模块,它和操作系统息息相关,但又不属于操作系统的一部分。BSP可以分为三大部分:
1:系统上电时的硬件初始化。
2:为操作系统访问硬件驱动程序提供支持。
3:集成的硬件相关和硬件无关的操作系统所需的软件模块。
BSP主要以两种形式来表现:
1:源代码(C代码、汇编代码)、系统编译连接依靠文件。
2:二进制的目标代码和目标代码库。
控制的硬件的程序,都属于单板BSP,但是,为了调试方便和软件的模块化,我们通常就将与此单板最小系统相关的程序简称为BSP,而将其他程序称为驱动程序。
系统时钟,网口,串口的计算机运行环境。
就包含了CPU系统的初始化程序以及网口,串口,系统时钟等设备的驱动程序。
来说,其可以分为两大部分:
1.掌握开发中使用的
2.研读所选CPU的资料。
3.研读硬件设计文挡。
4.研读电路板中器件的资料。
5.找一个BSP模板,熟悉它并在此基础上开发自己的BSP。从头研制BSP工作量极大,也没有必要。
6.利用仿真器进行调试,开发最小BSP系统。
7.在最小BSP的基础上,利用Tornado集成开发环境,进一步调试外围设备,配置、完善系统。
8.调试单板上的。
在串口和网口初始化及发挥功能以前,用仿真器调试是一种相对来讲很方便的手段。
BSP软件的调试通常需要利用仿真器来进行。目前市场上的大多数仿真器都能支持JTAG接口。典型的仿真器调试环境如下图所示:
调试计算机通过RS232接口与仿真器相连,完成对仿真器的初始化配置工作,通常这项工作只在第一次使用仿真器时进行,配置结果一般会被仿真器存储起来。仿真器通过以太网口与调试计算机相连,通过JTAG接口与目标板相连,利用这条通路,仿真器就可将计算机上的程序下载到目标板上进行调试。
目标板上的串口和以太网口为被调试的对象,和调试计算机相连,主要是可以通过调试计算机检验目标板上的接口是否工作正常。
在仿真器环境下,既可以调试vxWorks映象,也可以调试bootrom映象。当调试BootRom映象时,需要修改CONFIG.H和MAKEFILE文件将这段代码定位到RAM中,然后通过仿真器下载到目标板上的RAM中进行调试。
BSP模板与自己的单板基本一致。
&黑&调的工程步骤:
&&&&&&&&&&&&&&&&& BSP完成
Interrupt Service Code
实时系统中的中断处理非常重要,系统通常通过中断获取外部事件。为了尽可能块的响应中断,VxWorks中的ISRs运行在特定的上下文(非任务上下文),中断处理无需任务的上下文切换。
我们可以使用除了VxWorks系统使用的之外的系统硬件中断,VxWorks提供了例程intConnect( )用于将C程序与任何中断相连接。VxWorks的ISRs运行在特定的上下文(x86中断使用当前被中断掉的任务的堆栈,PPC有单独的全局中断堆栈)因而中断处理没有任务的上下文切换。
大部分系统规定(如PowerPC):所有的中断使用同一个专用堆栈,这个堆栈在系统启动时根据特定的配置参数由系统来分配和初始化。要求堆栈足够大来处理最坏的中断嵌套。
然而有一些系统不允许有单独的中断堆栈(如x86),在这种情况下,中断使用当前被中断掉的任务的堆栈。如果使用这种结构,必须给每个任务开足够大的任务堆栈来处理最坏的中断嵌套和调用嵌套。
可以在开发中使用 checkStack()来查看在栈空间中任务和中断的堆栈是如何分布的。
1、ISR要尽量的短,能在任务中完成的工作就不要放在ISR中。
2、ISR不能调用将会导致阻塞的子程序。
3、ISR不能take 信号量,但是ISR可以give信号量。
4、由于子程序malloc()、free()使用了信号量,ISR不能调用它们。
5、ISR不能通过VxWorks的驱动执行I/O。
6、ISR不能调用使用了浮点协处理器的子程序。
在ISR中不能调用的函数列表参见:《VxWorks Programmer Guide》中2.5.3 Special Limitations of ISRs。
universal asynchronous receiver transmitter (UART) protocol is commonly used to
cpu and peripheral devices (such as EEPROMs, real-time clocks, A/D)converters, and ISDN devices.
&O)总线,南桥通常含
主控制器、DMA控制器。
个设备(最多
就要了解单板的硬件组成,单板一般由CPU最小系统和一些外围硬件设备构成。
、部分嵌入式系统也包括软硬盘控制器、显卡、键盘。
&O单板组成示意图
&O最小系统结构示意
&O单板结构示意
BSP的另一项主要任务是为操作系统访问硬件设备驱动程序提供支持。所谓设备是指独立于处理器内核之外的,能够接收CPU的输入数据和/或向CPU提供数据输出的硬件单元。
对于一些通用的设备,如网口、串口,由于包含在BSP最小系统内,vxWorks 都会提供基本的驱动程序。常用的串口设备驱动程序参见目录参见目录
为操作系统访问硬件设备驱动程序提供支持。
。该回调函数在设备正常的收发中断中调用,用于向操作系统的驱动任务传递收发事件消息,触发驱动任务开始收发数据,使得系统尽快退出中断,真正的数据收发都在驱动任务中完成,接受
。设备出现异常状况通常也会引起中断,在异常中断中调用异常回调函数,将设备出错信息传给
loading a Device into the MUX;
VxWorks BSP的目录结构:
BSP文件主要位于Tornado安装之后的Target目录下,具体目录结构如下:
& config目录:用于vxWorks核心的配置及编译的文件。其中又包含多个子目录。
all目录:&&&& 通用的配置文件
&&&&&&&&& comps目录:&& 用于Tornado工程管理工具配置的源文件
&&&&&&&&& bspname目录: 每个单板都有一个相应目录,命名可根据单板而定,其中包含有关此单板BSP的代码文件,目标文件及编译文件等,这也就是我们通常所说的单板BSP。
& h目录:其中包含所有vxWorks操作系统的头文件及通用编译文件。其中的各个子目录表示了vxWorks中不同模块的头文件。
&lib目录:由vxWorks为不同平台提供的库文件及目标文件。
& src目录:vxWorks提供的部分硬件芯片驱动程序的源代码文件,其又包含多个子目录:
&&&&&&&&&&& config目录:有关vxWorks操作系统的一些通用的源代码文件。
drv目录:vxWorks中一些硬件芯片的通用驱动程序源代码文件,其根据不同功能的芯片分为若干个子目录,例如end&表示网口驱动,sio表示串口驱动等
& unsupported目录:其中包含一些较古老的硬件BSP代码。
理解VxWorks映象是开发VxWorks BSP的基础。
VxWorks映象通常由三个部分组成:BSP、操作系统内核和上层应用。从文件的组织形式上可以将映象分为三段:BSS段、Data段和Text段。其中,BSS段存放的是未初始化的全局变量或静态变量,Data段存放的是已经初始化的全局变量或静态变量,Text段存放的是可执行的代码。
根据应用场合的不同,VxWorks映象可分为三类:
Loadable images
Rom-based images
Rom-resident images
其中,Loadable images通过烧写在ROM中的Bootrom装载到RAM中来启动;Rom-based images使用自身带的启动代码把自己装载到RAM中来启动;而Rom-resident images在ROM中启动,只是把需要动态修改的Data段和BSS段装载到RAM中去。
这是一种运行于RAM的VxWorks映象。它不包含搬移程序,需要借助于一些外部的程序如bootRom才能加载到RAM的低端RAM_LOW_ADRS地址处。这是缺省的开发映象。
在开发的初期阶段,用户可以根据需要添加或删除一些VxWorks组件,生成自己的可加载的VxWorks映象,存放在开发主机的某个目录下。目标板上电后,由烧结在BOOT中的起始引导程序(BootStrap Programs)将BOOT中的ROM引导程序(ROM Boot Programs)拷贝到RAM的高端地址RAM_HIGH_ADRS处,并跳转至该地址执行ROM引导程序,配置好所选的加载方式(缺省为网络方式),将指定的主机目录下的可加载的VxWorks映象下载到目标板的RAM地址RAM_LOW_ADRS处,并跳转到此处执行。如图1所示。
这种映象的优点是生成的VxWorks映象可以存放在开发主机PC机上,不用烧到BOOT中,节省了BOOT容量,也便于随时修改不同的VxWorks映象,适用于调试的初期阶段。不足之处是需要在主机上维护一个正确的VxWorks映象,对于调试硬件无关的上层应用程序显得不是很方便。
&&& 在Tornado工作台的Build窗口中,选择Rules属性页中的VxWorks即可生成可加载的VxWorks映象。
这是一种运行于RAM中,但起初存放于ROM中的VxWorks映象。即该映象需要和搬移程序一起固化在BOOT中。目标板上电后,首先运行BOOT中的引导搬移程序,将整个VxWorks映象拷贝到RAM地址RAM_LOW_ADRS处,并跳转到此处执行。如图2所示。
该映象根据是否被压缩又可分为:
l基于ROM的未压缩的VxWorks映象,可直接从ROM拷贝到RAM中
l基于ROM的压缩的VxWorks映象,这种映象主要是为了节约BOOT空间,在从ROM拷贝到RAM的过程中需要解压缩,因此与上述未压缩的映象相比,它的引导过程相对较慢,但两者在RAM中的运行速度是一样的。
这种映象起初也和搬移程序一起固化在BOOT中。目标板上电后,首先运行BOOT中的引导搬移程序,但仅将VxWorks映象的数据段和BSS段拷贝到RAM地址RAM_LOW_ADRS处,映象的代码段仍旧留在ROM中,从ROM中开始执行。如图3所示。
这种映象的优点是具有最快的引导速度,占用最少的RAM空间,适用于RAM空间有限的目标板。但是由于该映象在ROM中运行,运行速度在三种映象中是最慢的。
针对上述三种不同的VxWorks映象,可以生成以下几种不同的BOOTROM,主要体现在执行搬移程序romStart( )( 位于bootInit.c文件中)时不同:
由图1所示可知,用于可加载VxWorks映象的BOOTROM包含两部分:起始引导程序(BootStrap Programs)和ROM引导程序(ROM Boot Programs)。
起始引导程序驻留在ROM中,主要包含:
l汇编级的硬件初始化程序romInit.s,用于系统的基本初始化,设置一些重要寄存器的初始值,进行存储器的映射
l搬移程序bootInit.c,将ROM引导程序拷贝至RAM的高端地址RAM_HIGH_ADRS,然后跳转到此处执行ROM引导程序。
ROM引导程序起初存放在ROM中,初始化时被拷贝到RAM中,主要用于系统的进一步初始化,并配置加载方式,将VxWorks映象加载至RAM。可分为三种不同的类型:
l压缩的ROM引导程序,在拷贝的过程中需要解压缩,在RAM中执行
l未压缩的ROM引导程序,可直接拷贝,在RAM中执行
l驻留ROM的ROM引导程序,仅拷贝ROM引导程序的数据段,代码段仍旧在ROM中执行
在Tornado开发环境中,通过在主窗口点击Build|Build Boot ROM&可以选择生成以上
三种BOOTROM,分别为:bootrom_uncmp.hex(未压缩的BOOTROM),bootrom.hex(压缩的BOOTROM),bootrom_res.hex(驻留的BOOTROM)。
静态连接到可加载的VxWorks映象的系统初始化代码执行并完成整个初始化过程。
引导过程成功以后,RAM中ROM引导程序占用的空间(从RAM_HIGH_ADRS开始)可以重新被系统利用。
图1中所示的各地址含义为:
lLOCAL_MEM_LOCAL_ADRS是RAM的起始地址
lRAM_LOW_ADRS是VxWorks的加载点,也是VxWorks代码段的起始位置
lFREE_RAM_ADRS是VxWorks映象的结束点。通常也是系统内存池和目标服务器内存池的起始地址
lRAM_HIGH_ADRS是ROM引导程序的加载点。它也是ROM引导程序(除驻留ROM引导程序之外)的代码段的起始位置,或驻留ROM引导程序数据段的起始位置。
由图2所示可知,用于该映象的BOOTROM包含两部分:起始引导程序(BootStrap Programs)和基于ROM的VxWorks映象。搬移程序bootInit.c负责将VxWorks映象的文本段和数据段搬移到用户定义的低端内存地址RAM_LOW_ADRS,如果需要进行必要的解压缩,然后直接启动VxWorks映像。
因此BOOTROM的容量相对于1节中描述的BOOTROM要大一些,但无需在主机目录下维护一个可用的VxWorks映象。
基于ROM的VxWorks BOOTROM有压缩和未压缩之分。在Tornado工作台的Build窗口中,选择VxWorks映象Rules属性页中的VxWorks_rom即可生成基于ROM的未压缩的VxWorks BOOTROM,选中VxWorks_romCompress即可生成基于ROM的压缩的VxWorks BOOTROM。
由图3所示可知,用于该映象的BOOTROM包含两部分:起始引导程序(BootStrap Programs)和驻留ROM的VxWorks映象,VxWorks系统文本段驻留在ROM,搬移程序bootInit.c负责将数据段和bss段搬移到用户定义的低端内存地址RAM_LOW_ADRS,直接启动VxWorks映像(含符号表)。此时,RAM_LOW_ADRS是VxWorks映象的加载点,它也是VxWorks数据段的起始点。
在Tornado工作台的Build窗口中,选择VxWorks映象Rules属性页中的VxWorks_romResident即可生成驻留ROM的VxWorks BOOTROM。
下面以&BootRom + vxWorks&的启动形式说明BSP的执行流程:
5.1& BOOTROM
目标板加电之后,程序指针指向RESET中断程序入口处,开始执行初始化程序romInit.s,设置机器状态字及其它硬件相关寄存器,关闭中断,禁止程序和数据CACHE,初始化内存,并设置堆栈指针,保存启动类型,调用romStart( )。
程序跳到第一个C程序bootInit.c的函数romStart( )入口地址,根据堆栈中的参数决定是否清零内存RAM(如是冷启动(cold start)则清零),根据不同的bootrom文件,把ROM中数据段和文本段拷贝到RAM(如果ROM代码是压缩的,还要解压);
程序跳到RAM入口地址(文件bootConfig.c中函数usrInit( ) ),根据用户配置来设置cache的工作模式,清零bss段,初始化异常处理程序,进行板级硬件初始化sysHwInit( )。
启动多任务内核KernelInit( ),执行usrRoot任务。在该任务中初始化串口,创建console终端设备。创建bootCmdLoop任务,根据单板设计选择不同方式加载VxWorks映像文件,如通过串口、网口、硬盘等方式。
5.2& VxWorks
VxWorks进入点sysInit()
启动VxWorks系统的第一步就是将系统映象加载到主内存。这通常是在VxWorks boot Rom 的控制下,从开发主机上下载。接着,boot Rom将控制权交给VxWorks的起始进入点:sysInit()。在makefile和 config.h文件里,已将这个进入点设置成位于地址RAM_LOW_ADRS。
函数sysInit()位于系统特定的汇编语言模块sysALib.s中。它可以锁住中断,关闭cache(如果使用了话),初始化处理器的寄存器(包括C堆栈指针)至缺省值。它还会关闭跟踪,清除所有未决的中断,并调用一个位于usrConfig.c 模块的C语言子程序:usrInit() 。对于某些目标板,sysInit()还执行一些必要的与系统有关的硬件初始化,以便在usrInit()中执行完剩余的初始化内容。仅供usrInit()使用的初始堆栈指针,被设置成位于系统映象(RAM_LOW_ADRS)以下,向量表以上的位置。
初始化代码usrInit()
函数usrInit()(位于usrConfig.c中),储存有关引导类型的信息,处理在内核启动之前必须执行的初始化,而后启动内核执行。它是运行于VxWorks内的第一个C函数。此时,所有的中断都已被锁住。
许多VxWorks工具在usrInit( )中都不能使用。这是因为此时还没有任务的上下文(没有TCB和任务堆栈),那些需要任务上下文的工具无法被调用。函数usrInit( )仅做一些创建初始化任务usrRoot( )所必须的工作。然后由usrRoot( )完成启动过程。
usrInit( ) 中的初始化过程如下所述:
Cache初始化
usrInit( ) 的起始代码初始化cache,设置cache 模式,并将cache放置在一个安全的位置。在usrInit( )结束时,缺省情况下,指令cache和数据cache被使能。
对系统的BSS段清零
C 和C++语言规定所有未初始化的变量缺省的初始值为零。这些未初始化的变量被放置在一个称为bss的段内。由于usrInit( )是系统执行的第一个C代码,在它的一开始对包含bss段的内存清零。VxWorks的boot ROM 也会清内存,但VxWorks映象假设没有采用boot ROM,仍然执行清内存的操作。
初始化中断向量
异常向量必须在使能中断和启动内核之前建立。首先,调用intVecBaseSet( ) 建立向量表基地址。而后,调用excVecInit( ) 初始化所有的异常向量至缺省句柄,以便安全地捕获和报告由程序错误或意外的硬件中断导致的异常。
初始化硬件至静止状态
通过调用系统相关函数sysHwInit( )初始化系统硬件。该函数复位并关闭那些在中断使能(内核启动时)以后可能产生中断的硬件设备。这一点很重要,因为VxWorks ISRs(用于I/O设备,系统时钟等)直到在任务usrRoot( )中完成系统初始化以后,才被连接到它们的中断向量上。不要在sysHwInit( ) 调用中试图为一个中断连接一个中断句柄(也就是不能使用intConnect( )),因为此时内存池还没有初始化。
初始化内核
函数usrInit( )结束时调用了两个内核初始化函数:
usrKernelInit( )(在usrKernel.c中定义)为每个指定的可选内核组件调用合适的初始化代码。
kernelInit( ) (kernelLib.c的一部分)初始化多任务环境,不用返回。函数参数包括:
l用以产生作为根任务的应用程序,典型的为usrRoot( )
l使用的堆栈大小
l可用的起始内存地址,一般位于VxWorks映象的代码段,数据段和bss 段之后,如果包含可选的主机内存池,则还要加上WDB_POOL_SIZE。
l由sysMemTop( )定义的内存顶部
l中断堆栈的大小
l中断封锁级别
kernelInit( ) 调用intLockLevelSet( ),关闭循环模式,创建一个中断堆栈(如果结构支
持的话)。然后从内存池的顶部创建一个根堆栈和TCB,创建一个根任务,usrRoot,并终止usrInit( )线程的执行。此时使能中断,所有的中断源已被关闭,未决中断已被清除。
&&& 初始化内存池
内存池的初始化是由kernelInit( )来完成的。kernelInit( ) 的参数指定了初始内存池的起始和终止地址。在缺省的usrInit( )中,将内存池设置在紧接于引导的系统映象之后,并包含所有剩余的可用内存。
可用内存的大小由sysMemTop( )决定。如果你的系统有其它的不连续的内存片,你可以在usrRoot( )任务中通过调用memAddToPool( )将它们包含进通用的内存池。
&&& VxWorks包含了一个位于memPartLib模块中的内存分配工具,它管理一个可用内存池。用户可以调用malloc( )函数从内存池中获得可变大小的内存块。VxWorks也利用malloc( )函数来动态分配内存。许多VxWorks工具在初始化过程中需要分配数据结构。因此,内存池必须在任何其他的VxWorks工具初始化之前初始化。
&&& Tornado目标服务器也管理一部分目标内存以支持目标模块的下载和其他开发功能。VxWorks使用malloc( )函数为已下载的模块分配空间,为已产生的任务分配堆栈,在初始化时分配数据结构。用户也可以使用malloc( )函数为自己的应用程序分配所需的内存空间。因此,推荐将所有的未用内存分配给VxWorks内存池,除非必须为一个特殊的应用保留一片固定的绝对内存。
初始任务usrRoot( )
当多任务内核启动执行以后,所有的VxWorks多任务工具就可以用了。控制权被传送至usrRoot( )任务,并完成初始化系统。
usrRoot( ) 执行以下操作:
l初始化系统时钟
l初始化I/O系统和驱动
l创建控制台设备
l设置标准输入和标准输出
l安装异常处理和登陆
l初始化管道驱动器
l初始化标准I/O
l创建文件系统设备并安装磁盘驱动器
l初始化浮点支持
l初始化性能监视工具
l初始化网络
l初始化可选的工具
l初始化WindView
l初始化目标代理
l执行一个用户提供的启动脚本
l初始化VxWorks Shell
下面对各个步骤进行详尽的描述:
初始化系统时钟
usrRoot( ) 任务执行的第一个操作就是初始化VxWorks时钟。通过调用sysClkConnect( )
将系统时钟的中断向量连接到usrClock( )函数上。调用sysClkRateSet( )将系统时钟率设置为60Hz。
&& sysClkConnect( ) 函数调用sysHwInit2( )。风河的BSP采用sysHwInit2( )执行在sysHwInit( )中未完成的进一步的板级初始化。例如,可以利用intConnect( )连接ISR,因为此时已经分配了内存,系统处于多任务环境。
初始化I/O系统
如果在configAll.h中定义了INCLUDE_IO_SYSTEM,就可以调用iosInit( )函数初始化VxWorks的I/O系统。该函数的参数指定了可被顺序安装的最大驱动器的数目,可以在系统中同时打开的最大文件数目,和VxWorks的I/O系统包含的&空&设备的名字。
包含或去除INCLUDE_IO_SYSTEM还会影响是否创建控制台设备,是否设置标准的输入、输出和标准的出错信息。
创建控制台设备
如果包含了板上串口驱动器(定义了INCLUDE_TTY_DEV),就可以通过调用驱动器的初始化函数(典型的是ttyDrv( ))将它安装进I/O系统。实际的设备是通过调用驱动器的设备创建函数(典型的是ttyDevCreate())来创建和命名的。这个函数的参数包括设备名称,一个串行I/O通道描述字(从BSP获得),和输入输出缓存大小。
宏NUM_TTY定义了tty口的数量(缺省是2)。宏CONSOLE_TTY指定了哪个口作为控制台口(缺省是0),宏CONSOLE_BAUD_RATE指定了其比特率(缺省是9600 bps)。这些宏都在configAll.h中定义,但对于那些具有非标口数的单板可以在config.h中对它们进行重新定义。
设置标准输入、标准输出和标准出错信息
系统级的标准输入、标准输出和标准错误信息的配置是通过打开控制台设备并调用ioGlobalStdSet( )来建立的。这些配置作为VxWorks的缺省设备用于与应用开发人员通讯。为了使控制台设备成为一个交互式的终端,调用ioctl( )将设备选项设为OPT_TERMINAL。
安装异常处理和登录
&&& 初始化VxWorks的异常处理工具(由excLib模块提供)和登录工具(由logLib库提供)。这些工具检查在根任务内部或者初始化各种工具时产生的程序错误。
当定义了宏INCLUDE_EXC_HANDLING和INCLUDE_EXC_TASK后,调用excInit( )初始化异常处理工具。excInit( ) 函数产生一个异常支持任务excTask( )。初始化以后,可以安全地捕获和报告导致硬件异常的程序错误,报告并解除没有初始化向量的中断。当定义了INCLUDE_SIGNALS后,调用sigInit( )初始化VxWorks的信号工具,该工具用于任务的异常处理。
当定义了INCLUDE_LOGGING宏以后,调用logInit( )初始化登录工具。其参数定义了显示登录信息的设备的文件描述字,和分配的登录信息缓存数。登录初始化还创建了一个登录任务logTask( )。
初始化管道驱动
如果需要所谓的管道,在configAll.h中定义INCLUDE_PIPE,就会自动地调用pipeDrv( )初始化管道。而后任务就可以利用管道通过标准的I/O接口互相通讯了。管道必须由pipeDevCreate( ) 函数创建。
初始化标准I/O
当定义了宏INCLUDE_STDIO以后,VxWorks 就会包含一个可选的标准I/O包。
创建文件系统设备并初始化设备驱动
许多VxWorks配置至少包含一个磁盘驱动器,或带有dosFs/rt11Fs/rawFs文件系统的RAM磁盘。首先,通过调用驱动器的初始化代码安装一个磁盘驱动器。而后,驱动器的设备创建代码会定义一个设备。这个调用会返回一个指向描述设备的BLK_DEV结构的指针。
然后就可以调用文件系统的设备初始化代码-dosFsDevInit( ), rt11FsDevInit( ), or rawFsDevInit( )(如果定义了宏INCLUDE_DOSFS, INCLUDE_RT11FS和INCLUDE_RAWFS)初始化和命名设备。在初始化一个设备之前,必须用dosFsInit( ), rt11FsInit( )或 rawFsInit( )初始化文件系统模块。文件系统的设备初始化函数的参数取决于特定的文件系统,但典型的包括设备名称,由驱动器的设备创建代码产生的一个指向BLK_DEV结构的指针,可能还有一些文件系统特定的配置参数。
初始化浮点支持
如果在configAll.h中包含了INCLUDE_FLOATING_POINT宏定义,则调用floatInit( )函数初始化浮点I/O支持。当定义了INCLUDE_HW_FP,调用mathHardInit( )初始化对浮点协处理器的支持。当定义了INCLUDE_SW_FP,调用mathSoftInit( )初始化对软件浮点仿真的支持。
包含性能仿真
VxWorks具有两个内嵌的性能监视工具。一个由spyLib提供的任务活动综述,一个由timexLib提供的子程序执行定时器。如果在configAll.h中定义了宏INCLUDE_SPY 和INCLUDE_TIMEX,就会包含这些工具。
初始化网络
如果配置头文件中定义了INCLUDE_NET_INIT,usrRoot( )就会调用usrNetInit( )函数初始化网络(usrNetInit( )的源代码位于installDir/target/src/config/usrNetwork.c)。usrNetInit( )函数使用了一个配置字符串作为它的参数。这个配置字符串通常是一条&引导行&,用于VxWorks的boot ROM引导系统。根据这个字符串,usrNetInit( )函数执行以下操作:
l调用netLibInit( )初始化网络子系统
l连接并配置合适的网络驱动器
l添加网关路由
l初始化远程文件存取驱动器netDrv,并添加一个远程文件存取设备
l初始化远程登录工具
l可选地初始化远端程序调用(RPC)
l可选地初始化网络文件系统(NFS)工具
如前所述,是否包含这些网络工具由configAll.h中的宏定义决定。
初始化可选产品和其它组件
可选产品VxMP可提供共享内存目标。如果定义了宏INCLUDE_SM_OBJ,usrRoot( )就会调用usrSmObjInit( )函数(源代码位于installDir/target/src/config/usrSmObj.c),初始化共享内存目标。共享内存目标库需要VxWorks引导行中的域值。这些函数包含在usrNetwork.c文件中。如果不包含网络服务,usrNetwork.c就不会被包含,共享内存初始化就会失败。工程工具计算所有的依存关系,但如果使用手工配置,可以将INCLUDE_NETWORK添加进configAll.h,或是从usrNetwork.c文件中将引导行代码提取出来放置到其他地方。
如果定义了INCLUDE_MMU_BASIC,就可以提供基本的MMU支持。如果定义了INCLUDE_MMU_FULL,可选产品VxVMI就可以提供代码保护,向量表保护和一个虚拟内存接口。MMU由函数usrMmuInit( )初始化,该函数位于installDir/target/src/config/usrMmuInit.c文件中。如果还定义了宏INCLUDE_PROTECT_TEXT 和INCLUDE_PROTECT_VEC_TABLE,就会初始化代码保护和向量表保护。
初始化WindView
可选产品WindView可提供内核测试工具。如果在configAll.h中定义了宏INCLUDE_WINDVIEW,就可以在usrRoot( )中调用windviewConfig ( )初始化WindView。其它的WindView常量控制特定的初始化步骤。
初始化目标代理
如果定义了INCLUDE_WDB,调用函数wdbConfig( )(位于installDir/target/src/config/usrWdb.c)。这个函数初始化通讯接口,然后启动代理。
执行一个启动脚本
如果VxWorks配置了目标驻留的shell,定义了INCLUDE_STARTUP_SCRIPT,并且在boot引导过程中在启动脚本参数中输入了脚本文件的名称,usrRoot( )函数就可以执行一个用户提供的启动脚本。如果在引导过程中忽略了启动脚本参数,就不会执行启动脚本。
可加载VxWorks映象的初始化过程
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:73238次
排名:千里之外
原创:23篇
转载:10篇
评论:14条
(1)(1)(3)(8)(4)(8)(1)(7)

我要回帖

更多关于 wince bsp 的文章

 

随机推荐