hi3518 openharmony shell命令代码修改 原创

鸿蒙开发
发布于 2021-10-26 10:59
浏览
1收藏

文中相关设备来源于51CTO鸿蒙技术社区【开发板漂流计划】
接上篇 Hi3518鸿蒙编译烧录完美运行 ,这次小试牛刀改代码,找一个最简单最直观的地方,那就是shell命令了,根据我的了解shell命令应该属于内核部分,所以去liteos-a内核目录去寻找.
首先找到的路径是aries_code/code-2.0-canary/kernel/liteos_a/apps/shell/src这个目录底下有几个cmd相关文件
简单看了一下,里边的代码有一些tab匹配,命令历史记录相关的,后来发现liteos-a根目录也有一个shell目录
aries_code/code-2.0-canary/kernel/liteos_a/shell/full/src/cmds
把这个目录中的源码简单看了一下,发现了一些有用的打印信息,比如help命令的执行函数OsShellCmdHelp
date命令的执行函数OsShellCmdDate,dmesg命令的执行函数OsShellCmdDmesg,watch命令的执行函数OsShellCmdWatch
如果要自己增加命令的宏调用是SHELLCMD_ENTRY()
下面简单修改点打印,首先把help,命令改一下,help命令的打印也改一下,通过==SHELLCMD_ENTRY==把==helptest==命令注册一下,这个命令的回调处理函数是==OsShellCmdHelp==,回调函数中判断如果有参数打印==Usage: help==,通过==OsCmdInfoGet()==,获取所有支持的命令,也就是下图的显示:
OsCmdInfoGet函数只是返回一个静态的全局变量,由此可见,shell中的命令都是通过注册函数添加到g_cmdInfo变量中,
结构体如下,
typedef struct {
CmdItemNode cmdList;
UINT32 listNum;
UINT32 initMagicFlag;
LosMux muxLock;
CmdVerifyTransID transIdHook;
} CmdModInfo;
CmdItemNode中包含一个链表:
UINT32 OsShellCmdHelp(UINT32 argc, const CHAR **argv)
UINT32 loop = 0;
CmdItemNode curCmdItem = NULL;
CmdModInfo cmdInfo = OsCmdInfoGet();
(VOID)argv;
if (argc > 0) {
PRINTK(“\nUsage: help\n”);
return OS_ERROR;
==PRINTK(" openharmony2.0 shell commands:
*** \n");==
LOS_DL_LIST_FOR_EACH_ENTRY(curCmdItem, &(cmdInfo->cmdList.list), CmdItemNode, list) {
if ((loop & (8 - 1)) == 0) { /
8 - 1:just align print */
PRINTK(“\n”);
PRINTK(“%-12s “, curCmdItem->cmd->cmdKey);
loop++;
PRINTK(”\n”);
return 0;
SHELLCMD_ENTRY(help_shellcmd, CMD_TYPE_EX, ==“helptest”==, 0, (CmdCallBackFunc)OsShellCmdHelp);
修改后,验证一下效果,发现输入help命令已经找不到了
输入helptest后,命令找到而且打印信息也变了,说明shell部分代码改对了.

©著作权归作者所有,如需转载,请注明出处,否则将追究法律责任
标签
已于2021-10-26 10:59:27修改
6
收藏 1
回复
6
1
1
1条回复
按时间正序
/
按时间倒序
红叶亦知秋

楼主属实是融会贯通了

回复
2022-3-10 14:59:17
回复
添加资源
添加资源将有机会获得更多曝光,你也可以直接关联已上传资源 去关联
相关推荐