程序员人生 网站导航

VxWorks操作系统shell命令与调试方法总结

栏目:互联网时间:2014-09-24 06:27:22


VxWorks下的调试手段

主要介绍在Tornado集成开发环境下的调试方法,和利用支撑定位问题的步骤、思路。

1         Tornado的调试工具

嵌入式实时操作系统VxWorks和集成开发环境Tornado的组成结构如下图1。分为主机和目标机系统。

图1 集成开发环境结构图

在Tornado下,调试相关操作在Debug菜单下,包括:

图2 Debug菜单

简单解释各菜单项的功能

1.1        WindShell

1.1.1         简介

Vxworks的Shell分为两种:hostshell 和 target shell;

Tornado提供的WindShell建立了2者间的一个桥梁,从宿主机到目标机之间的一个命令 shell。WindSh 是一种非常受欢迎的开发工具,它具有很强的交互性和可操作性,允许用户调用内存中的应用程序模块或是 VxWorks模块中的任何例程。它不但具有一般命令语言的功能,而且也具有 C 语言的设计特点,能够解释几乎任何 C 语言表达式, 执行大多数 C 语言算子,解析符号表数据。对初用者来说,WindSh学习起来比较简单,使用比较方便,对熟练用户而言,则有较为高级的手段可以应用。

WindSh是一个驻留在主机内的C语言解释器,通过它可运行下载到目标机上的所有函数,包括VxWorks系统调用和应用函数。Tornado外壳还能解释常规的工具命令语言TCL。

WindSh不仅可以解释几乎所有的C语言表达式,而且可以实现所有的调试功能。它主要有以下调试功能:下载软件模块;删除软件模块;产生任务;删除任务;设置断点;删除断点;运行、单步、继续执行程序;查看内存、寄存器、变量;修改内存、寄存器、变量;查看任务列表、内存使用情况、CPU利用率;查看特定的对象(任务、信号量、消息队列、内存分区、类);复位目标机等。

1.1.2         功能键

Tab

    补齐剩余部分

Ctrl+D 

l  显示与之匹配的所有符号

-> CurM^D

_CurMaster  _CurModule  

l  补齐剩余部分: 

->CurMo^D

->CurModule

l  显示命令摘要

->moduleShow ^D

moduleShow() - show the current status for all theloaded modules (WindSh)

STATUS moduleShow

    (

    char *moduleNameOrId /* name or ID of the module to show */

)

Ctrl+W

键入完整的命令后,继续键入空格+ [Ctrl+W]。将会显示html页帮助信息.

Ctrl+H

   删除一字符

Ctrl+U

   删除一行

CTRL+C

   重起shell

CTRL+X

   Reboot

CTRL+S

   临时挂起输出

CTRL+Q

   恢复挂起

Esc   

在输入和编辑模式间切换

输入类似Vi编辑命令, 如[Esc + k]:显示前一次输入的命令

        h←j↓k↑l→

h()设置命令缓冲区长度。->h 500

 

1.1.3         特殊控制符

?

   C和TCL模式转换符号, 在c模式下敲?进入tcl模式, 在tcl下敲?则进入c模式;

@

       在target还是在host上运行, 在指令前加上@则在target上运行, 否则在host上运行

       指令输出重定向

指令输入重定向

1.1.4         计算功能

数据转换:键入整数或字符后回车可以显示该整数的十进制及十六进制值。也可以键入字符常量或符号地址。

比如:

->0x54+64

value = 148 = 0x94

->x = (8 * 6) / 4

x = 0x20ff378: value = 12 = 0xc

->Nom = “Nelson”

new symbol “Nom” added to symbol table.

Nom = 0x23fe798: value = 37742496 = 0x23fe7a0 =

Nom + 0x8

 

1.1.5         环境变量

使用 ?shConfig 命令修改环境变量:

SH_GET_TASK_IO

    为调用函数设置I/O重定向。ON:重定向到WindSh;OFF:I/O显示到目标机控制台。

