菜鸟科技网

vxwork命令有哪些常用指令及使用方法?

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

vxwork命令有哪些常用指令及使用方法?-图1
(图片来源网络,侵删)

VxWorks 的命令可以分为两大类:

  1. Shell 内置命令:由 VxWorks Shell 直接解释执行。
  2. 目标模块命令:通过 #include <shellLib.h>shellFuncAdd() 等机制添加到 Shell 中的函数,通常来自动态加载的模块(如驱动、应用组件等)。

核心 Shell 内置命令

这些是 VxWorks 启动后立即可用的基础命令,主要用于系统控制、文件操作和进程管理。

系统控制与信息类命令

命令 功能描述 示例
-> Shell 提示符,表示系统正在等待用户输入。 ->
help 显示所有可用的 Shell 命令及其简要描述。 -> help
pwd 显示当前工作目录。 -> pwd
cd <path> 更改当前工作目录。 -> cd /ata0/mnt
dir / ls 列出当前目录下的文件和子目录。lsdir 的别名。 -> 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)配合使用。

vxwork命令有哪些常用指令及使用方法?-图2
(图片来源网络,侵删)
命令 功能描述 示例
logLib 系统日志,可以配置日志级别,将系统运行信息(如错误、警告)输出到控制台或文件。 -> logMsg("This is an info message.\n");
shellDiag 诊断 Shell,提供更高级的诊断和测试功能,通常用于开发和测试阶段。 -> shellDiag
tickGet() 获取系统时钟,这是一个函数,返回自系统启动以来的时钟滴答数。 -> tickGet()
sysClkRateGet() 获取系统时钟频率,返回系统时钟每秒的滴答数。 -> sysClkRateGet()

如何创建和使用自定义命令

这是 VxWorks 开发中非常重要的一个环节,你可以在自己的代码中创建函数,并将其注册为 Shell 命令。

步骤:

  1. 编写一个 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;
    }
  2. 注册函数到 Shell:在模块的初始化函数中,使用 shellFuncAdd() 将你的函数添加到 Shell 中。

    vxwork命令有哪些常用指令及使用方法?-图3
    (图片来源网络,侵删)
    #include <shellLib.h>
    void myModuleInit(void)
    {
        // 将 myCustomCmd 函数注册为 "myCmd" 命令
        shellFuncAdd("myCmd", myCustomCmd, 0);
    }
  3. 编译和加载

    • 将你的代码编译成 VxWorks 模块(myModule.o)。
    • 使用 ld 命令将模块加载到目标板。 -> ld /ata0/mnt/myModule.o
  4. 使用命令: 加载成功后,你的自定义命令 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:任务管理。
分享:
扫描分享到社交APP
上一篇
下一篇