在Wind River的VxWorks里,很多现场问题不是靠猜出来的,而是靠内核Shell把任务、内存、模块、设备这些关键面板先“看清楚”。内核Shell本质上是目标机驻留的命令行交互入口,你通过它可以直接对系统做查询与定位,把现象和调度、资源、配置一一对上号。
一、VxWorks常用命令有哪些
先把命令按用途分组,你用起来会快很多。实际可用命令与组件裁剪强相关,所以第一步不是背清单,而是用内置帮助确认你这套镜像里到底编进了哪些能力。
1、先从help入手,把可用入口摸清
在Shell里输入help通常能列出基础帮助入口,比如help、ioHelp、dbgHelp一类,你先看“有哪些分类”,再按分类往下查,避免在命令不存在时来回试错。
2、任务与调度类先记住i、ti、taskShow
日常定位卡顿、死等、假死、抢占异常,优先用i看任务摘要,再用ti或taskShow看单个任务细节。taskShow的输出会包含PRI字段与STATUS字段,是你判断优先级、就绪与挂起状态的基础。
3、系统信息优先看version一类信息输出
排查现场问题时,版本与构建信息往往决定了“这个命令有没有”“这个库在不在”“这个Bug是否已修”,所以建议把version作为第一波信息收集的一部分。
4、资源与内存类用memShow、相关show例程做快照
内存紧张、碎片化、分区异常时,不要只看现象,先用memShow这类命令把当前空闲与分配概况拉出来,再结合栈、堆、分区去判断是持续泄漏还是瞬时峰值。不同系统是否带memShow,取决于内核配置里是否包含对应组件。
5、设备与文件系统先看devs,再看文件系统状态
设备看不到、挂载异常、路径打不开时,先用devs确认设备节点是否存在,再用dosFsShow之类的信息输出确认文件系统是否正常,这个顺序能把“设备层问题”和“文件系统层问题”分开定位。
二、VxWorks常用命令怎么查看任务列表与优先级
查看任务列表与优先级的关键,是先确认你在正确的Shell解释器里,其次用“摘要命令”快速扫全局,再用“细节命令”落到具体任务。这样你既能看到系统面,又能把某个问题任务的PRI和状态证据补齐。
1、先确认当前环境能用哪些任务命令
如果你在VxWorks 6.x一类环境里,有时需要先从C Shell切到命令解释器,例如先输入cmd,再输入help查看命令清单,避免你以为命令不存在,其实是解释器不对。
2、用i快速拉出任务摘要列表
在Shell提示符下输入i,它会输出系统任务的概览信息,常见情况下你能在列表里看到承担Shell交互的tShell任务,这一步主要用于快速确认“任务是否在跑、是否被挂起、系统里有多少任务”。
3、用ti或taskShow把单个任务的优先级与状态看细
当你锁定某个任务后,用ti查看该任务的详细信息,或直接用taskShow查看任务控制块TCB也就是Task Control Block的字段。重点盯NAME、TID、PRI、STATUS这些列,PRI就是任务优先级的直接证据。
4、需要全量任务时,用taskShow的全局显示方式
如果你要一次性看到全部任务的TCB信息,可以用taskShow的全局显示级别方式来拉全量输出。这样比逐个ti更快,适合做一次现场快照,后续再按任务名或任务ID深挖。
5、读懂PRI的含义,先把调度逻辑对齐
VxWorks按优先级调度,数值越小优先级越高,范围通常是0到255。你看到某任务PRI很小而且长期READY,就要警惕它可能在抢占CPU;你看到Shell相关任务PRI更低优先级,就要考虑交互被饿死的可能。
三、VxWorks常用命令看不到任务列表和优先级怎么处理
遇到“命令输不出来”“输出空白”“优先级字段看不到”,多数不是命令本身坏了,而是解释器、内核裁剪、任务抢占、连接链路这几类问题之一。处理时按从外到内的顺序排,先把能否交互、能否列命令、能否显示show例程逐级确认。
1、命令提示未知时,先排解释器与帮助系统
先输入help确认当前解释器可见的命令列表;若你在6.x环境,记得先输入cmd再help。只有当help里确实没有i、ti、taskShow,你才进入下一步的组件排查。
2、i能用但看不到PRI字段时,改用taskShow核对字段来源
i输出偏摘要,字段可能因格式或配置而不全;直接用taskShow或ti看TCB字段,PRI在taskShow的标准输出字段里是明确存在的,用它可以把“摘要缺列”和“系统缺能力”区分开。
3、Shell突然打不进命令,多半是被高优先级任务抢占
如果你起了一个高优先级且不让出CPU的任务,tShell这类交互任务就可能得不到运行机会,表现为你按键无响应或输出停住。处理方向是降低问题任务优先级,或在任务循环里加入可让出CPU的节奏控制,否则你连排查命令都输不进去。
4、部分show命令缺失时,按内核裁剪项排查是否包含show组件
很多show例程是否存在取决于内核配置与包含的组件,没有一个对所有系统都通用的“全量清单”。你需要回到工程配置确认是否启用了INCLUDE_SHOW_ROUTINES一类选项,必要时把对应组件编进镜像再验证。
5、优先级看起来异常时,记住它可能是动态可变的
VxWorks任务优先级不是一成不变的,任务优先级可以被检查与调整。你在对比现场日志时,要用同一时刻的taskShow快照做依据,不要拿不同时间点的PRI做直接结论。
总结
这类问题的高效解法是固定一条操作链:先用help确认命令与解释器,再用i扫全局,再用ti或taskShow把PRI与STATUS落到证据上,最后再去排查内核裁剪与任务抢占。你把“能否交互、命令是否存在、输出是否完整、调度是否被饿死”四件事按顺序验完,任务列表与优先级通常就能看清楚了。
