VxWorks 是一个嵌入式实时操作系统,它的命令体系与常见的 Linux 或 Windows 命令行有很大不同,VxWorks 的命令主要通过其内置的 Shell 来执行,这个 Shell 是一个 C 语言解释器,允许用户直接输入 C 语言表达式和函数调用来与系统交互。

VxWorks 的命令可以分为两大类:
- Shell 内置命令:由 VxWorks Shell 直接解释执行。
- 目标模块命令:通过
#include <shellLib.h>和shellFuncAdd()等机制添加到 Shell 中的函数,通常来自动态加载的模块(如驱动、应用组件等)。
核心 Shell 内置命令
这些是 VxWorks 启动后立即可用的基础命令,主要用于系统控制、文件操作和进程管理。
系统控制与信息类命令
| 命令 | 功能描述 | 示例 |
|---|---|---|
-> |
Shell 提示符,表示系统正在等待用户输入。 | -> |
help |
显示所有可用的 Shell 命令及其简要描述。 | -> help |
pwd |
显示当前工作目录。 | -> pwd |
cd <path> |
更改当前工作目录。 | -> cd /ata0/mnt |
dir / ls |
列出当前目录下的文件和子目录。ls 是 dir 的别名。 |
-> dir |
mkdir <path> |
创建一个新的目录。 | -> mkdir /new_dir |
rm <file> |
删除一个文件。 | -> rm old_file.txt |
cp <src> <dest> |
复制文件或目录。 | -> cp file1.txt file2.txt |
mv <src> <dest> |
移动或重命名文件或目录。 | -> mv file1.txt new_name.txt |
cat <file> |
显示文件的内容。 | -> cat config.txt |
<TAB> |
命令自动补全,输入命令的一部分后按 Tab 键,Shell 会尝试补全。 | -> pr<TAB> -> -> printf |
^C |
中断当前正在执行的命令,如果一个命令进入死循环或耗时过长,按 Ctrl+C 可以中断它。 |
(在运行的循环中按 Ctrl+C) |
reboot |
重启目标系统。 | -> reboot |
进程与任务管理类命令
VxWorks 中,执行单元称为 任务。
| 命令 | 功能描述 | 示例 |
|---|---|---|
sp |
显示所有任务,列出系统当前所有任务的 ID、名称、优先级、状态等信息,这是最常用的调试命令之一。 | -> sp |
i |
显示当前任务信息,显示当前正在执行的任务的详细信息。 | -> i |
taskInit |
创建一个新的任务(不立即执行),这是一个函数调用,不是简单的命令。 | -> taskInit ("myTask", 100, 20000, 0, 0, myTaskFunc, 0) |
taskSpawn |
创建并启动一个新任务,这是最常用的创建任务的方式。 | -> taskSpawn ("t1", 100, 0x1000, 20000, myTaskFunc, 0, 0, 0, 0, 0, 0, 0, 0) |
taskDelete <taskId> |
删除一个指定的任务。 | -> taskDelete 12345 |
taskSuspend <taskId> |
挂起一个指定的任务,使其暂停执行。 | -> taskSuspend 12345 |
taskResume <taskId> |
恢复一个被挂起的任务。 | -> taskResume 12345 |
内存与符号管理类命令
| 命令 | 功能描述 | 示例 |
|---|---|---|
memshow |
显示内存使用情况,显示系统内存池的分配和使用状态。 | -> memshow |
xx |
十六进制转储内存,显示从指定地址开始的内存内容。 | -> xx 0x10000 |
wd |
显示/修改内存中的字,读取或写入一个 32 位的字。 | -> wd 0x10000 (显示) -> wd 0x10000 0xABCDEF00 (写入) |
symbols |
显示所有加载的符号,列出所有已加载模块中的函数和变量名及其地址。 | -> symbols |
unld |
卸载一个模块,从内存中移除一个动态加载的模块,释放其占用的代码和数据空间。 | -> unld myDriver.o |
模块加载与管理类命令
| 命令 | 功能描述 | 示例 |
|---|---|---|
ld |
加载一个目标模块,从文件系统加载一个 .o 或 .out 文件到目标内存中。 |
-> ld /ata0/mnt/myDriver.o |
shellFuncAdd |
向 Shell 添加一个新命令,这是一个函数,通常在模块加载时被调用,将模块中的函数注册为 Shell 命令。 | (通常由模块的初始化代码自动调用) |
高级与调试命令
这些命令通常与调试器(如 Wind River Workbench 的调试器)或特定工具库(如诊断 Shell)配合使用。

| 命令 | 功能描述 | 示例 |
|---|---|---|
logLib |
系统日志,可以配置日志级别,将系统运行信息(如错误、警告)输出到控制台或文件。 | -> logMsg("This is an info message.\n"); |
shellDiag |
诊断 Shell,提供更高级的诊断和测试功能,通常用于开发和测试阶段。 | -> shellDiag |
tickGet() |
获取系统时钟,这是一个函数,返回自系统启动以来的时钟滴答数。 | -> tickGet() |
sysClkRateGet() |
获取系统时钟频率,返回系统时钟每秒的滴答数。 | -> sysClkRateGet() |
如何创建和使用自定义命令
这是 VxWorks 开发中非常重要的一个环节,你可以在自己的代码中创建函数,并将其注册为 Shell 命令。
步骤:
-
编写一个 C 函数:该函数必须符合 Shell 命令的格式,接收一个参数(
char *argv[]),并返回一个STATUS类型。#include <vxWorks.h> #include <shellLib.h> #include <stdio.h> // 自定义命令函数 STATUS myCustomCmd(int argc, char *argv[]) { if (argc < 2) { printf("Usage: myCustomCmd <message>\n"); return ERROR; } printf("Hello from myCustomCmd! You said: %s\n", argv[1]); return OK; } -
注册函数到 Shell:在模块的初始化函数中,使用
shellFuncAdd()将你的函数添加到 Shell 中。
(图片来源网络,侵删)#include <shellLib.h> void myModuleInit(void) { // 将 myCustomCmd 函数注册为 "myCmd" 命令 shellFuncAdd("myCmd", myCustomCmd, 0); } -
编译和加载:
- 将你的代码编译成 VxWorks 模块(
myModule.o)。 - 使用
ld命令将模块加载到目标板。-> ld /ata0/mnt/myModule.o
- 将你的代码编译成 VxWorks 模块(
-
使用命令: 加载成功后,你的自定义命令
myCmd就会出现在help列表中,可以直接使用。-> help ... myCmd: myCustomCmd <message> ... -> myCmd VxWorks Hello from myCustomCmd! You said: VxWorks
常用 Shell 快捷键
| 快捷键 | 功能 |
|---|---|
Ctrl+C |
中断当前正在执行的命令或任务。 |
Ctrl+D |
发送 EOF (End of File),通常用于结束输入流或退出 Shell。 |
Ctrl+L |
清屏。 |
Ctrl+P / Ctrl+N |
历史命令浏览(上一条/下一条)。 |
Ctrl+R |
反向搜索历史命令。 |
Tab |
命令自动补全。 |
VxWorks 的命令行是一个功能强大的工具,直接面向底层的系统资源,掌握这些命令对于进行系统调试、性能分析、快速开发和维护至关重要,对于新手来说,最需要熟练掌握的是:
sp:查看系统任务状态。ld/unld:加载和卸载模块。dir/cat/cd:文件系统操作。taskSpawn/taskDelete:任务管理。
