分享

Component之Kernel Shell的命令

 立志德美 2019-06-06

今天咱们看看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()- 打印VxWorksLogo

  • 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_intlevel) -打印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,…,longarg9) - 启动一个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,longarg1,..., 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后,还可以访问floatingpoint register

  • pc(long taskId) - 打印Task的PC指针,参数0表示当前Task

  • printErrno(int errNo) - 打印指定error状态的值,参数为0时,使用当前Task的error状态。需包含组件INCLUDE_STAT_SYM_TBL

  • taskSwitchHookShow() - Shows the listof task switch routines. 需INCLUDE_TASK_HOOKS_SHOW

  • taskCreateHookShow() - Shows the listof task create routines. INCLUDE_TASK_HOOKS_SHOW

  • taskDeleteHookShow() - Shows the listof task delete routines. INCLUDE_TASK_HOOKS_SHOW

符号表操作

  • moduleShow(char *moduleNameOrId,intoptions) - 打印加载的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,...,intarg8) - 测试函数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,intarg1,...,int arg8) - 创建函数列表,用于timex()或timexN()的测试。列表长度为4,参数i指定函数func在列表中的位置,取值0、1、2或3。func为NULL时,表示去除相应位置的函数。

  • timexPre(int i,FUNCPTR func,intarg1,...,int arg8) - 创建测试之前需调用的函数列表。

  • timexPost(int i,FUNCPTR func,intarg1,...,int arg8) - 创建测试之后需调用的函数列表。

  • timexShow() - 打印需要测试的函数列表

ioHelp

需包含组件INCLUDE_DISK_UTIL

IO与文件系统操作

edrHelp

需包含组件INCLUDE_EDR_SHOW

打印EDR的Show命令

netHelp

打印Network函数摘要


  • arpShow() -打印已有的ARP entryINCLUDE_IPWRAP_ARP

  • sockShow()- 打印所有的Socket

  • ifShow(char*ifName) - 打印已挂接的网卡,INCLUDE_IPWRAP_IFSHOW

  • routec(char* param) - paramNULL时,打印路由信息。需包含组件INCLUDE_ROUTECMD

  • netstat(char* param) -打印Network数据结构。需包含组件INCLUDE_NETSTAT

  • ifconfig(char* param) - paramNULL时,打印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命令万千。

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

我是泰山,专注VX14年!

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多