VxWorks常用的命令
1.与任务相关的命令 sp function,[arg1],...,[arg9] -启动任务,最多接受9个参数,默认的优先级100、堆栈20000字节 period n,function,[arg1],...,[arg8] -创建一个周期调用function的任务,周期为n秒,最多接受8个参数 repeat m,function,[arg1],...,[arg8] -创建一个反复调用function的任务,调用次数为m,m=0时永久调用,最多也是8个参数 ts tidX -挂起任务 tr tidX -恢复挂起的任务 td tidX -删除任务 i tidX -显示任务基本信息,参数为0时显示全部任务 ti tidX -显示任务详细信息,包括寄存器、堆栈等 tt tidX -显示任务的函数调用关系 checkStack tidX -显示任务堆栈使用的历史统计,参数为0时显示全部任务 [其中tidX可以为任务ID 也可以为任务名] 2、系统信息 lkup ["string"] -在系统符号表中查并列出含有"string"字符的函数及全局变量,有两个特殊参数: 0,给出符号表统计;""(空字符串),列出全部符号 lkAddr addr -显示addr地址附近的符号表 l addr,[n] -显示addr地址开始的n条指令的反汇编,n省略时默认为10条指令 h [n] -n为0时列出最近执行的shell命令,默认20条;n非0时,设定shell记录的历史命令的数目 d [addr,[number],[width]] -显示addr地址开始的number个单元的内容,width定制每个单元的宽度,可以是1、2、4、8 m addr,[width] -按width宽度修改addr地址的内容,width可以是1、2、4、8 memShow 1 -显示系统分区上空闲和已分配空间的总数等 printErrno value -打印系统定义的错误码的宏 3、与网络相关的命令 ifShow ["ifname"] - show info about network interfaces inetstatShow - show all Internet protocol sockets tcpstatShow - show statistics for TCP udpstatShow - show statistics for UDP ipstatShow - show statistics for IP icmpstatShow - show statistics for ICMP arpShow - show a list of known ARP entries mbufShow - show network stack data pool statistics netStackSysPoolShow - show network stack system pool statistics routeShow - display all IP routes (summary information) mRouteShow - display all IP routes (verbose information) routestatShow - display routing statistics routeAdd "destaddr","gateaddr" - add route to route table routeDelete "destaddr","gateaddr" - delete route from route table 说明:上述大多数命令都可以在help、netHelp中查到 |
vxWorks命令规则:名词+动词,第二个单词开始大写 | |||
序号 | 状态 | 命令 | 备注 |
1 | BSP | c | 改变配置 |
2 | BSP | p | 打印当前配置信息 |
3 | BSP | @ | 开始加载内核 |
4 | BSP | ctrl+x | 重新启动 |
5 | BSP | ||
6 | BSP | ||
7 | vxWorks | i | 查看进程 |
8 | vxWorks | ifShow | 查看当前网络设置 |
9 | vxWorks | devs | 查看所有的设备 |
10 | vxWorks | cd "/xxx/" | 进入目录 |
11 | vxWorks | cfIdeInit | 每次上电后执行 |
12 | vxWorks | cfFormat | 新卡(或者是未格式化的卡)插入的时候执行,只需执行一次 |
13 | vxWorks | ll | 以详细模式查看当前目录下的文件 |
14 | vxWorks | ls | 以简单模式查看当前目录下的文件 |
15 | vxWorks | version | 查看编译时间 |
16 | vxWorks | td xxx | 终止xxx进程 |
17 | vxWorks | help | 帮助 |
18 | vxWorks | tffsShow | 查看tffs的相关信息 |
19 | vxWorks | tffsDevFormat | 格式化tffs文件系统 |
20 | vxWorks | showTime | 查看系统时间 |
21 | vxWorks | usrTffsConfig(0,0,"/tffs0") | 新增一个tffs格式的文件系统 |
22 | vxWorks | pwd | 查看当前操作所在的目录路径 |
23 | vxWorks | ping "",10,0 | ping地址,共计10次 |
24 | vxWorks | pciDeviceShow | 查看当前系统中的所有PCI设备 |
25 | vxWorks | pciHeaderShow,0,xx | 查看当前系统中的组号为0、地址号为xx的PCI设备 |
VxWorks任务追踪实例分析
VxWorks中如果稍有不慎,就可能导致task suspend,如果运气好,shell没有被挂起,则可以通过系统的一些命令追踪一下挂起的原因。其中用到的主要命令是i、tt、ti、d等。
首先从出错信息开始:
0xfc8125b8 (t_Lcd): memPartFree: invalid block 0xfdfc6f38 in partition 0xfe508894.
由于memPartFree了一个非法的内存块,导致了任务挂起,我们需要确定到底是哪条语句导致了这个异常的产生,可能是什么原因引起的。
首先,需要通过“i”命令察看任务状态:
-> i
NAME ENTRY TID PRI STATUS PC SP ERRNO DELAY
---------- ------------ -------- --- ---------- -------- -------- ------- -----
tExcTask excTask fdffec80 0 PEND fe3c5f50 fdffeb60 3006b 0
tLogTask logTask fdffc298 0 PEND fe3c5f50 fdffc188 0 0
tShell shell fdf5fa48 1 READY fe1f3afc fdf5f628 0 0
……
t_Lcd fe392a30 fc8125b8 100 SUSPEND fe1f24b0 fc8120b8 d0003 0
……
可以看到任务t_Lcd的状态为SUSPEND,即被挂起的状态。其他各项的含义都比较清楚,ENTRY是任务的入口函数,如果没有symbol,则直接显示地址,TID是任务的ID号,一般用任务的栈底地址表示,PC是当前的指令位置,SP是当前栈顶位置。
然后通过”tt”来追溯函数调用过程:
-> tt "t_Lcd"
汇编指令汇总fe3c14f4 vxTaskEntry +68 : fe392a30 ()
fe392b48 initLcdComponent+2e8: fe392bdc ()
fe392bec initLcdComponent+38c: fe392bfc ()
fe39333c initLcdComponent+adc: lcdShowPassWord ()
fe398590 lcdShowPassWord+84 : saveModifiedSetting ()
fe3a3790 saveModifiedSetting+220: saveSettingValue (1)
fe1fd6d0 saveSettingValue+148: fe1fc428 (0, 5, ffffffff)
fe1fc888 getDeviceSettingValue+64c: fclose ()
fe1aab48 fclose +ec : free ()
fe1bb7d4 free +1c : memPartFree ()
fe1bb2dc memPartFree +148: taskSuspend ()
我们可以了解到函数的调用过程,vxTaskEntry()?->fe392a30()->fe392bdc ()->fe392bfc ()->lcdShowPassWord ()->saveModifiedSetting ()->saveSettingValue (1)->fe1fc428 (0, 5, ffffffff)->fclose ()->free ()->memPartFree ()->taskSuspend ()。
其他相关信息:
第一栏是发生跳转(即函数调用)后的返回地址,稍后会作详细解释,
第二栏是离返回地址最近的symbol和偏移量,一般情况下会是发 起调用的那个函数的名称,除非该函数是内部函数,系统中没有symbol,
第三栏是被调用的函数。
再来查看一下t_Lcd任务的栈里的内容,从前面的任务信息里已经得知当前栈顶位置为fc8120b8,通过“d”命令显示该地址的内容。
-> d 0xfc8120b0
fc8120b0: fc81 25b8 fc81 25b8 fc81 20c8 fe1f 24b0 *..%...%... ...$.*
fc8120c0: fe50 8894 fdfc 6f30 fc81 20e8 fe1b b2dc *.P....o0.. .....*
fc8120d0: fdf2 6b08 0000 0100 0000 000c 0000 0000 *..k.............*
fc8120e0: 0000 0000 fdf1 ed80 fc81 20f8 fe1b b7d4 *.......... .....*
fc8120f0: fd9a 3538 fdf1 ed80 fc81 2108 fe1a ab48 *..58......!....H*
fc812100: fd9a 3538 fc81 2108 fc81 2238 fe1f c888 *..58..!..."8....*
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论