VxWorks 6.3 编程调试要点

2018-12-17 13:07

杭州ECI通讯 文 档 编 号 产品版本 V 1.0 密级 公开 共 页 产品名称: VxWorks 6.3 编程调试要点

VxWorks 6.3 编程调试要点

(仅供内部使用)

文 档 作 者:

周礼兵

日期:2007-03-05 日期:___/___/___ 日期:___/___/___

开发/测试经理: _______________ 项 目 经 理: _______________

版权所有 不得复制

VxWorks 6.3 编程调试要点

目 录

目 录 ....................................................................................................................................................................2

1 2

系统特点 .................................................................................................................................................3 编程调试 .................................................................................................................................................3 2 .1

应用程序的运行 .................................................................................................................3 2 .1.1 2 .1.2 2 .1.3 2 .2 2 .3 2 .4

Shell 下运行 ..............................................................................................................3 自启动运行.................................................................................................................4 通过workbench运行 ...............................................................................................4

内核模块的运行 .................................................................................................................4 ROMFS .................................................................................................................................4 应用程序的系统调用 ........................................................................................................5 2 .4.1 2 .4.2 2 .4.3

系统调用的一些约束 ...............................................................................................5 静态的增加系统调用函数 ......................................................................................5 动态的增加系统调用函数 ......................................................................................6

2 .5 2 .6

共享数据区域......................................................................................................................7 动态库 ...................................................................................................................................7 2 .6.1 2 .6.2

共享库(Shared Libraries) ...................................................................................7 Plug-ins ........................................................................................................................7

2 .7 多任务 ...................................................................................................................................8 2 .7.1 2 .7.2 2 .7.3 2 .7.4

任务变量(Task Variables)..................................................................................8 VxWorks task .............................................................................................................8 POSIX Threads...........................................................................................................8 任务调度 .....................................................................................................................8

2 .8 信号量 ...................................................................................................................................8 2 .8.1 2 .8.2

VxWorks semaphores................................................................................................8 POSIX Semaphores ...................................................................................................8

2 .9 消息队列...............................................................................................................................8 2 .9.1 2 .9.2

VxWorks Message Queues.......................................................................................8 POSIX Message Queues ...........................................................................................8

2 .10 2 .11 2 .12 2 .13 2 .14

Sockets...................................................................................................................................8 Pipes.......................................................................................................................................9 VxWorks events...................................................................................................................9 POSIX Queued Signals ......................................................................................................9 内存管理...............................................................................................................................9

仅供内部使用

2

VxWorks 6.3 编程调试要点

2 .15 3

Shell 解析器........................................................................................................................9

设计要点 ...............................................................................................................................................10

参考文档 ..................................................................................................................................................................11

VxWorks 6.3 编程调试要点

关键词: 内核态、用户态、消息、信号、信号量、管道、任务、线程

缩略语说明:RTP(real-time process)、POSIX(Portable Operating System UNIX)、MMU(Memory Management Unit)

1 系统特点

VxWorks 6.3除了兼容以前低版本(如:VxWorks 5.5)内核外,增加一些其它的功能。其中最明显的是引入了用户态的应用程序及POSIX的一些特性功能(如线程、线程调度、互斥锁、信号量、消息等),这样就有内核态和用户态之分。内核模块是运行在内核态的,应用程序是运行在用户态的。

这里所指的应用程序就是VxWorks RTPs(real-time processes),与Unix、Linux的应用程序有相似性,它在用户态下运行,当被加载到内存运行时,每个RTP都会被分配不同的虚拟的地址空间,包括代码段、数据段、及堆栈等。当启用MMU时,各应用程序之间及与内核之间是不能随意互相访问的(注:如果是simulate 内核的调试的话,MMU组件是不支持区分超级用户和普通用户的,应用程序可以访问内核的内存空间,这样子的话,内核的任务有可能被应用程序的任务破坏),如果需要进行数据传递,则可通过消息、管道、信号、共享内存、SOCKET等。应用程序还可通过系统调用来提升操作权限,如操作内核或配置硬件资源等。应用程序间可以动态的调用共享库的函数来执行,但要注意共享库的函数可重入性。

引用POSIX的一些特性功能主要为了方面从POSIX中移植程序及增强系统功能。

2 编程调试

本文的大部分调试过程是通过wind river workbench2.5开发环境进行的,该环境与以前的Tornado5.5虽然有一定的差别,但基本原理是相似的。具体应用可以参考文档《wr_workbench_vxworks_users_guide_2.5.pdf》。 2 .1应用程序的运行 2 .1.1Shell 下运行

?

使用C解析器:

如:rtpSp \

仅供内部使用

3

