开发指导
使用场景
Shell命令可以通过串口和Telnet工具输入。新增定制的命令,需重新编译链接后才能执行。
功能
- Huawei LiteOS提供的Shell命令参见后面“命令参考”章节。
- Huawei LiteOS的Shell模块为用户提供下面几个接口,接口详细信息可以查看API参考。
功能分类
接口名
描述
注册命令
SHELLCMD_ENTRY
静态注册命令
osCmdReg
动态注册命令
静态注册命令方式一般用于注册系统常用命令,动态注册命令方式一般用于注册用户命令。
静态注册命令有5个入参,动态注册命令有4个入参。下面除去第一个入参是静态注册独有的,剩余的四个入参两个注册命令是一致的。- 第一个入参:命令变量名,用于设置链接选项(build/mk/liteos_tables_ldflags.mk的LITEOS_TABLES_LDFLAGS变量)。例如变量名为ls_shellcmd,链接选项就应该设置为:LITEOS_TABLES_LDFLAGS += -uls_shellcmd。这个入参是静态注册独有的,动态注册中没有这个入参。
- 第二个入参:命令类型,目前支持两种命令类型。
- CMD_TYPE_EX:不支持标准命令参数输入,会把用户填写的命令关键字屏蔽掉。例如:输入ls /ramfs,传入给命令处理函数的参数只有/ramfs,对应于命令处理函数中的argv[0],而ls命令关键字并不会被传入。
- CMD_TYPE_STD:支持的标准命令参数输入,所有输入的字符都会通过命令解析后被传入。例如:输入ls /ramfs,ls和/ramfs都会被传入命令处理函数,分别对应于命令处理函数中的argv[0]和argv[1]。
- 第三个入参:命令关键字,是命令处理函数在Shell中对应的名称。命令关键字必须唯一,即两个不同的命令项不能有相同的命令关键字,否则只会执行其中一个。Shell在执行用户命令时,如果存在多个命令关键字相同的命令,只会执行在“help”命令中排在最前面的那个。
- 第四个入参:命令处理函数的入参最大个数。
- 静态注册命令暂不支持设置。
- 动态注册命令支持设置不超过32的入参最大个数,或者设置为XARGS(其在代码中被定义为0xffffffff)表示不限制参数个数。
- 第五个入参:命令处理函数名,即在Shell中执行命令时被调用的函数。
配置项
执行make menuconfig命令,进入Debug ---> Enable a Debug Version ---> Enable Shell菜单,完成Shell的配置。
配置项 |
含义 |
取值范围 |
默认值 |
依赖 |
---|---|---|---|---|
LOSCFG_SHELL |
Shell功能的裁剪开关 |
YES/NO |
YES |
LOSCFG_DEBUG_VERSION(=y) && LOSCFG_DRIVERS_UART(=y) |
LOSCFG_SHELL_CONSOLE(开源版本无该配置项) |
设置Shell直接与Console交互 |
YES/NO |
YES |
LOSCFG_SHELL(=y) |
LOSCFG_SHELL_UART |
设置Shell直接与uart驱动交互 |
YES/NO |
NO |
LOSCFG_DRIVERS_UART(=y) |
新增命令开发流程
下面以注册系统命令ls为例,介绍新增Shell命令的典型开发流程。
- 定义Shell命令处理函数。
Shell命令处理函数用于处理注册的命令。例如定义一个命令处理函数osShellCmdLs,处理ls命令,并在头文件中声明命令处理函数原型。
int osShellCmdLs(int argc, const char **argv);
命令处理函数的参数与C语言中main函数的参数类似,包括两个入参:
- argc:Shell命令的参数个数。个数中是否包括命令关键字,和注册命令时的命令类型有关。
- argv:为指针数组,每个元素指向一个字符串,该字符串就是执行shell命令时传入命令处理函数的参数。参数中是否包括命令关键字,和注册命令时的命令类型有关。
- 注册命令。
- 静态注册ls命令:
#include "shcmd.h" SHELLCMD_ENTRY(ls_shellcmd, CMD_TYPE_EX, "ls", XARGS, (CMD_CBK_FUNC)osShellCmdLs);
- 动态注册ls命令:
#include "shell.h" osCmdReg(CMD_TYPE_EX, "ls", XARGS, (CMD_CBK_FUNC)osShellCmdLs);
- 静态注册ls命令:
- 对于静态注册命令方式,在build/mk/liteos_tables_ldflags.mk中设置链接选项(LITEOS_TABLES_LDFLAGS变量)。
- 通过make menuconfig使能Shell,详见配置项。
- 编译烧录系统后,可以执行新增的Shell命令。