LD_PATH

为模块设置搜索路径,用“;”隔开。 例如:ld 命令提交后,Shell搜寻模块的路径顺序为:首先在当前目录,然后到LD_PATH设置的路径。

LD_SEND_MODULES

设置load模式。

以下3个用不到

LD_CALL_XTORS

LD_COMMON_MATCH_ALL

DSM_HEX_MOD

1.1.6         内置指令

1.1.6.1        所有内置指令

tcl> setshellProcList

b bh bd bdall ccret e s so sysResume sysSuspend d l ld lkAddr lkup m mRegs unld agentMode Showbrowse checkStack classShow devs i intVecShow iStrict iosDevShow iosDrvShowiosFdShow memPartShow memShow moduleIdFigure moduleShow mqPxShow mqShowmsgQShow rBuffShow semPxSho w semShow show smMemPartShow smMemShowsysStatusShow taskShow trgShow version wdShow sp sp s taskIdDefaulttaskIdFigure td ti tr ts tt bootChange cd h help ls period printErrno printLogo pwd quit reboot repeat shellHistory shellPromptSet cplusXtorSetcplusStratShow cplus Ctors cplusDtors wvHostInfoShow evtBufferToFile hostShowicmpstatShow ifShow inetstatShow ipstatShow routestatShow taskCreateHookShowtaskDeleteHookShow taskSwitchHookShow taskRegs Show tw w taskWaitShowtcpstatShow tftpInfoShow udpstatShow

 

1.1.6.2        任务管理

sp

用缺省参数创建一个任务(priority=100 返回值为任务ID,或错误),立刻返回。任务的I/O不被重定向到shell。

如果直接敲例程名,回车,执行完才返回。I/O被重定向。

sps

与上者不同在于启动该任务后马上将其挂起

tr

恢复一个挂起的任务

ts

挂起一个任务

td

删除一个任务

period

创建一个周期调用函数的任务

period 5testPrn   每隔5秒调用testPrn,易于做调试打印。

repeat

创建一个重复调用函数的任务

repeat 10testFunc1   连续执行10次testFunc1函数,易于做测试用。

mRegs

修改任务的寄存器变量。比较有用的是修改pc值,使程序退回到具体位置再运行。      程序位置可以使用shift+F7(混合汇编方式显示代码)

-> mRegs"pc", s1u0

pc     : 0499efd7 - 0x499efd1

1.1.6.3        任务状态信息

i   显示系统信息:

  NAME     ENTRY      TID    PRI   STATUS     PC       SP     ERRNO DELAY

---------------------- -------- --- ---------- -------- -------- ------- -----

tExcTask   _excTask     4b79170   0 PEND         4276be 4b7908c   d0003     0

iStrict  类似于i,但只查询目标机一次

 

ti  显示相应任务的TCB信息:

-> ti tWdbTask

NAME    ENTRY       TID    PRI  STATUS      PC       SP    ERRNO  DELAY

---------------------- -------- --- ---------- -------- -------- ------- -----

tWdbTask  0x417cc4     4b70c08   3 READY        4276be 4b70ae4   d0003     0

stack: base 0x4b70c08  end 0x4b6ccc8 size 16176   high 3840   margin 12336

options: 0xe

VX_UNBREAKABLE VX_DEALLOC_STACK VX_FP_TASK

edi   = ffffffff   esi    = 4b70fb8   ebp    = 4b70aec   esp   =  4b70ae4

ebx   =        0   edx   =   4276be   ecx   =    10101   eax   =        0

eflags =     212   pc     =  4276be

taskShow

显示任务TCB信息, 基本同ti

taskCreateHookShow

显示任务创建调用例程列表

_fppCreateHook 0x177008 

_envCreateHook 0x156954 

___wdbTaskCreat 0x114718 

taskDeleteHookShow

显示任务删除调用例程列表

taskSwitchHookShow

显示任务切换调用例程列表

_dbgTaskSwitch 0x180384 

