热度 28
2016-4-10 15:48
2291 次阅读|
0 个评论
对操作系统来讲,无论是 PC 的 Windows 、 Linux 还是嵌入式系统 VxWorks 、 QNX 、 SylixOS , shell 都是一个强大的调试手段,在进行驱动开发、应用开发、系统维护方面有着重要作用。 SylixOS 提供了基本的 shell 命令,能够满足绝大多数情况下的需要,但在一些特殊应用中通过添加自定义的 shell 命令,可以极大的方便设备的维护和使用。 在 SylixOS 中添加 shell 命令的函数为 API_TshellKeywordAdd ,该函数需要在内核模块中调用,函数介绍如下: API_TShellKeywordAdd(pcKeyword, /* 添加的 shell 命令 */ pfuncCommand); /* 执行 shell 命令的函数 */ 下面使用一个简单的实例演示添加 shell 命令的过程,该命令可以实现三个整数的加法运算。 #define __SYLIXOS_KERNEL #include SylixOS.h #include "linux/compat.h" #include module.h #include "../SylixOS/kernel/include/k_kernel.h" #include "../SylixOS/system/include/s_system.h" #include "../SylixOS/system/include/s_internal.h" #include "sys/time.h" /****************************************************************************** ** 函数名称: shellCmdTest ** 功能描述: 添加的 shell 测试命令功能函数 ******************************************************************************/ INT shellCmdTest (UINT32 uiStart, UINT32 uiCount, UINT32 uiData) { UINT32 uiRet; uiRet = uiStart + uiCount + uiData; printk("result:%d\n", uiRet); return (ERROR_NONE); } /****************************************************************************** ** 函数名称: tshellTestCmd ** 功能描述: 向内核添加的测试命令 ******************************************************************************/ static INT tshellTestCmd (INT iArgC, PCHAR ppcArgV , "-g") == 0) { } sscanf(ppcArgV , "%d", uiStart); sscanf(ppcArgV , "%d", uiCount); sscanf(ppcArgV , "%d", uiData); shellCmdTest(uiStart, uiCount, uiData); return (ERROR_NONE); } /****************************************************************************** ** 函数名称: module_init ** 功能描述: 内核模块被注册进系统时调用的函数 ******************************************************************************/ int module_init (void) { API_TShellKeywordAdd("numadd", /* 添加的 shell 命令 */ tshellTestCmd); /* 执行 shell 命令的函数 */ return (ERROR_NONE); } /****************************************************************************** ** 函数名称: module_exit ** 功能描述: 内核模块从系统时调用的函数 ******************************************************************************/ void module_exit (void) { } 代码使用: 1. 在控制台中将工作目录切换到“ /lib/modules ”,注册模块并测试 shell ,过程如下; # ls modu_shell_add.ko xinput.ko xsiipc.ko # modulereg modu_shell_add.ko hello_module init! module modu_shell_add.ko register ok, handle : 0x30c74910 # numadd 1 3 5 result:9 # 注意:本例程的工程创建时,需要选择 kernel module工程类型