vxWorks学习笔记
vxworks 串行设备驱动的编写笔记
VxWorks 串行设备驱动的编写一、概述vxWorks的串行设备的驱动不同于一般的设备的驱动。
一般的设备都是在系统初启的时候调用xxDrv()来安装diver table。
然后,调用xxDevCreate()来将该设备描述符xx_DEV加入到device table中。
在应用层用设备的时候,直接通过fd→device list→driver table的顺序调用相应的驱动函数即可。
他们的层次关系是:应用→I/O system ←→driver。
层次关系很明确。
然而串行设备的层次关系就不完全是这样子的。
基于许多因素的考虑,vxworks的串行设备的驱动分成了如下图所示的几层:图1 串行设备驱动代码的分层结构从图中可以看出:系统中的串行设备驱动总共有3层。
其中,usrConfig.c和ttyDrv(包括tyLib)提供了一些对串行设备的一些通用操作。
sysSerial.c中一些对不同开发板(系统)中串行设备有关的一些数据结构进行初始化。
所以,称之为Implementation specific code。
最后,的xxDrv.c当然是包括了一些具体设备相关的驱动/操作。
(比如读写数据,设置等)说道这里我们来回过头来看看,包含了串行设备的系统的总体的一个模型:图2.系统的模型从上图看出串行设备的驱动xxDrv并不是直接和I/O system交互的。
中间存在一个ttyDrv(包括tyLib)。
实际上,在diver table中安装的不是xxDrv的函数而是ttyDrv/tyLib提供的函数。
另外,Target Agent可以和xxDrv交换,方便系统的调试。
TtyDrv(包括tyLib):可以称之为一个虚拟的设备驱动。
因为他只是介于I/O与底层的具体设备的driver之间,为系统提供的统一的串行设备的界面。
另外,还可以调用具体硬件的管理驱动。
总之,ttyDrv给系统提供的是一些通用的管理函数(缓冲管理,互斥等)。
VxWorks 字符设备驱动开发学习
VxWorks 字符设备驱动开发学习1. 驱动程序要完成的任务a)驱动的初始化(安装)程序:将驱动安装到I/O系统中,连接中断,完成必要的硬件初始化。
函数通常命名为xxDrv()。
这里我以本次开发的PC104扩展板卡SDC(自整角机—数字转换)为例,命名为sdcDrv().向驱动列表注册驱动b)设备创建程序:向I/O系统添加设备,该设备的驱动已经安装到I/O系统中,即此步骤必须在驱动程序已经注册到驱动列表中,xxDrv()已经执行,在这里是sdcDrv()。
函数通常命名为:xxDevCreat(),在这里我们命名为sdcDevCreat().c)连接到设备中断的中断服务程序。
假如设备可以工作在中断工作模式时,要连接到中断服务程序。
此处我们的板卡暂时未支持此种模式。
2.概念定义和数据结构●I/O 系统I/O系统是操作系统的一个层次,它向应用软件提供硬件无关的标准接口,以提高应用层软件的可移植性。
提供七个标准函数如下:creat() 、remove()、open()、close()、read()、write()、ioctl() ●驱动列表驱动列表保存了每个驱动函数的地址,通过这个表,I/O请求就被转发到具体的驱动函数。
驱动表的结构如下所示,定义在iosLib.h中。
3.驱动安装的流程1. 首先执行sdcDrv(),在其中调用iosDrvInstall(xxCreat,NULL,xxOpen,xxClose,xxRead,xxWrite,xxIoctl)函数,ST ATUS sdcDrv(){/*首先判断驱动程式是否已经安装*/if(sdcDrvNum>0)return(OK);/*在这里添加驱动程序初始化部分*//*将驱动程序添加到驱动列表中*/if((sdcDrvNum=iosDrvInstall(sdcCreat,NULL,sdcOpen,NULL,sdcRead,sdcWrite,sdcIoc tl))==ERROR){return(ERROR);}return(OK);}。
VxWorks_BSP移植笔记
Amine思创黄金开发板S3C44B0X VxWorks BSP 移植笔记版本 1.0修改历史目录1.介绍51.1目的51.2范围51.3定义和缩写51.4参考51.5声明52.开发环境描述52.1思创黄金开发板S3C44B0X 62.2Tornado 2.2 62.3ARM SDT v2.51 62.4Flash Programmer 63.设计目标74.关键主题74.1异常处理74.1.1问题分析74.1.2解决方法1(eking) 94.1.3解决方法2(d3000) 104.1.4解决方法3 114.1.5其他124.2CPU寄存器124.3仿真和写Flash程序的差别124.4时钟134.5串口驱动134.5.1修改134.5.2FIFO 144.5.3连接Console和target server 144.6缓存[Cache] 154.6.1修改154.6.2测试174.7网络驱动184.7.1修改184.7.2寄存器测试194.7.3网络初始化分离194.8TFFS驱动204.8.1Socket 204.8.2MTD 204.8.3格式化204.8.4加载214.9目标机FTP服务启动214.10boot Shell命令扩展224.11简单VxWorks应用235.详细开发过程245.1建立开发环境245.2选择近似BSP模板245.3让最简bootRom运行起来255.4丰富bootRom功能296.操作说明296.1bootRom启动296.2加载VxWorks 306.2.1TFFS自动加载316.2.2TFFS手动加载316.2.3网络自动加载316.2.4网络手动加载326.3VxWorks 启动337.TIPs 358.TODOs 359.?s 3510.附件3510.1代码目录3610.2映象目录3610.3其他36S3C44B0X VxWorks BSP 移植笔记1. 介绍1.1 目的主要从几个关键主题描述S3C44B0X VxWorks BSP定制工作,对整个过程作了详细描述。
(完整)VxWorks驱动开发笔记
(完整)VxWorks驱动开发笔记VxWorks驱动开发笔记普通应⽤软件的开发,客户都会提出很明确的需求如功能、⽤户界⾯、外部接⼝以及开发周期经费等等要求,这些要求⼀般都相对直观且容易理解。
但是对于驱动程序的开发开说,开发周期以及经费这些需求往往都⽐较容易理解,可是对于功能、⽤户界⾯以及外部接⼝等需求就很难描述了,因为这需要对底层操作系统的理解,否则就⽆法提出适宜的需求来,⽽对底层操作系统的理解才是驱动程序开发之所以困难的主要原因。
1.1 驱动程序的结构驱动程序有两⼤基本特征:⼀是它实现了对硬件设备的访问(最根本⽬的),⼆是它实现了⼀系列与硬件设备⽆关的的访问接⼝。
通过这些接⼝,上层软件在控制此类硬件设备时⽆需对硬件进⾏详细的了解就可以进⾏访问,此外,当硬件设备更换时,只需要修改设备驱动的硬件相关的部分,⽽上层软件⽆需做任何更改。
这两个基本特征也正好决定了驱动程序的主体结构。
如图1.1所⽰,图中的阴影部分为设备驱动程序。
图1.1 驱动程序的结构1.2 驱动程序的⼯作流程不同设备在操作系统中完成的⼯作是不同的,但是就是⼯作流程来说,⼤致可以分为两个阶段。
第⼀个阶段是初始化阶段,在初始化阶段,驱动程序主要完成硬件以及设备驱动相关数据结构的初始化。
第⼆个阶段是硬件的访问阶段,根据设备⼯作模式的不同,可以分为中断模式和轮询模式,⽆论何种模式都可以通过与硬件设备⽆关的通⽤接⼝进⾏硬件设备的访问。
2.1 串⼝驱动原理串⼝因为调试简单在许多数据量不⼤的场合依然较为流⾏,可以借助串⼝对⽬标机中操作系统的运⾏情况进⾏监控等等。
下图为Tornado开发软件通过串⼝对⽬标机上运⾏的VxWorks操作系统进⾏监控的结构原理图。
图2.1 Tornado通过串⼝对vxWorks操作系统进⾏监控设备的驱动程序分为与硬件相关部分和硬件⽆关部分,⽽硬件相关部分则负责具体的硬件实现,硬件⽆关部分实现了⼀系列通⽤的数据接⼝,其中硬件⽆关部分实现是create、remove、open、close、read、write、ioctl等7个通⽤的函数接⼝。
VxWorks笔记
VxWorks操作系统1、V xworks基本概念1.1 Bootrombootrom 是指on-chip bootrom,在CPU芯片内部,内嵌有小的boot程序(bootloader),类似于PC机主板上的BIOS的存储区域1.2 VxWorks 系统编程中任务级与中断级的通讯如何实现?中断是由硬件触发,软件的作用只是将中断服务例程(ISP)与中断事件连接起来.1.使能中断,函数intEnable().2.用intConnect()登记中断号,和相应的中断例程ISR.这样一旦有中断发生,系统自动跳转到相应位置执行ISR.汇编语言在VxWorks系统编程的使用:汇编语言主要出现在BSP文件roInit.s,sysAlib.s等,这些汇编指令是系统初始化硬件用的,硬件系统Power up时硬件特别是内存没有初始化,C函数库没有装入内存,系统此时不支持C 语言程序,只支持它自己的32位汇编指令,所以只能用汇编指令来初始化硬件,为后续的操作系统包括C语言支持做准备.在OS正常运行后,就可以用C了.2、Vxworks操作系统组成2.1实时内核(wind):多任务调度(采用基于优先级抢占方式,同时支持同优先级任务间的分时间片调度)任务间的同步进程间通信机制中断处理定时器和内存管理机制2.2 I/O 系统VxWorks 提供了一个快速灵活的与ANSI C 兼容的I/O 系统,包括UNIX 标准的Basic I/O(creat(), remove(), open(),close(), read(), write(), and ioctl().),Buffer I/O (fopen(), fclose(), fread(), fwrite(), getc(), putc()) 以及POSIX 标准的异步I/O。
VxWorks 包括以下驱动程序:网络驱动、管道驱动、RAM盘驱动、SCSI驱动、键盘驱动、显示驱动、磁盘驱动、并口驱动等2.3 文件系统支持四种文件系统:dosFs,rt11Fs,rawFs 和tapeFs 。
Works操作系统学习笔记
VxWorks 操作系统学习笔记1. VxWorks 任务任务:在执行时每个程序都被称之为任务。
VxWorks操作系统中,任务可以直接地或者以共享方式访问大多数系统资源,为了维护各自的线程,每个任务必须保持有足够的上下文环境。
(1) 任务状态:就绪(READY):该状态时任务仅等待CPU的状态,不等待其他任何资源。
阻塞(PEND):任务由于一些资源不可用而被阻塞时的状态。
睡眠(DELAY):出于睡眠的任务状态。
挂起(SUSPEND):该状态时任务不执行,主要用于调试用。
挂起仅仅约束任务的执行,并不约束状态的转换,因此pended-suspended状态时任务可以解锁,delayed-suspended状态时任务可以唤醒。
DELAY+S:既处于睡眠又处于挂起的任务状态。
PEND+S:既处于阻塞又处于挂起的任务状态。
PEND+T:带有超时值处于阻塞的任务状态。
PEND+S+T:带有超时值处于阻塞,同时又处于挂起的任务状态。
state+I:任务处于state且带有一个继承优先级。
------------------------------------------------------------------------| ready | ——> | pended | semTake () / msgQReceive () || ready | ——> | delayed | taskDelay () || ready | ——> | suspended | taskSuspend () || pended | ——> | ready | semGive () / msgQSend () || pended | ——> | suspended | taskSuspend () || delayed | ——> | ready | expired delay || delayed | ——> | suspended | taskSuspend () || suspended | ——> | ready | taskResume () / taskActivate () || suspended | ——> | pended | taskResume () || suspended | ——> | delayed | taskResume() |------------------------------------------------------------------------(2) Wind任务调度在Wind内核中,默认算法是基于优先级的抢占式调度算法,也可以使用轮转调度算法。
小硕vxworks网络驱动开发笔记
目录第1章操作系统基本概念 (4)1.1实时操作系统和分时操作系统的区别 (4)1.2嵌入式操作系统VxWorks简介 (4)1.3 VxWorks的特点 (5)1.3.1可靠性 (5)1.3.2实时性 (5)1.3.3 可裁减性 (6)1.3.4对一个实时内核的要求 (6)1.4 VxWorks的整体构架 (7)第2章vxWorks驱动开发预备 (7)2.1 VxWorks映像 (8)2.2 BSP主要文件目录的组成及作用: (11)2.3系统启动顺序 (14)2.4 Vxworks驱动概要 (17)第3章vxWorks 网络驱动开发 (22)3.1驱动类别 (22)3.2 Vxworks 下网络驱动开发 (25)3.3 VxWorks网络驱动配置及分析 (62)第4章VxWorks系统中常见问题 (67)1 / 71前言在通信,电子领域,目前主流的嵌入式操作系统为linux 和vxworks。
Linux多用于消费电子产品,像大家熟悉的andriod,原始系统就是linux,也就是说andriod也是一种linux系统。
还有大家熟悉的MP3,也是使用linux 操作系统的。
Linux因为价格便宜(开源的,不需要付licence),稳定性好占据了一定的市场份额。
Vxworks是风河系统1983开发的一款嵌入式实时操作系统,多用于通信,导航,航天等领域。
因为这些领域对实时性要求非常高,比如现在LTE 系统就是使用vxworks系统,因为是采用TDD模式,而这种模式,显然对实时性要求非常高。
也就注定了vxwroks 在这些领域的特有优势。
选择linux还是vxworks看自己的专业方向,还有自己的兴趣所有。
每个领域只要研究透彻,都是很有前途的。
既然两者都是主流的嵌入式操作系统,其还是有很多相似性。
小编也初步接触过linux,发现具备一定的linux基础对日后深入学习vxworks很有好处,很多思想都是相似的。
vxworks内核笔记
*
* Process delay list. Make tasks at the end of their delay, ready.
* Perform round robin scheduling if selected.
FAST WDOG *wdId;/* pointer to a watchdog */
FUNCPTRwdRtn;/* watch dog routine to invoke */
intwdArg;/* watch dog argument to pass with wdRtn */
intstatus;/* status return by Q_REMOVE */
/* set up system timer */
sysClkConnect ((FUNCPTR) usrClock, 0);/* connect clock interrupt routine */
sysClkRateSet (SYS_CLK_RATE);/* set system clock rate */
sysClkEnable ();
}
/*******************************************************************************
** sysClkConnect - connect a routine to the system clock interrupt
taskRtnValueSet (pTcb, OK);
break;
}
case ERROR:
Vxworks学习资料整理
Vxworks学习资料整理Vxworks学习资料整理 (1)1 基于硬盘启动的Vxworks环境搭建 (3)2 Vxworks引导盘制作 (6)2.1 通过DOS加载VxWorks方法 (6)2.2 Bootrom三种类型 (7)2.3 VxWorks映象 (7)2.4 Bootrom.sys最快制作方法 (8)2.5 从网络引导 (8)2.6 从本地硬盘引导 (9)2.7 制作bootrom文件 (9)2.8 Bootrom编译步骤 (11)2.9 用BSP生成Bootable工程(即我们的程序文件) (12)2.10 FTP Server下载VxWorks (14)3 Tornado调试环境的建立 (17)3.1.1 配置文件config.h (17)3.1.2 网络连接 (18)6 从主机搭接(attach)到目标机 (21)7.1.3 串口连接 (21)4 4.Config.h文件注释说明 (22)4.1 启动行说明 #define DEFAULT_BOOT_LINE \: (22)4.2 Config.h 文件说明 (23)4.3 启动参数结构体 BOOT_PARAMS (35)4.4 booting过程介绍,比较详细 (39)5 sysClkRateGet();返回系统时钟每秒的tick数量, tick详解 (43)6 中断应用设计要点 (44)7 驱动程序设计 (49)8 缩短vxworks的启动时间 (52)9 调试篇 (55)10 驱动编程步骤 (55)10.1 将驱动程序增加到“系统驱动程序列表”中 (55)10.2 将设备增加到“系统设备列表”中 (55)10.3 打开设备,得到文件描述符 (55)10.4 SELECT机制的使用 (56)10.4.1 select( )函数翻译 (58)11 VxWorks系统的网络驱动(END) (60)12 VXworks操作系统中信号量用于多任务同步与互斥的讨论 (62)12.1 二进制信号量实现互斥和同步 (64)12.1.1 互斥的实现: (64)12.1.2 同步的实现: (65)12.2 互斥信号量 (67)13 Tornado的文件目说明录 (68)14 Shell 内置命令说明 (72)14.1 任务管理 (72)14.2 任务状态信息 (72)14.3 系统修改和调试 (73)14.4 对象命令( WindSh Commands for Object Display ) (73)14.5 WindShell and Browser, Shell 命令 (74)15 驱动篇 (82)16 中断篇 (83)16.1 中断服务程序ISR编写注意事项 (83)16.2 中断号与中断向量的转换 (84)16.3 安装中断服务程序 intConnect() (84)16.4 调试中断服务程序方法 (84)17mkboot批处理命令详细解释 (84)18 MakeFile 说明 (86)19 VxWorks5.4中的输入输出重定向 (89)19.1 vxworks屏幕输出, 一般来说用printf都是串口/shell输出,串口输出就可以到屏幕上了? (89)19.2 20.2 VxWorks中针对X86开发时标准输入输出的重定向? (90)20 怎样加入外部.o文件? (93)21 如何在Vxworks中使用 cd ,pwd , ls 命令:启用File System and Disk Utilities 组件(INCLUDE_DISK_UTIL),可在shell下用pwd/cd/ls等命令 (94)22 Error: image is larger than 524288 bytes (94)23 proxyArpDefaultOn()未定义解决方法? (95)24 如何将VxWorks的系统定时间隔或系统Ticks设置为1ms (95)25 read/write、fread/fwrite、fopen/open有什么区别 (96)26 快速启动 (100)27 启动时报ATA0a和硬盘启动相关问题 (100)28 如何安装USB2.2新版本及编译USB驱动? (101)29 WindML、图形界面相关问题 (102)29.1 WindML,ugldemo出错? (102)29.2 5101 VxWorks黑屏问题? (102)29.3 添加ugldemo.c后,编译报undefined reference to “ugltextdraw”错误一大堆? (103)29.4 WindML 中文字库显示? (103)30 VxWork6.8相关问题 (105)30.1 ELF和bin文件的区别? (105)30.2 diab和GNU的区别? (106)31 No such file or directory错误? (108)专业术语:WTX协议:(Wind River Tool eXchange): 用于开发机内部Tornado工具与Target Server 之间通信.WDB协议:(Wind DeBug): 用于主机Target Server与目标机之间的通信.1基于硬盘启动的Vxworks环境搭建VxWorks操作系统是美国WindRiver公司于1983年设计开发的一种嵌入式实时操作系统(RTOS)。
Vxworks学习资料整理
Vxworks学习资料整理Vxworks学习资料整理 (1)1 基于硬盘启动的Vxworks环境搭建 (3)2 Vxworks引导盘制作 (6)2.1 通过DOS加载VxWorks方法 (6)2.2 Bootrom三种类型 (7)2.3 VxWorks映象 (7)2.4 Bootrom.sys最快制作方法 (8)2.5 从网络引导 (8)2.6 从本地硬盘引导 (9)2.7 制作bootrom文件 (9)2.8 Bootrom编译步骤 (11)2.9 用BSP生成Bootable工程(即我们的程序文件) (12)2.10 FTP Server下载VxWorks (14)3 Tornado调试环境的建立 (17)3.1.1 配置文件config.h (17)3.1.2 网络连接 (18)6 从主机搭接(attach)到目标机 (21)7.1.3 串口连接 (21)4 4.Config.h文件注释说明 (22)4.1 启动行说明 #define DEFAULT_BOOT_LINE \: (22)4.2 Config.h 文件说明 (23)4.3 启动参数结构体 BOOT_PARAMS (35)4.4 booting过程介绍,比较详细 (39)5 sysClkRateGet();返回系统时钟每秒的tick数量, tick详解 (43)6 中断应用设计要点 (44)7 驱动程序设计 (49)8 缩短vxworks的启动时间 (52)9 调试篇 (55)10 驱动编程步骤 (55)10.1 将驱动程序增加到“系统驱动程序列表”中 (55)10.2 将设备增加到“系统设备列表”中 (55)10.3 打开设备,得到文件描述符 (55)10.4 SELECT机制的使用 (56)10.4.1 select( )函数翻译 (58)11 VxWorks系统的网络驱动(END) (60)12 VXworks操作系统中信号量用于多任务同步与互斥的讨论 (62)12.1 二进制信号量实现互斥和同步 (64)12.1.1 互斥的实现: (64)12.1.2 同步的实现: (65)12.2 互斥信号量 (67)13 Tornado的文件目说明录 (68)14 Shell 内置命令说明 (72)14.1 任务管理 (72)14.2 任务状态信息 (72)14.3 系统修改和调试 (73)14.4 对象命令( WindSh Commands for Object Display ) (73)14.5 WindShell and Browser, Shell 命令 (74)15 驱动篇 (82)16 中断篇 (83)16.1 中断服务程序ISR编写注意事项 (83)16.2 中断号与中断向量的转换 (84)16.3 安装中断服务程序 intConnect() (84)16.4 调试中断服务程序方法 (84)17mkboot批处理命令详细解释 (84)18 MakeFile 说明 (86)19 VxWorks5.4中的输入输出重定向 (89)19.1 vxworks屏幕输出, 一般来说用printf都是串口/shell输出,串口输出就可以到屏幕上了? (89)19.2 20.2 VxWorks中针对X86开发时标准输入输出的重定向? (90)20 怎样加入外部.o文件? (93)21 如何在Vxworks中使用 cd ,pwd , ls 命令:启用File System and Disk Utilities 组件(INCLUDE_DISK_UTIL),可在shell下用pwd/cd/ls等命令 (94)22 Error: image is larger than 524288 bytes (94)23 proxyArpDefaultOn()未定义解决方法? (95)24 如何将VxWorks的系统定时间隔或系统Ticks设置为1ms (95)25 read/write、fread/fwrite、fopen/open有什么区别 (96)26 快速启动 (100)27 启动时报ATA0a和硬盘启动相关问题 (100)28 如何安装USB2.2新版本及编译USB驱动? (101)29 WindML、图形界面相关问题 (102)29.1 WindML,ugldemo出错? (102)29.2 5101 VxWorks黑屏问题? (102)29.3 添加ugldemo.c后,编译报undefined reference to “ugltextdraw”错误一大堆? (103)29.4 WindML 中文字库显示? (103)30 VxWork6.8相关问题 (105)30.1 ELF和bin文件的区别? (105)30.2 diab和GNU的区别? (106)31 No such file or directory错误? (108)专业术语:WTX协议:(Wind River Tool eXchange): 用于开发机内部Tornado工具与Target Server 之间通信.WDB协议:(Wind DeBug): 用于主机Target Server与目标机之间的通信.1基于硬盘启动的Vxworks环境搭建VxWorks操作系统是美国WindRiver公司于1983年设计开发的一种嵌入式实时操作系统(RTOS)。
vxwork调试笔记
Vxworks的应用程序一方面可以和内核集成在一起进行调试,另外一个方面也可以将应用程序和内核分开来进行调试,当应用程序无误后再集成到内核中。
下面将详细介绍第二种调试方法,这种方法调试最方便。
使用这种方法可以不用每次都将应用程序写好,然后和内核一起编译下载到目标机中,只需动态的向目标机中加载应用程序的.o文件即可以对其进行调试,加快了开发的速度。
要想将应用程序和内核分开来进行开发调试,首先必须有一个可以稳定运行VxWorks 内核,这里可以使用以前做好了的BSP来生成内核。
首先将这个可执行代码下载到目标系统或烧写到目标系统中,将VxWorks内核运行起来,接下来的工作就是配置Tornado。
笔者在调试之前使用的是公司已经移植好了VxWorks 操作系统的平台进行调试的。
调试之前必须保证你的目标机已经上电并通过网络或串口与宿主机相连,下载应用程序的目标代码之前先进行一些配置,按下图所示进行操作:(1)配置Target server当目标系统运行起来后,就可以通过选择Tools->Target Server->Config来新建一个配置,如下图(如果通过串口连接则选择wbdserial,如果是网络连接则选择wbdpc)注意图中画红线的地方,Target Server栏填入宿主机也就是PC机的IP地址,如我的电脑的IP地址为192.168.1.161Target Name/IP Address栏输入移植了Vxworks操作系统的目标机地址,如我调试的目标机的地址为172.96.88.34,设置完成后,点击Lauch按钮,启动Target Server 服务,启动之后,会弹出一个如下图所示的窗口。
(2)当目标系统运行起来,且Target Config也做了正确配置并启动了该配置,就可以在“Tornado Launch”工具条的第一栏选择目标系统,192.168.1.161@liuwei,注意图中画红色圈圈的地方,如下图:(3)编写测试程序代码,测试程序代码如下图所示,所做的功能就是创建两个任务,然后让这两个任务交替的去运行。
VxWorks 5.5 学习笔记
VxWorks 5.5开发指南学习笔记第一章VxWorks概述1.绪论VxWorks是一种嵌入式的实时操作系统,所谓嵌入式操作系统就是我们自己设计开发一块可以实现某种功能的板子,一般的功能板上都有一个cpu,嵌入式实施操作系统就是运行于这个cpu之上,使我们能够在板子上作相应得软件开发实现板子功能。
VxWorks支持32位的CPU,包括Intel公司的x86、Motorola公司的68k 和PowerPC、MIPS、ARM、Intel公司的i960、Hitachi公司的SH。
我们设计的这块板子通常没有软件的自开发能力,所以我们需要一台通用机来辅助开发,这台通用机可以是PC或工作站,我们称辅助我们软件开发的通用机为宿主机(Host),用户自己开发的板子为目标机(Target)。
宿主机上要有一个集成开发环境(IDE)来辅助我们的软件开发,这套集成开发环境可以运行在Windows95/NT 或 UNIX下,包括交叉编译器(Cross Compiler)和交叉调试器(Cross Debugger),所谓交叉编译器就是在宿主机上编译生成可以在目标机上运行的代码IMAGE,交叉调试器就是通过宿主机和目标机之间的某种耦合方式实现前后台调试。
我们称宿主机上的这套集成开发环境为Tornado,编译生成的目标机上的可执行代码IMAGE为VxWorks。
在系统安装的时候,集成调试环境和VxWorks的原材料(一些obj文件)都安装到宿主机上,编译生成的在目标机上运行的IMAGE内包含操作系统。
下面我们分别来介绍这两部分内容。
1.1IMAGE of VxWorks1.IMAGE的结构IMAGE可以分为三个层次四个部分,最底层是BSP,中间层是VxWorks其中包含WindKernel 和components两部分,最高层是应用实现层app。
1)BSPBSP是系统用来管理外设的部分,由两部分组成:初始化、驱动程序。
所谓初始化是指从系统上电复位开始直到wind kernel和usrRoot根任务启动的这段时间系统的执行过程。
vxWorks学习笔记
vxWorks学习笔记vxWorks 学习笔记vxWorks 学习笔记2006-07-20 11:141 .VxWorks 开发⽅式:交叉开发,即将开发分为主机(host)和⽬标机(target)两部分。
类似于dos 下 C 语⾔程序的开发。
合并开发的优点:简单缺点:资源消耗量⼤,CPU ⽀持,⾮标准体系的⽀持host (Tornado) target(vxWork) ⼩程序模块vxWorks 实际采⽤开发模式Tornado 提供:编辑,编译,调试,性能分析⼯具,是vxWorks 的开发⼯具vxWorks :⾯向对象可以剪裁的实际运⾏操作系统2. vxWorks 启动⽅式Rom ⽅式(vxWork_rom)vxWorks 直接烧⼊romRom 引导⽅式( bootrom+vxWorks )其中bootrom 烧⼊rom,vxWorks 可以通过从串⼝,⽹⼝,硬盘,flash 等下载!这⾥的bootrom 不是开发环境中的bootable,在开发环境⾥bootable指的是vxWorks , downloadable 指application3. 调试attach⽤来在多任务调试时将调试对象绑定到某个任务任务级调试( attach taskName) 单个任务的调试不会影响到其他任务的运⾏,主要⽤来调⽤户的应⽤程序。
全局断点:在调另⼀任务或本任务时,系统运⾏本任务断点,则停下。
各任务要配合使⽤。
任务断点:调本任务时,系统运⾏到本任务断点,则停下。
如果没有attach 到本任务,不起作⽤。
⼀次性断点:跑到⼀次之后⾃动删除。
系统级调试(attach system)把所有task和系统core、中断看成⼀个整体,可⽤于调试系统和中断。
对中断调试,如果不是系统级调试,⽆论是那种断点都不起作⽤!wdbAgent 不在调试范围内,当任务级调试时⼯作在中断⽅式,系统级调试⼯作在轮询⽅式。
!可是使⽤命令⾏⽅式的调试,参看crossWind 教程。
VxWorks 5.5 学习笔记
VxWorks 5.5开发指南学习笔记第一章VxWorks概述1.绪论VxWorks是一种嵌入式的实时操作系统,所谓嵌入式操作系统就是我们自己设计开发一块可以实现某种功能的板子,一般的功能板上都有一个cpu,嵌入式实施操作系统就是运行于这个cpu之上,使我们能够在板子上作相应得软件开发实现板子功能。
VxWorks支持32位的CPU,包括Intel公司的x86、Motorola公司的68k 和PowerPC、MIPS、ARM、Intel公司的i960、Hitachi公司的SH。
我们设计的这块板子通常没有软件的自开发能力,所以我们需要一台通用机来辅助开发,这台通用机可以是PC或工作站,我们称辅助我们软件开发的通用机为宿主机(Host),用户自己开发的板子为目标机(Target)。
宿主机上要有一个集成开发环境(IDE)来辅助我们的软件开发,这套集成开发环境可以运行在Windows95/NT 或 UNIX下,包括交叉编译器(Cross Compiler)和交叉调试器(Cross Debugger),所谓交叉编译器就是在宿主机上编译生成可以在目标机上运行的代码IMAGE,交叉调试器就是通过宿主机和目标机之间的某种耦合方式实现前后台调试。
我们称宿主机上的这套集成开发环境为Tornado,编译生成的目标机上的可执行代码IMAGE为VxWorks。
在系统安装的时候,集成调试环境和VxWorks的原材料(一些obj文件)都安装到宿主机上,编译生成的在目标机上运行的IMAGE内包含操作系统。
下面我们分别来介绍这两部分内容。
1.1IMAGE of VxWorks1.IMAGE的结构IMAGE可以分为三个层次四个部分,最底层是BSP,中间层是VxWorks其中包含WindKernel 和components两部分,最高层是应用实现层app。
1)BSPBSP是系统用来管理外设的部分,由两部分组成:初始化、驱动程序。
所谓初始化是指从系统上电复位开始直到wind kernel和usrRoot根任务启动的这段时间系统的执行过程。
学习笔记(RTRA,RTRD,MPC852T,VxWORKS)
logging 10.14.8.50
2、允许通向网管工作站的系统日志信息:
interface Ethernet 0
ip address 10.10.254.2 255.255.255.0
no ip proxy-arp
综上所述,优良的多天线技术将大幅提升频谱效率,降低每比特成本,有效提升用户体验,还可以提高覆盖,改善小区边缘用户的吞吐率,减少基站数目,降低建网及维护成本。因此,对于WiMAX等新一代无线通信系统,多天线技术的性能是决定WiMAX产品核心竞争力的重要因素之一。
从1999年起,华为就已开始了多天线技术的研究和探索。截至2007年底,华为在多天线技术领域共获得100多项核心专利。在WiMAX基站方面,目前已支持各种开环MIMO、上行4天线接收分集、上行CSM、下行4天线MIMO Beamforming等全套多天线解决方案,并处于业界领先水平。华为能够提供满足各种组网需求的系列化站型,包括宏基站、微基站、射频拉远分布式基站、Pico等,天线配置支持2T2R、2T4R和4T4R等种模式,以适应不同的应用场景,力求以尽可能低的成本实现灵活组网。华为将通过全套性能稳定的多天线产品和解决方案,为全球运营商提供低成本、高品质的服务。
下行开环MIMO
下行波束赋形(Beamforming)
MIMO Beamforming(简称MIMO-BF)技术
下行MIMO+BF
上行多天线接收分集
上行CSM(Collaborate Spatial Multiplex)
性能优势 :提升系统容量、改善网络覆盖、 降低建设和维护成本
interface Ethernet 0
VxWorks读书笔记
第二章VxWorks基础1 任务产生Table 2-3: Task Creation RoutinesCall Description …|taskSpawn( ) Spawn (create and activate) a new task. ; 》taskInit( ) Initialize a new task. 【&taskActivate( ) A ctivate an initialized task. ) (id = taskSpawn ( name, priority, options, stacksize, main, arg1, arg10 ),VxWorks 习惯用ID号为0的任务作为调用发出的任务阻塞,是指进程因某个事件不能使程序继续运行下去,如要对某I/O操作时!简单的说:阻塞,指进程在主存中并等待一个事件的完成在虚拟内存中,当主存中没有处于就绪状态的进程时操作系统就把被阻塞的进程换出到磁盘中的挂起队列,挂起的原来就差不多是这样,挂起需要和阻塞或就绪结合,简单的说,就是进程在辅存中并等待一个事件。
任务控制块(WIND_TCB)《多任务设计能随时打断正在执行着的任务,对内部和外部发生的事件在确定的时间里作出响应。
VxWorks实时Wind内核提供了基本的多任务环境。
从表面上来看,多个任务正在同时执行,实际上,系统内核根据某一调度策略让它们交替运行。
系统调度器使用任务控制块的数据结构(TCB)来管理任务调度功能。
任务控制块用来描述一个任务,每一任务都与一个TCB关联。
TCB包括了任务的当前状态、优先级、要等待的事件或资源、任务程序码的起始地址、初始堆栈指针等信息。
调度器在任务最初被激活时以及从休眠态重新被激活时,要用到这些信息,TCB使多个任务得以独立运行,如表1-1所示任务控制块TCB。
表1-1 任务控制块TCB为了便于调试,每个任务都有一个独一无二的字符串表示的名称,在任务被创建时由用户程序指定或者系统默认生成。
vxworks 笔记
vxworks 笔记目录1 安装 (2)2 调整 (2)3 vxWorks 简介 (2)3.1 目录树 (2)3.2 工具包 (3)3.3 交叉编译工具链 (3)3.4 BSP (3)3.5 project (4)3.6 Image (4)4 编译框架 (4)4.1 编译组成 (4)4.1.1 Makefile (4)4.1.2 defs.project (5)4.1.3 rules.project (5)4.2 编译过程 (5)4.2.1 生成.o文件 (5)4.2.2 生成partialImage.o文件 (6)4.2.3 生成vxworks image (6)5启动调试71安装Vxworks 有两张安装盘,安装有以下步骤:1)安装tornado 2.2.1使用第一张盘,注意安装时必须保证当前没有安装过tornado,如果安装过必须从注册表中清空所有的tornado;选择“Manual License”,即License手动安装2)安装BSP/Drivers第一张盘和第二张盘都用了,不知什么东西,也不懂3)安装License复制license.dat文件到某个位置,然后设置“系统环境变量”,指向这个文件license.dat,注意必须是“系统环境变量”,不能是“用户环境变量”这就是手动安装License 环节。
安装完成,tornada 被安装到D:\Tornada2.22调整本次任务是完成vxworks 环境下ppc 85xx系列的SDK发布环境,因此需要将之前准备好的ppc 85xx环境复制过来。
当时直接将以前开发人员的target、host目录直接复制过来覆盖即可,注意备份。
3vxWorks 简介3.1目录树下图为目录树结构,目前我们仅关注的是host、target两个;如果获取帮助可以直接查看docs 中的books.html即可。
3.2工具包编译vxworks 时使用gnu工具,包括make、grep等等,这些工具都是专门编译好的windows 程序,具体位置在host/x86-win32/bin/目录下,因此在使用脚本编译时必须将该目录包含到path环境变量中。
VxWorksTornado读书笔记1
VxWorksTornado读书笔记1VxWorks&Tornado读书笔记Reference:《VxWorks程序员指南》王金刚等. 清华大学出版社《VxWorks高级程序设计》李方敏. 清华大学出版社《VxWorks开发指南与T ornado实用手册》李方敏. 清华大学出版社第一章VxWorks操作系统介绍1.VxWorks中断响应程序(ISR)的上下文:ISR在一个专门的上下文中执行,是处于任务的上下文之外;每个任务都有自己的上下文,但是所有的ISR共享一个上下文,当中断嵌套时,对这个上下文的大小有一定的要求,在设计初要考虑这个问题。
2.上下文切换:context switch ,也叫task switch,是指CPU寄存器内容的切换,也就是任务切换。
每个任务都有自己的上下文,即拥有各自的CPU环境和系统资源(指任务被内核调度时所使用的资源)。
在任务切换时,任务的上下文保存在任务控制块(TCB)中。
我的理解:在任务运行时,运行时的一些相关信息,即上下文是保存在什么地方?应该是在系统运行时总的环境里。
比如说,CPU有一套寄存器,如果哪个任务运行,则这个任务的上下文就被保存到系统的这些寄存器中;如果有任务切换,系统将当前正在运行任务的上下文保存到这个任务的TCB中,然后从将要执行任务的TCB中取出它的上下文,放到系统的寄存器中。
3.上下文内容:任务的执行点,即任务的程序计数器;CPU中的寄存器;动态变量和函数调用所需的堆栈;一个延时定时器;一个时间片定时器;内核控制结构;信号句柄。
4.VxWorks操作系统内核:wind内核;一个操作系统分为核心态和用户态。
内核在核心态运行,为用户的应用程序服务。
5.任务创建的两种方式方式一:使用taskInit()函数创建任务,创建时处于挂起状态,必须激活这个创建的任务才能使其进入就绪状态;方式二:使用发起任务(spawning)的原语,调用一个函数就能创建并激活任务;删除任务:任务可以在任何一种状态被删除。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
vxWorks学习笔记vxWorks学习笔记2006-07-20 11:141.VxWorks开发方式:交叉开发,即将开发分为主机(host)和目标机(target)两部分。
类似于dos下C语言程序的开发。
合并开发的优点:简单缺点:资源消耗量大,CPU支持,非标准体系的支持host (Tornado) target(vxWork) 小程序模块vxWorks实际采用开发模式Tornado提供:编辑,编译,调试,性能分析工具,是vxWorks 的开发工具vxWorks:面向对象可以剪裁的实际运行操作系统2.vxWorks启动方式Rom方式(vxWork_rom)vxWorks直接烧入romRom引导方式(bootrom+vxWorks)其中bootrom烧入rom,vxWorks可以通过从串口,网口,硬盘,flash等下载!这里的bootrom不是开发环境中的bootable,在开发环境里bootable指的是vxWorks,downloadable指application3.调试attach用来在多任务调试时将调试对象绑定到某个任务任务级调试(attach taskName)单个任务的调试不会影响到其他任务的运行,主要用来调用户的应用程序。
全局断点:在调另一任务或本任务时,系统运行本任务断点,则停下。
各任务要配合使用。
任务断点:调本任务时,系统运行到本任务断点,则停下。
如果没有attach到本任务,不起作用。
一次性断点:跑到一次之后自动删除。
系统级调试(attach system)把所有task和系统core、中断看成一个整体,可用于调试系统和中断。
对中断调试,如果不是系统级调试,无论是那种断点都不起作用!wdbAgent不在调试范围内,当任务级调试时工作在中断方式,系统级调试工作在轮询方式。
!可是使用命令行方式的调试,参看crossWind教程。
4.调度优先级调度(无条件)时间片:同优先级,如果时间片没有打开,任务采取先到先运行,运行完毕在交出cpu,如果打开,则轮流使用cpu。
!死循环使比它优先级低的任务都不能运行。
5.任务间通讯信号量,全局变量,管道,signal,message queue,socket信号量:分互斥、同步(二进制)、计数三种。
其中互斥用于资源管理,禁止多任务同时共享内存。
它的优势是:速度快;同一任务如果已经take到,再次take还会成功。
!全局变量一定要有信号量保护。
Message queue:封装了全局变量和信号量,优势是:快;有很多操作项(send多recv少:消息可以排队,用priority_urgent 选项加到队列头。
send少recv多:取的时候支持fifo和优先级,即有消息到达时给高优先级任务还是先被recv阻塞的任务)signal:紧急通信机制,仅次于中断,依赖于系统调度,不依赖时间片(中断依赖于硬件时间),因此signal又称为软中断。
!exeption:内部中断,属于硬中断(例如除法出错)。
它与signal的关系如下图:taskA taskB 软中断处理signal taskC taskB User’s tasks exception signal 软中断处理Exception中断处理历程1.查TCB(task control block),得到正在执行的任务信息2.如果注册了这个signal,则挂起任务3.打印exception号,pc 指针,reg值4.如果注册了这个signal,给任务发signal 6.内存分配在config.h中由宏定义指定。
user_reserved mem (保存热启动时的一些参数) System Memory pool Wdb poll vxWorks Memory的最终布局LOCAL_MEM_LOCAL_ADRSRAM_LOW_ADRSFREE_RAM_ADRS WDB_POOL_SIZE sysMemTop() sysPhyMemTop() Bootrom {romInit() romStart()}Bootrom {usrInit() usrRoot()} VxWorks ROM RAMROM_SIZEROM_BASE_SIZEROM_TEXT_ADRSRAM_HIG H_ADRSRAM_LOW_ADRS启动时的ROM和RAM布局!bootrom中的内存驱动在config/scr/drv/mem下,直接include *.c就可以使用其中的函数。
对于flash必须在config.h中加上类型的定义,换flash芯片在flash***.h中修改控制字等宏定义。
7.中断中断分三层含义:中断引脚号(或从中断控制器得到)(interrupt level)***_LEVEL中断号(interrupt number)INT_VEC_GET(***_LEVEL)中断向量(对x86是中断号*4)(interrupt vector)INUM_TO_IVEC(INT_VEC_GET(***_LEVEL)!中断处理程序和中断向量必须connect再enable后才能被激活,对x86使用sysIntEnablePIC(),对MIPS,ARM,PPC 等使用intEnable()。
!中断中不能含有会使中断阻塞的函数接口。
(例如printf就不行,使用logMsg)8.TimervxWorks使用3个timer,分别用于系统时钟,辅助时钟和时标。
Timer0:用于系统时钟(system clock),可用sysClkRateSet()改变速率,默认值时60次/秒。
!vxWorks下的watchdog基于timer0,因为是在interrupt尺度,使用必须谨慎,否则会降低系统效率。
Timer1:用于辅助时钟(auxiliary clock),在bsp.h中定义了最大速率,最小速率和实际速率初始值。
可用sysAuxClkRateSet()改变速度。
用sysAuxClkConnect()定义辅助时钟的定时任务。
Timer2:用于时标(timestamp)。
从系统开始运行时就一直递增,可以用来获得系统运行时间,在windview工具中被使用。
用户程序也可以通过sysTimestamp()得到运行时间。
9.*.o,*.out,vxWorks一个板子跑起来之后可以有多个*.o和*.out(类似于window 下的应用程序)和有且仅有一个的vxWorks(类似于window 操作系统),但这些*.o和*.out的编译必须和vxWorks基于同一种cpu。
!bootrom在启动时被部分复制到ram里在运行,这一部分将下载vxWorks到ram,然后跳转到vxWorks入口处运行,然后vxWorks将这一部分的bootrom重新划分到系统池。
10.符号表(symbol table)符号表就是一个数组,定义了函数和全局变量跟他们的地址的对应关系,默认情况下符号表放在主机上,如果定义了standalone symbol table,则目标机上也有一份符号表,一般与target shell绑定使用。
11.一些配置pci的配置默认使用自动配置,如果要手工配置,必须定义pci configuration键盘和显示器的驱动归入串口部分,默认输入输出是显示器和键盘,可以重定向到串口。
12.使用watchdog产生周期性调用例程主程序:watchdog(func,param,tick)被watchdog调用的程序:func(param){watchdog(func,param,tick);……}13.任务切换速度:us量级,Cache关闭时上升到10us量级。
例如对于x86,233Mhz,cache打开,中断响应典型值3.5us。
其中c function挂接0.7us,中断推出+task重调度2.5us14.tornado文件结构用户主要需要目录:tornado/host:tcl控制语句、主机上运行的exetornado/docs:帮助文件,其中的books.html提供总览tornado/target:头文件,库文件,bsp修改bsp主要修改target目录下的文件,bsp的修改影响到bootrom和vxworks两部分,下面介绍的是使用工程方法建立的bootrom和vxWorks.15.bootrom的启动顺序和源码位置函数:romInit ?? romStart ?? usrRoot ?? CMDLoop文件:其中bootInit.c和bootConfig.c会用到sysLib.c中的一些函数,这些函数使一些通用接口,它们调用scr/config(简称S/C)下的usr***.c和scr/drv/(简称DD)下的一些程序。
DD下面的就是device driver,它们的链接方式有两种:被bootConfig.c和sysLib.c等直接#include目录下自带makefile,用cmd命令在目录下键入make,函数进入系统库usr***.c:配合宏使用的链结方式,直接#include!如果修改含有makefile文件的目录下的*.c文件,必须重新make,否则系统库没有更新。
!特殊修改推荐将文件拷到bsp目录下,加入工程或者#include!如果设备供应商只提供*a或*.o而不提供源码,那么在makefile中加入LIB_EXTRA=**.a或MACH_EXTRA=**.o。
*.o是无条件链接,而*.a库是有条件链接,只有在用到了库中的函数接口时,才会被链接。
16.vxWorks启动顺序和源码位置函数:sysInit ?? usrInit ?? usrRoot ?? usrAppInit文件:prjConfig.c引用usr***.c,目录是target/config/comps/src(简称C/S,!不是bootrom调用的同名函数)图形界面下的初始配置来自bsp的config.h和makefile,在工程建立的时候系统会自动完成此工作,编译使系统会根据图形界面下的配置自动生成prjparam.h和prjComps.h来保存选中的组件和配置参数。
此后配置的改动将通过prjConfig.c和这两个.h文件反映,再修改config.h不会对vxWorks的生成起作用。
对上面三个文件的手工修改也会被系统自动覆盖。
系统同时还在usrProj下自动生成makefile,同样不能通过对文件的直接修改达到更新目的。
17.vxWorks的数据分类Text 常数Data 函数体外部被初始化了的变量(包括只能在本文件内使用的LOCAL型变量)Bss 函数体外部没有被初始化的变量,拷贝vxWorks使不需要被拷贝,系统划出一定空间后统一置为零。