首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Component之Kernel Shell的命令

Component之Kernel Shell的命令

作者头像
Taishan3721
发布于 2019-07-10 07:27:24
发布于 2019-07-10 07:27:24
8760
举报
文章被收录于专栏:这里只有VxWorks这里只有VxWorks

今天咱们看看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命令万千。

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

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-01-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 这里只有VxWorks 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Component之Kernel Shell的启用
Kernel Shell是VxWorks系统的一个Component(组件),是在Target端驻留的命令行。可以通过系统默认的全局IO来访问,即多数架构的串口0或者X86架构的PC Console;也可以通过Telnet或rlogin进行远程访问。
Taishan3721
2019/07/10
8390
Shell的Show命令(进程篇)
Shell里有很多命令用来查看/管理/调试RTP,最基本的应该就是组件INCLUDE_RTP_SHOW带来的rtpShow()
Taishan3721
2022/06/30
1.1K0
Shell的Show命令(进程篇)
Tool之VIP
VIP,就是VxWorks Image Project,Workbench中最基本的工程了,用于构建系统镜像
Taishan3721
2019/07/10
4.5K0
Component之CMD的0x10x10个命令
请横屏观看 或使用搜索功能 以下命令出自Vx69 命令 简介 adrsp Display information on the address space. alias Add an alias or display alias arp IPNET arp control bp Display, set or unset a breakpoint C Switch to C interpreter cd Change current directory. cpu Set/Get CPU affi
Taishan3721
2020/06/16
5890
Component之timex
这个timex机制的优点是:不需要修改被测程序。不过它是以系统时钟为基准,精度有限;而timexN()则需要被测函数可以重复调用。因此可以考虑使用高精度时间戳来封装测试机制。
Taishan3721
2020/01/02
4180
Kernel调试追踪技术之 Kprobe on ARM64
kprobe 是一种动态调试机制,用于debugging,动态跟踪,性能分析,动态修改内核行为等,2004年由IBM发布,是名为Dprobes工具集的底层实现机制[1][2],2005年合入Linux kernel。probe的含义是像一个探针,可以不修改分析对象源码的情况下,获取Kernel的运行时信息。
233333
2024/04/03
5160
Kernel调试追踪技术之 Kprobe on ARM64
C# 从1到Core--委托与事件
  委托与事件在C#1.0的时候就有了,随着C#版本的不断更新,有些写法和功能也在不断改变。本文温故一下这些改变,以及在NET Core中关于事件的一点改变。
FlyLolo
2020/07/01
6470
深入浅出C/C++函数指针
和变量一样,函数在内存中有固定的地址,函数的实质也是内存中一块固定的空间。函数的地址存放其机器代码的内存的开始地址。当我们需要调用一个函数并让其使用我们期望的函数进行操作时,函数指针就能发挥作用了。比如pthread_create函数,需要自定义线程的轨迹。指定线程函数的指针,新线程将从该函数的起始地址开始执行。
Andromeda
2023/11/22
3160
原创 Paper | VxWorks 启动流程及溢出测试分析
在前面的文章中,我们已经成功编译并启动了 VxWorks,本文将重点介绍 VxWorks 的启动流程,并使用GDB进行调试以更深入地研究启动过程。
Seebug漏洞平台
2024/04/23
6360
原创 Paper | VxWorks 启动流程及溢出测试分析
【C#】分享带等待窗体的任务执行器一枚
-------------20150415原文(已更新)-------------
AhDung
2018/09/13
1.8K0
【C#】分享带等待窗体的任务执行器一枚
C++ 多线程编程总结
C++ 多线程编程总结          在开发C++程序时,一般在吞吐量、并发、实时性上有较高的要求。设计C++程序时,总结起来可以从如下几点提高效率: l  并发 l  异步 l  缓存 下面将我平常工作中遇到一些问题例举一二,其设计思想无非以上三点。 1任务队列 1.1    以生产者-消费者模型设计任务队列   生产者-消费者模型是人们非常熟悉的模型,比如在某个服务器程序中,当User数据被逻辑模块修改后,就产生一个更新数据库的任务(produce),投递给IO模块任务队列,IO模块从任务队列中取出
知然
2018/03/09
1.9K0
FFLIB之FFLUA——C++嵌入Lua&扩展Lua利器
摘要: 在使用C++做服务器开发中,经常会使用到脚本技术,Lua是最优秀的嵌入式脚本之一。Lua的轻量、小巧、概念之简单,都使他变得越来越受欢迎。本人也使用过python做嵌入式脚本,二者各有特点,关于python之后会写相关的文章,python对于我而言更喜欢用来编写工具,我前边一些相关的算法也是用python来实现的。今天主要讲Lua相关的开发技术。Lua具有如下特点: Lua 拥有虚拟机的概念,而其全部用标准C实现,不依赖任何库即可编译安装,更令人欣喜的是,整个Lua 的实现代码并不算多,可以直接继承
知然
2018/03/09
2.5K0
Python3 | 练气期,函数创建、参数传递、作用域!
描述:上一章,我们学习了Python3编程中最基本而得流程控制语句,相信大家在作者的实践下也已经掌握了相关关键字了吧,这一章我们一起学习Python3编程入门中函数定义、函数调用、函数参数(传递、类型),匿名函数、递归函数。内嵌函数和闭包、装饰器函数,以及命名空间作用域的讲解,它也是Python编程中最基础且常用的部分,所以说也是需要我们掌握的。
全栈工程师修炼指南
2024/07/29
2020
Python3 | 练气期,函数创建、参数传递、作用域!
Shell中使用getopt、getopts命令
版权声明:本文为木偶人shaon原创文章,转载请注明原文地址,非常感谢。 https://blog.csdn.net/wh211212/article/details/53750366
shaonbean
2019/05/26
5.9K0
ACE - ACE_Task源码剖析及线程池实现
上篇提到用Reactor模式,利用I/O复用,获得Socket数据并且实现I/O层单线程并发,和dispatch层把不同的I/O绑定到了不同的Event中去处理。也就是已经实现了多个client连接和通信,且可以把不同的I/O与Event句柄绑定,指定处理函数。 但是问题来了,多个用户连接时,I/O层可以通过复用以较快的速度处理连接和把过来的数据关联到绑定的Event函数执行。但是绑定Event函数获得数据后,需要逐个处理,当大量数据从I/O层过来,所有数据共享线程,而且业务代码又是非常耗时的。每个sock
Aichen
2018/05/18
1.7K0
全志R128芯片 基础组件开发指南——RTOS 多媒体解码
介绍 FreeRTOS 下如何使用 rtplayer 的接口来开发播放器应用程序,方便播放器开发人员快速正确地开发,以及播放器测试人员如何根据该文档对 rtplayer 播放器进行验证测试。
阿志小管家
2024/02/02
4440
全志R128芯片 基础组件开发指南——RTOS 多媒体解码
C语言模拟QT的信号与槽功能
使用过QT的朋友,应该都对QT的信号与槽机制深有体会,它可以非常方便的实现类与类之间的解耦合、实现对象与对象之间的解耦合、实现两个cpp文件之间的解耦合。
AIoT-KK
2023/02/09
2.2K0
C语言模拟QT的信号与槽功能
C# 基础知识系列- 6 Lambda表达式和Linq简单介绍
C#的lambda和Linq可以说是一大亮点,C#的Lambda无处不在,Linq在数据查询上也有着举足轻重的地位。
程序员小高
2020/04/29
1.6K0
安卓Frida Hook进阶2
libart.so: 在 Android 5.0(Lollipop)及更高版本中,libart.so 是 Android 运行时(ART,Android Runtime)的核心组件,它取代了之前的 Dalvik 虚拟机。可以在 libart.so 里找到 JNI 相关的实现。
用户1423082
2024/12/31
2520
Component之C++
首先,VxWorks支持C++编程,毕竟面向对象语言功能强大。不过因为性能的原因,在实时系统里,更多的还是使用C语言来编程。尤其在信号和中断处理函数里调用C++的话,一些动态行为不能使用,例如非静态成员函数、实例化对象、删除对象、exception、run-time type identification(RTTI)等
Taishan3721
2019/07/10
1.2K0
相关推荐
Component之Kernel Shell的启用
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档