基本知识 静态注册命令使用 SHELLCMD_ENTRY 接口。 第一个入参:命令变量名,用于设置链接选项(build / mk / liteos_tables_ldflags . mk的LITEOS_TABLES_LDFLAGS变量)。例如变量名为ls_shellc
基本知识
静态注册命令使用 SHELLCMD_ENTRY 接口。
第一个入参:命令变量名,用于设置链接选项(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中执行命令时被调用的函数。
实战环节
静态注册一个 shell 命令
仅打印输出提示信息。
LiteOS/shell/src/cmds/hello_shell.c
INT32 OsShellCmdHello(INT32 argc, const CHAR **argv)
{
printf("hello jiaming!\n");
return 0;
}
SHELLCMD_ENTRY(hello_shellcmd, CMD_TYPE_STD, "hello", XARGS, (CmdCallBackFunc)OsShellCmdHello); // 接口
LiteOS/build/mk/liteos_tables_ldflags.mk
增加以下选项:
3. 通过make menuconfig使能Shell,即设置LOSCFG_SHELL=y
4. make clean; make