_SwitchHook    0xde7b78 

w

显示所有或者一个挂起任务的信息

-> w s1u1

  NAME      ENTRY      TID      STATUS  DELAY  OBJ_TYPE   OBJ_ID  OBJ_NAME

-------------------- -------- ---------- ----- ---------- -------- ------------

s1u1      _t2         4b65898 PEND           0 SEM_M       4b7ea48 N/A

tw

显示某挂起任务的详细信息。

-> tw s1u1

NAME       ENTRY      TID     STATUS   DELAY  OBJ_TYPE  OBJ_ID   OBJ_NAME

---------- ---------- -------- ---------- ----- ---------- --------------------

s1u1       _t2         4b65898 PEND           0 SEM_M       4b7ea48 N/A       

 

Semaphore Id        : 0x4b7ea48

Semaphore Type      : MUTEX    

Task Queueing       : FIFO     

Pended Tasks        : 1        

State               : Owner=0x4b6c960

taskWaitShow

同tw

taskRegsShow

显示任务寄存器的内容

->taskRegsShow 0x1c615534 

edi   =        0  esi    = 1dd65514   ebp   = 1c61546c   esp    = 1c615458

ebx   =        1   edx   = 1dfccac8   ecx    =       7   eax    =       0

eflags =     246   pc     =  119604

CheckStack

显示一个任务的使用堆栈的情况,没有定义任务时显示所有

-> checkStack tWdbTask

  NAME        ENTRY        TID    SIZE   CUR  HIGH MARGIN

------------ ------------ -------- ----- ----- -----------

tWdbTask    0x417cc4      4b70c08 16176   292 3840  12336

tt

显示一个任务的调用状况,解析堆栈

    -> tt tShell

    地址        函数名         偏移      被调用函数(函数参数)

43ad37  _vxTaskEntry   +47 : _shell (1, 0,0, 0, 0, 0, 0, 0, 0, 0)

41c414  _shell         +13c: 41c438 ([1,0, 0, 0, 41c23c])

41c52e  _shell         +256: _ledRead(522efb8, 51e45e4, 80)

如果认为被挂起,可找出在哪个函数调用时失败。

taskIdFigure

报告任务的ID,以及名称

taskIdDefault

设置或者取得缺省的任务id

int taskIdDefault

(

int tid /* user-supplied task ID; if 0,return default */

)

taskPrioritySet

    实时改变任务运行的优先级

1.1.6.4        一组调试指令

d  

显示目标机内存, 可以替代内存观察;

如: d  0x12345, 128, 1         显示128个字节

          d 0x12345, 32,  4         显示32个DWORD

          m 0x12345, 128, 1

      m  0x12345, 32,  4

m

修改内存

void m
(
void * adrs, /* address to change */
int    width /* width of unit to be modified (1, 2, 4, 8) */

)

lkup

显示指定符号信息, 和以下指令使用可以找到该变量附近变量, 对于查找变量被更改很有益处

-> lkup "CurModule"

_CurModule               0x01fd3160 comm     (down.out)

-> lkup (“^_print”)

_printf   0x00029622 text (vxWorks)

_printErr 0x00029640 text (vxWorks)

_printExc 0x0002965e text (vxWorks)

value = 0 = 0x0

 

lkAddr

根据指定值搜索符号表,显示的符号地址小于并最接近指定值

-> lkAddr 0x01fd3160

_CurUnit                 0x01fd315c comm     (down.out)

_CurModule               0x01fd3160 comm     (down.out)

_IsFsStarted             0x01fd3164 comm     (down.out)

_IntTaskSemaphore        0x01fd3168 comm     (down.out)

_gtSemTaskTable          0x01fd316c comm     (down.out)

_tR04ModuleReportState   0x01fd3174 comm     (down.out)

l

显示从指定位置开始多少行的汇编

printError

将错误号翻译为具体错误信息。前16位错误号为:module 在vwModNum.h中定义,对应不同头文件。后16位错误号为:error number在相应的头文件中定义。

-> printErrno 0x110001

0x110001 = S_memLib_NOT_ENOUGH_MEMORY

ld

加载模块到系统

[syms[,noAbort][,"name"]]Load stdin, or file, into memory

  (syms = add symbols to table: -1 = none, 0 = globals, 1 = all)

unld

       卸载模块

reboot

       reset network devices and transfercontrol to boot ROMs  重起, 有些mp板不能执行;

bootChange

修改启动行参数

boot device     :  fei

processor number    :  0

host name       :  host

file name       :  vxWorks

inet on ethernet (e)    :  168.2.11.41:ffff0000

inet on backplane (b)   :  

host inet (h)       :  168.2.111.1

gateway inet (g)    :  

user (u)        :  x86

ftp password (pw) (blank = use rsh) :  x86

flags (f)       :  

target name (tn)    :  

startup script (s)  :  

other (o)

1.1.6.5        系统信息查看

devs

列出目标机系统上的所有设备, host:是指映象文件所在目录,有些上面为mars:

-> devs

drv name

  0 /null

  2 /pcConsole/0

  2 /pcConsole/1

  7 host:

  8 /vio

  9 /tgtsvr

  4 /HDisk

  3 prnpip

iosDevShow

基本同devs

iosDrvShow

显示系统中的驱动状态

drv    create    delete       open      close       read     write      ioctl

1    421db4          0    421db4     421ddc     42b76c    42b69c     421e08

2         0          0    424fd4          0     425004    425044     425130

3    426e88    426f04     427170     426e34    427228     427254     426ffc

4    415f40          0    415f40     416000     42b76c    42b69c     416074

5    41626c    41642c     416288     416520    4165d0     416670     416710

iosFdShow

显示系统中的文件标识符

fdname                 drv

3/tyCo/0                1

4/vio/1                  4

5/vio/2                  4

6/vio/3                  4

intVecShow

查看中断向量表,

void intVecShow

(

   int vector /* interrupt vector number or -1 to display the whole vectortable */

)

moduleShow

显示系统中所有加载的模块

MODULENAME  MODULE ID  GROUP #   TEXT START DATA START  BSS START

------------------------ -------------------- ---------- ---------- ----------

vxWorks.exe       0x365420          1  0x401000   0x43f000   0x442000

test.o             0xd32888          2  0x499efac   0x499eff4          

msgQShow

显示队列的使用状况

Message Queue Id   : 0x1c710c0c 

Task Queueing      : FIFO     

Message Byte Len   : 8        

Messages Max       : 4000     

Messages Queued    : 0        

Receivers Blocked  : 1        

Send Timeouts      : 0        

Receive Timeouts   : 709968   

SemShow

显示信号量的信息

STATUS semShow

    (

    SEM_ID semId,/* semaphore to display */

        int    level /* 0 = summary, 1 = details */

    )

->semShow NodeSemaphore ,0

Semaphore Id       : 0x1c7a443c 

Semaphore Type     : MUTEX    

Task Queueing      : FIFO     

Pended Tasks       : 0        

State              : NotOwned 

SemPxShow

显示POSIX信号量的信息

wdShow

显示看门狗的信息

mqPxShow

显示POSIX消息队列的信息

memPartShow

显示分区块及统计信息

memShow

显示系统分区上空闲和已分配空间的总数等等

SUMMARY:

 status  bytes    blocks   avg block max block

 ------ ----------------- ---------- ----------

current

   free  443257168     140    3166122 442697252

  alloc  27726464     517      53629        -

cumulative

  alloc  50636892    5873       8621        -

hostShow

显示host列表

hostname        inet address       aliases

--------        ------------       -------

vxTarget        168.2.11.9        

localhost       127.0.0.1         

host             168.2.111.1

arpShow

显示arp列表

LINK LEVEL ARP TABLE

destination     gateway            flags  Refcnt Use           Interface

--------------------------------------------------------------------------

168.2.111.1     00:05:5d:e4:14:3b    405    0      6897          fei0

--------------------------------------------------------------------------

ifShow

显示网口信息

fei (unit number 0):

    Flags:(0x8063) UP BROADCAST RUNNING ARP MULTICAST

    Type:ETHERNET_CSMACD

    Internetaddress: 168.2.11.9

    Broadcastaddress:   168.2.255.255

    Netmask0xffff0000 Subnetmask 0xffff0000

    Ethernetaddress is 00:d0:d0:10:0b:09

    Metric is 0

    MaximumTransfer Unit size is 1500

    11325 packetsreceived; 6965 packets sent

    4374 multicastpackets received

    11 multicastpackets sent

    0 inputerrors; 0 output errors

    0 collisions;0 dropped

lo (unit number 0):

    Flags:(0x8069) UP LOOPBACK RUNNING ARP MULTICAST

    Type:SOFTWARE_LOOPBACK

    Internetaddress: 127.0.0.1

    Netmask0xff000000 Subnetmask 0xff000000

    Metric is 0

    MaximumTransfer Unit size is 32768

    0 packetsreceived; 0 packets sent

    0 multicastpackets received

    0 multicastpackets sent

    0 inputerrors; 0 output errors

    0 collisions;0 dropped

ipstatShow

显示ip信息

               total 7571

             badsum    0

           tooshort    0

           toosmall    0

            badhlen    0

             badlen    0

        infragments    0

        fragdropped    0

        fragtimeout    0

            forward    0

        cantforward    0

       redirectsent    0

    unknownprotocol 6996

          nobuffers    0

        reassembled    0

       outfragments    0

            noroute    0

icmpstatShow

显示icmp信息

ICMP:

    7060 calls toicmp_error

    0 error notgenerated because old message was icmp

    Outputhistogram:

        destinationunreachable: 7060

    0 message withbad code fields

    0 message <minimum length

    0 bad checksum

    0 message withbad length

    0 messageresponse generated

routestatShow

       显示路由信息

    routing:

    0 bad routingredirect

    0 dynamicallycreated route

    0 new gatewaydue to redirects

    12 destinationsfound unreachable

    0 use of a wildcard route

tcpstatShow

显示tcp信息

TCP:

    11740 packets sent

        2840 data packets (137764 bytes)

        6 data packets (1867 bytes)retransmitted

        5642 ack-only packets (0 delayed)

        0 URG only packet

        0 window probe packet

        0 window update packet

        3254 control packets

    8485packets received

        44 acks (for 2429 bytes)

        2801 duplicate acks

        0 ack for unsent data

    2840 packets (2128 bytes) receivedin-sequence

        1 completely duplicate packet (29 bytes)

        0 packet with some dup. data  (0 byte duped)

        2 out-of-order packets (0 byte)

        0 packet (0 byte) of data after window

        0 window probe

        0 window update packet

        0 packet received after close

        0 discarded for bad checksum

        0 discarded for bad header offset field

        0 discarded because packet too short

    2953 connection requests

    0 connection accept

    2802 connections established (includingaccepts)

    2950 connections closed (including 2798drops)

    147 embryonic connections dropped

    2846 segments updated rtt (of 5797 attempts)

    304 retransmit timeouts

        0 connection dropped by rexmit timeout

    0 persist timeout

    147 keepalive timeouts

        0 keepalive probe sent

        147connections dropped by keepalive

udpstatShow

显示udp信息

UDP:

       7759 total packets

       7757 input packets

       2 output packets

       0 incomplete header

       0 bad data length field

       0 bad checksum

       581 broadcasts received with no ports

       0 full socket

       7176 pcb cache lookups failed

       7176 pcb hash lookups failed

inetstatShow

显示连接信息

Active Internetconnections (including servers)

PCB      Proto Recv-Q Send-Q  Local Address      Foreign Address    (state)

-------- ----------- ------  ----

------分隔线----------------------------
------分隔线----------------------------

最新技术推荐