VxWorks 6.3 编程调试要点

first second third\ 对应的可以用kill( ) 或者 rtpDelete( )来终止运行。 提示符: -> 一般为C解析器

可用shConfig \来切换到command解析器下 ?

使用shell command解析器:

如:rtp exec host:c:/myInstallDir/vxworks-6.1/target/usr/root/PPC32diab/bin/myVxApp.vxe first second third 对应的可以用rtp delete、kill、rtpd shell命令来终止运行,如果运行在前台的话,还可用CTRL+C来终止运行。(后台运行可在rtp exec命令后或应用程序名后加&)。

如:rtp exec host:c:/myInstallDir/vxworks-6.1/target/usr/root/PPC32diab/bin/myVxApp.vxe first second third &

提示符: [vxWorks]# 一般为C解析器

可用set config INTERPRETER=C 来切换到C解析器下

2 .1.2自启动运行

?

通过脚本运行,需在RTP Startup Facility定义

如:在NAME为RTP_APPL_CMD_SCRIPT_FILE的Value栏里加入\(目的是为了执行romfs里的脚本VxScript) VxScript脚本内容示意:

rtpSp \rtpSp \ ?

通过字符串解析运行,需在RTP Startup Facility定义 如:在

NAME

RTP_APPL_INIT_STRING

Value

栏里加入

\(目的是为了执行romfs里的应用程序RtpTest1.vxe及RTPTest2.vxe #号为多个应用程序的分隔符)

2 .1.3通过workbench运行

可以通过workbench连接到目标板上,然后选中已编译好的vxe文件点击右键选择 Run RTP on Target就s可以运行了。 2 .2内核模块的运行

与VxWorks5.5类似。

2 .3ROMFS

VxWorks的一种只读文件系统,一般是用作把应用程序、脚本文件、共享库等打包在ROMFS里并连同内核一起编译成VxWorks Image文件。当内核运行时,通过devs命令看到设备描述符 /romfs。可以通过read或fread来读取内容。

创建ROMFS可以通过workbench来创建,把ROMFS工程当作是内核Image工程的子

工程。也可通过命令行手动配置,如: 1) 2)

cd c:\\myInstallDir\\vxworks-6.1\\target\\proj\\wrSbc8260_diab mkdir romfs

仅供内部使用

4

VxWorks 6.3 编程调试要点

3) 4)

copy c:\\allMyVxApps\\myVxApp.vxe romfs make TOOL=diab

如果不想在内核工程目录下创建romfs目录,可以在其它地方创建,但在make内核时,必须指明romfs的目录,如:

make TOOL=diab ROMFS_DIR=\2 .4应用程序的系统调用

VxWorks6.3 的内核态和用户态有不同的指令集及MMU设置,应用程序是运行在用户态的。只要MMU打开的时候,它是不能直接调用系统函数或数据结构。为了解决这种情况,系统调用可以为应用程序提供一种优先级比较高的操作,如操作内核或配置硬件资源等。所有可用的系统调用函数(包括自定义的系统调用函数)都可以通过syscall.h来查询。 2 .4.1系统调用的一些约束

1) 2)

可自定义的组号为2到7,每一系统调用组最多可有64个函数

函数参数最多只支持8个32位的参数(32位体系结构的CPU),如果是64位的参数则需要按两个32参数来计算,不支持浮点或中断向量类型的参数,如果多于8个参数则需通过结构来定义参数。 3)

函数返回值为32位(32位体系结构的CPU),如果是64位的话则需通过get64BitValue来获取。 4)

系统调用处理函数的命名必须和系统调用函数命名一致,然后追加Sc,例如系统调用函数名为user0SysCallFunc0,则系统调用处理函数必须命名为user0SysCallFunc0Sc 5)

系统调用处理函数的参数只能为一个指向某种结构类型的指针,必须把系统函数的所有参数定义成结构,且结构命名为系统调用处理函数名+Args,如:

struct user0SysCallFunc0Sc { }

6)

建议在系统调用处理函数中使用scMemValidate函数来验证应用程序传递过来参数的可访问性,如指针所指向的内容是否可访问。

2 .4.2静态的增加系统调用函数

1)

增加系统调用组

在文件syscallUsrNum.def(在目录VxWorks6.3\\share\\h里,如果没有则需要在此目录新建一个)里增加,内容示意如下: SYSCALL_GROUP SCG_USER0 2 INCLUDE_USER_SYSCALL 0 user0SysCallFunc0 1 user0SysCallFunc1 2 user0SysCallFunc2 解释:

int a; int b; char *c; ……

仅供内部使用

5


VxWorks 6.3 编程调试要点.doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:单元板块制作作业指导书

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: