全部文档
OneOS简介 硬件支持 编译构造工具 API参考文档 高级语言 用户编程手册 应用笔记 FAQ

SHELL工具


简介

shell命令行工具,提供了一套供用户在命令行调用的操作接口,主要用于调试或查看系统信息。它可以使用串口/以太网/USB等与PC机进行通信。

shell流程

用户在控制终端输入命令,控制终端通过串口、USB、网络等方式将命令传给设备里的shell,shell会读取设备输入命令,解析并自动扫描内部函数表,寻找对应函数名,执行函数后输出回应,回应通过原路返回,将结果显示在控制终端上。当使用串口连接设备与控制终端时,shell命令的执行流程如下图所示:

shell功能

  • 支持命令的执行

  • 支持权限验证功能,系统在启动后会进行权限验证,只有权限验证通过,才会开启 shell 功能,提升系统输入的安全性

  • 支持自动补全命令功能

  • 支持查看历史命令

这些功能的使用需要利用键盘的按键,按键的具体功能如下:

按键 功能说明
Enter键 执行命令
Tab键 当没有输入任何字符时按下 Tab 键将会打印当前系统支持的所有命令。若已经输入部分字符时按下 Tab 键,将会查找匹配的命令,也会按照文件系统的当前目录下的文件名进行补全,并可以继续输入,多次补全
↑↓键 上下翻阅最近输入的历史命令
←→键 向左或向右移动光标
退格键 删除当前光标的前一个字符

系统内置shell命令

本操作系统内置了一些shell命令,在控制终端中输入help回车,或者直接按Tab键,就可以看到当前系统支持的所有命令。下面我们列出一些比较有用的命令:

sh />help
OneOS shell commonds:
list_device      - list device
list_event       - list event in system
list_mailbox     - list mail box in system
list_mempool     - list memory pool in system
list_mem         - list memory usage information
memcheck         - check memory data
memtrace         - dump memory trace information
list_msgqueue    - list message queue in system
list_mutex       - list mutex in system
list_sem         - list semaphore in system
list_task        - list task
list_timer       - list timer
atest_list       - Output all atest testcase

这些命令可以比较方便的用来查看系统的某些运行状态,用于调试和问题分析。


自定义shell命令

除了系统内置的shell命令外,shell工具也支持用户自定义命令,只要用特定的shell宏导出来即可

导出shell命令的宏

该宏用于定义shell命令,使用该宏导出的命令会被放入特定的段中,该宏的参数如下:

SH_CMD_EXPORT(cmd, func, desc)
参数 说明
cmd 命令名称
func 该命令对应的执行函数,此函数符号会被输出到特定的段中;执行命令时,可以查到到该函数的地址并执行
desc 命令描述字符串,用于描述该命令

自定义shell命令使用示例

不带参数的shell命令使用示例

本例演示如何自定义最简单的不带参数的shell命令,代码如下:

#include <oneos_config.h>
#include <os_dbg.h>
#include <shell.h>

#define TEST_TAG        "TEST"

void helloworld_sample(void)
{
    LOG_W(TEST_TAG, "hello, world!!!");
}

SH_CMD_EXPORT(helloworld, helloworld_sample, "test for shell cmd");

编译并下载程序后,在控制终端输入help然后回车,可以看到该命令:

sh />help
OneOS shell commonds:
...
helloworld       - test for shell cmd
...

运行该命令,结果如下:

sh />helloworld
W/TEST: hello, world!!!

带参数的shell命令使用示例

本例演示如何自定义带参数的shell命令,代码如下:

#include <oneos_config.h>
#include <os_dbg.h>
#include <shell.h>
#include <string.h>

#define TEST_TAG        "TEST"

static void multi_param_sample(os_int32_t argc, char **argv)
{
    if (argc != 2)
    {
        LOG_W(TEST_TAG, "usage: multi_param_cmd <action1|action2>");
        return;
    }

    if (!strcmp(argv[1], "action1"))
    {
        LOG_W(TEST_TAG, "do action1");
    }
    else if (!strcmp(argv[1], "action2"))
    {
        LOG_W(TEST_TAG, "do action2");
    }
    else
    {
        LOG_W(TEST_TAG, "invalid action");
    }
}

SH_CMD_EXPORT(multi_param_cmd, multi_param_sample, "test for multi parameter shell cmd");

编译并下载程序后,在控制终端输入help然后回车,可以看到该命令:

sh />help
OneOS shell commonds:
...
multi_param_cmd  - test for multi parameter shell cmd
...

运行该命令,结果如下:

sh />multi_param_cmd
W/TEST: usage: multi_param_cmd <action1|action2>
sh />multi_param_cmd action1
W/TEST: do action1
sh />multi_param_cmd action2
W/TEST: do action2
sh />multi_param_cmd action3
W/TEST: invalid action

results matching ""

    No results matching ""

    返回顶部