Q群:
电话:
邮箱:
地址:
shell命令行工具,提供了一套供用户在命令行调用的操作接口,主要用于调试或查看系统信息。它可以使用串口/以太网/USB等与PC机进行通信。
用户在控制终端输入命令,控制终端通过串口、USB、网络等方式将命令传给设备里的shell,shell会读取设备输入命令,解析并自动扫描内部函数表,寻找对应函数名,执行函数后输出回应,回应通过原路返回,将结果显示在控制终端上。当使用串口连接设备与控制终端时,shell命令的执行流程如下图所示:
支持命令的执行
支持权限验证功能,系统在启动后会进行权限验证,只有权限验证通过,才会开启 shell 功能,提升系统输入的安全性
支持自动补全命令功能
支持查看历史命令
这些功能的使用需要利用键盘的按键,按键的具体功能如下:
按键 | 功能说明 |
---|---|
Enter键 | 执行命令 |
Tab键 | 当没有输入任何字符时按下 Tab 键将会打印当前系统支持的所有命令。若已经输入部分字符时按下 Tab 键,将会查找匹配的命令,也会按照文件系统的当前目录下的文件名进行补全,并可以继续输入,多次补全 |
↑↓键 | 上下翻阅最近输入的历史命令 |
←→键 | 向左或向右移动光标 |
退格键 | 删除当前光标的前一个字符 |
本操作系统内置了一些shell命令,在控制终端中输入help回车,或者直接按Tab键,就可以看到当前系统支持的所有命令。下面我们列出一些比较有用的命令:
help
sh>help
OneOS shell commands:
atest_run - atest_run [-n testacse name] [-l loop count] [-p priority level] [-t] [-s] [-h]
atest_list - Display all atest testcases
dlog_glvl_ctrl - dlog global level control
dlog_tlvl_ctrl - dlog tag level control
dlog_gtag_ctrl - dlog global tag control
dlog_gkw_ctrl - dlog global keyword control
device - show device information
pinMode - set hardware pin mode
pinWrite - write value to hardware pin
pinRead - read status from hardware pin
event - show event information
klog_glvl_ctrl - klog global level control
klog_tlvl_ctrl - klog tag level control
mb - show mailbox information
memp - show memory pool information
mem - show memory usage information
mq - show message queue information
mutex - show mutex information
sem - show semaphore information
task - show task information
timer - show timer information
version - show oneos version
help - Obtain help of commands
这些命令可以比较方便的用来查看系统的某些运行状态,用于调试和问题分析。
除了系统内置的shell命令外,shell工具也支持用户自定义命令,只要用特定的shell宏导出来即可
该宏用于定义shell命令,使用该宏导出的命令会被放入特定的段中,该宏的参数如下:
SH_CMD_EXPORT(cmd, func, desc)
参数 | 说明 |
---|---|
cmd | 命令名称 |
func | 该命令对应的执行函数,此函数符号会被输出到特定的段中;执行命令时,可以查到到该函数的地址并执行 |
desc | 命令描述字符串,用于描述该命令 |
本例演示如何自定义最简单的不带参数的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命令,代码如下:
#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