您的位置:首页 > 运维架构 > Shell

Contiki 3.0: 自定义添加Shell指令

2017-03-08 11:00 597 查看
Shell是contiki系统所提供的一个十分方便的指令处理系统,通过shell可以做到各方面的操作控制与信息汲取,并且contiki支持自定义添加shell指令。

这里以添加一个login指令来演示如何添加一条自定义指令,先从最简单的传单个参数开始,指令设计暂定为

login :输入密码,如果匹配则完成登录否则提示失败。

0.建立两个文件分别为login-ban.h和login-ban.c

1.头文件

先写login-ban.c,这里主要包含有contiki系统定义头文件,我们自己创建的头文件,c语言标准库头文件和字符串处理头文件,shell指令库头文件

#include "contiki.h"
#include "login-ban.h"

#include

#include

#include "shell.h"

2.进程和指令的声明

PROCESS(shell_login_process, "login
process");

这一条函数注册我们执行指令的线程,当执行shell指令时候会启动

SHELL_COMMAND(login_command,

   
"login",

    "login :
login current system",

   
&shell_login_process);

SHELL_COMMAND是我们所设计指令的结构,参数分别为shell指令的存储名称,shell指令的呼叫名称,shell指令的解释,shell指令执行进程(起始地址)。shell指令解释会在help
list中打印出来。

3.指令的注册

void shell_login_init(void)

{

   
shell_register_command(&login_command);

}

这一个函数会注册刚才设置的指令到contiki系统中,使其能在命令提示下被呼叫

4.login线程

PROCESS_THREAD(shell_login_process, ev, data)

{

char *name;

    int
fd;

    char
*default_password="user";

   
PROCESS_BEGIN();

    name =
data;

    if(name
==NULL)//判断传入的数据是否为空,如果是就显示指令的说明

    {

   
   
shell_output_str(&login_command,

   
   
    "login :
login current system","");

   
   
PROCESS_EXIT();

    }

   
if(strcmp(name,default_password)==0)//利用strcmp函数来比较自定义密码和传入的密码是否一致

    {

   
   
shell_output_str(&login_command,

   
   
    "Login
succeed", "");

    }

    else

    {

   
   
shell_output_str(&login_command,

   
   
    "ERROR:Login
failed", "");

    }

   
PROCESS_END();

}

这里有一个函数shell_output_str主要是调用shell指令进程进行输出,本身shell指令是一个进程,如果用printf则仅仅是串口输出,在远端登录shell时候是无法看到的。

5.头文件与调用

login-pan.h头文件中只有一个函数的声明
void shell_login_init(void);

完成这些后,在我们的主函数中执行shell_login_init就可以了。

编译要记得Makefile文件中加上
PROJECT_SOURCEFILES+=login-pan.c
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: