Component之Kernel Shell的命令

今天咱们看看Kernel Shell里都有哪些命令。

如果是第一次用某个系统,你会先输入哪个命令?

我一般先试试help

Kernel Shell里调用命令时,可以省略包含参数的括号,而且默认会给该命令补充10个0作为参数。例如在Shell里键入“help”,等价于“help(0,0,0,0,0,0,0,0,0,0)”;键入“aa 1,2”等价于“aa(1,2,0,0,0,0,0,0,0,0)”。因此我们自己写的函数,参数个数尽量不要超过10个了。

下面咱们分类介绍一下这些命令

Shell本身的命令

  • h(int size) - size等于0时,显示Shell下已调用的命令;size大于0时,设置存储命令的长度,初始值是20
  • version() - 打印VxWorks系统的版本信息和boot line
  • printLogo() - 打印VxWorks的Logo
  • shConfig(char *config) - 参数为NULL时,显示当前Shell的配置参数,否则设置其参数
  • strFree(char *string) - 释放Shell里动态分配的字符指针。参数为0,则打印当前所有字符指针;参数为-1,则释放所有指针。

不过在Shell中直接声明的字符指针,应该用free()来释放

IO设备与内存操作

  • devs() - 打印系统已知的所有IO设备,等价于iosDevShow()
  • iosDrvShow() - 打印系统安装的驱动
  • iosFdShow() - 打印系统所有的文件描述符,可以用来查看当前系统打开了哪些IO设备
  • iosRtpFdShow(RTP_ID rtpId) - 打印指定RTP中的文件描述符
  • stdioShow(FILE *fp, int level) - 打印IO流fp的信息,需包含组件INCLUDE_STDIO_SHOW
  • logShow() - 打印当前活跃的logging文件描述符
  • ataShow(int ctrl,int drive) - 打印硬盘信息,需包含INCLUDE_ATA_SHOW
  • dosFsShow(void *pDevName, u_int level) -打印dosFs volume configuration。需包含INCLUDE_DOSFS_SHOW
  • memShow(int type) - 打印系统内存池的使用情况。0 = summary, 1 = list all blocks in the free list, 2 = list all sections。需包含组件INCLUDE_MEM_SHOW
  • d(void *adrs,int nunits,int width) - 从地址adrs开始,打印nunits个宽度为width的内存块的值。adrs为0时,从上一次的地址之后开始打印;nunits为0时,使用上一次的nunits;width为0时,使用上一次的width。width的取值为2/4/8,否则为1。
  • m(void *adrs,int width) - 从地址adrs开始,依次调整内存的值,每次调整的unit宽度为1/2/4/8,有width决定。每行显示一个unit,回车保留原值,“.”退出。

Task操作

  • i(long taskNameOrId) - 这其实是Shell里使用最频繁的命令,它会打印Task的TCB的概要信息。参数是Task的ID或name,如果为0,则打印当前所有Task的TCB的概要。
  • ti(long taskNameOrId) - 打印指定Task的完整TCB信息,如果参数为0,则打印最近访问的那个Task的信息。
  • show(long objId,int level) - 打印指定系统对象的信息,包括Task、Semaphore、Message Queue、Memory Partition、Watchdog、Symbol Table,可以说这是最强大的命令了,它会调用taskShow()/semShow()/msgQShow()/memPartShow()/wdShow/symShow()
  • w(long taskNameOrId) - 类似于i命令,不过w打印的是Task阻塞的信息
  • tw(long taskNameOrId) - 类似于ti,不过打印的是指定Task阻塞的信息
  • checkStack(long taskNameOrId) - 打印Task的Stack的使用情况。参数为0时,打印当前所有Task的Stack信息。当某个Task的MARGIN小于0,即表示这个Task的Stack溢出了
  • envShow(TASK_ID taskId) - 打印Task的环境变量
  • long sp(FUNCPTR func,long arg1,…,long arg9) - 启动一个Task,等价于taskSpawn(NULL,SHELL_SPAWNED_TASK_PRIORITY,SHELL_SPAWNED_TASK_OPTIONS,SHELL_SPAWNED_TASK_STACK_SIZE,func,arg1,...,arg9,0)。
  • ts(long taskNameOrId) - 挂起Task,它会调用taskSuspend()
  • tr(long taskNameOrId) - 恢复执行已挂起Task,它会调用taskResume()
  • td(long taskNameOrId) - 删除Task,它会调用taskDelete()
  • long period(int secs, FUNCPTR func, long arg1, ..., long arg8) - 启动一个Task,以周期secs调用函数func。可以给func传递8个参数。
  • long repeat(int n, FUNCPTR func,long arg1,..., long arg8) - 启动一个Task,重复n次调用函数func。如果n为0,则无限次调用func,直到该Task被删除。可以给func传递8个参数。
  • mRegs(char *regName,long taskNameOrId) -调整Task寄存器的值。taskNameOrId为0,则使用最近访问的那个Task。regName为无效值时,显示所有可用的寄存器;为0时,依次显示所有寄存器。

包含组件INCLUDE_HW_FP_SHOW后,还可以访问floating point register

  • pc(long taskId) - 打印Task的PC指针,参数0表示当前Task
  • printErrno(int errNo) - 打印指定error状态的值,参数为0时,使用当前Task的error状态。需包含组件INCLUDE_STAT_SYM_TBL
  • taskSwitchHookShow() - Shows the list of task switch routines. 需INCLUDE_TASK_HOOKS_SHOW
  • taskCreateHookShow() - Shows the list of task create routines. 需INCLUDE_TASK_HOOKS_SHOW
  • taskDeleteHookShow() - Shows the list of task delete routines. 需INCLUDE_TASK_HOOKS_SHOW

符号表操作

  • moduleShow(char *moduleNameOrId,int options) - 打印加载的Module信息
  • ld(int syms,BOOL noAbort,char *name) - 将elf格式的module加载到内存中,syms为0表示加载global符号,为1表示加载global和local符号,为-1表示不加载符号
  • lkup(char *substr) - 打印系统符号表中所有包含字符串substr的符号。substr为0时,仅打印符号表的基本信息;为空字符串""时,打印所有符号。每次打印的符号数量为symLkupPgSz,当symLkupPgSz为0时,一次性打印所有符号。
  • lkAddr(unsigned long addr) -从地址addr之前的符号开始,打印12个符号

spy操作

需包含组件INCLUDE_SPY和INCLUDE_AUX_CLK

  • spy(int freq,int ticksPerSec) - 每秒钟采集ticksPerSec次所有Task的活跃时间,每freq秒打印一次。freq为0时,取默认值5;ticksPerSec为0时,取默认值100
  • spyStop() - 结束spy操作

timexHelp

  • timex(FUNCPTR func,int arg1,...,int arg8) - 测试函数func的执行时长,func可带8个参数。func为NULL时,测试由timexFunc(), timexPre(),和timexPost()创建的函数列表。如果func的执行时长过短,则提议使用timexN()
  • timexN(FUNCPTR func,int arg1,...,int arg8) - 类似于timex,但重复调用func,直到误差小于2%
  • timexFunc(int i,FUNCPTR func,int arg1,...,int arg8) - 创建函数列表,用于timex()或timexN()的测试。列表长度为4,参数i指定函数func在列表中的位置,取值0、1、2或3。func为NULL时,表示去除相应位置的函数。
  • timexPre(int i,FUNCPTR func,int arg1,...,int arg8) - 创建测试之前需调用的函数列表。
  • timexPost(int i,FUNCPTR func,int arg1,...,int arg8) - 创建测试之后需调用的函数列表。
  • timexShow() - 打印需要测试的函数列表

ioHelp

需包含组件INCLUDE_DISK_UTIL

IO与文件系统操作

edrHelp

需包含组件INCLUDE_EDR_SHOW

打印EDR的Show命令

netHelp

打印Network函数摘要

  • arpShow() -打印已有的ARP entry,INCLUDE_IPWRAP_ARP
  • sockShow() - 打印所有的Socket。
  • ifShow(char *ifName) - 打印已挂接的网卡,INCLUDE_IPWRAP_IFSHOW
  • routec(char * param) - param为NULL时,打印路由信息。需包含组件INCLUDE_ROUTECMD
  • netstat(char * param) -打印Network数据结构。需包含组件INCLUDE_NETSTAT
  • ifconfig(char * param) - param为NULL时,打印Network接口配置。需包含组件INCLUDE_IFCONFIG
  • muxShow(char *pDevNameint unit) - 打印网卡上绑定的协议

nfsHelp

需包含组件INCLUDE_NFS_CLIENT_ALL

打印Shell里的NFS命令

dbgHelp

打印debug命令。需包含组件INCLUDE_DEBUG

rtpHelp

打印Shell下RTP相关命令。需包含组件INCLUDE_RTP_SHELL_C

Kernel Shell里可以使用的命令还有很多,我们用到的时候再去慢慢研究吧。

这正是:

且学且知己浅,Shell命令万千。

各取所需细看,艺不压身共勉。

原文发布于微信公众号 - 这里只有VxWorks(VxWorks567)

原文发表时间:2019-01-28

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

扫码关注云+社区

领取腾讯云代金券