您当前位置:首页 > 大数据

AWorks编程:Shell交互界面

发布时间:2019-11-26 09:19:20编辑:迪威国际登录-16563835730阅读次数:
AWorks编程:Shell交互界面

在嵌入式操作系统中,图形界面占用的内存资源较大,通常情况下会使用Shell控制台作为交互界面ZLG AWorks提供了可视化、可配置的Shell控制台环境,允许在程序运行中配置系统信息,利于系统的维护与管理,本文为你详细介绍。

1shell简介

1.1 什么是shell

Shell是操作系统的命令行外壳,提供了用户与内核进行交互操作的一套接口,它接收用户输入的命令并把它送入内核去执行,方便了用户调试程序和查看系统信息。

1.2 Shell的发展历史

在计算机发展的早期,没有操作系统,没有图形界面也没有鼠标和键盘。那个时候的计算机只是一个庞大的机器,人们使用吞吐纸带向计算机输入命令,编写程序。

后来随着计算机不断发展,操作系统诞生,键盘和显示器成为计算机的标准配置,但此时的操作系统还不支持图形界面,那么用户怎么和计算机打交道呢?计算机先驱们开发了一种终端程序作为系统的用户界面,它接受用户的输入命令,解释之后,传递给操作系统,并将系统执行后的输出结果显示在终端上。这个程序像一层外壳包裹在操作系统的外面,所以它被称为Shell。

Shell作为用户和操作系统内核的交互接口,也在不断的发展迭代,后来由大名鼎鼎的Unix系统发扬光大,诞生了多种shell软件,如bsh、bash、csh、ksh、zsh。这些shell功能都非常强大,不仅可以供用户输入命令,它们还都支持shell编程语言,可以完成复杂的操作。这些shell目前都可以在Unix系统上使用。

80年代,图形界面操作系统出现。90年代,windows图形界面系统逐渐占领市场,曾经统治计算机交互界面十年之久的Shell逐渐暗淡,但它并未因此退出操作系统。在windows上,cmd 就是一种shell,同时在 windows 的后续版本发展出更强大的 powershell。

2AWorks Shell

AWorks OS作为生态系统的核心,为用户提供了操作系统级别的服务,例如:多任务、信号量、Shell、消息队列、消息邮箱等,还包含了大量的组件,而Shell组件作为 AWorks 系统的命令行交互界面,主要用于调试、查看系统信息。

Shell组件开启后,在AWorks系统内会建立一个永不停息的 shell 任务,Shell任务通过设备读写API,实现对数据的实时处理。用户在交互界面输入命令,shell任务通过设备读API读取输入内容,解析输入命令,然后自动扫描shell命令函数表,定位命令的位置,执行函数表中对应的函数,并通过设备写API将函数的返回结果发送到PC。

图 1 AWorks Shell工作原理

AWorks Shell组件有两种工作方式:Shell Serial(串口模式)和Shell Telnet(网络模式)。

2.1 Shell Serial工作模式

在Shell Serial工作模式下,Shell运行于开发板上,硬件串口作为输入输出设备,在PC和开发板之间建立通信。

使用Shell Serial需要在aw_prj_params.h文件中开启串口设备(默认使用串口1)和串口shell组件,如 程序清单 1和程序清单 2 。

程序清单1 开启串口1外设

程序清单2 开启串Shell组件

通过串口工具将开发板和PC连接,在PC上打开一个Shell终端调试软件(常用软件:XShell、SecureCRT),建立串口连接。编译SDK将固件烧写到开发板,启动程序后,按下回车键,AWorks Shell Serial 命令界面效果如图 2。

图2 AWorks Shell Serial命令界面

2.2 Shell Telnet 工作模式

在Shell Telnet工作模式下,Shell 运行于开发板上,开发板需要通过以太网或 Wifi 模块建立的scoket与PC进行通信,此处以以太网举例。

使用 Shell Telnet 需要在 aw_prj_params.h 文件中开启以太网设备和shell telnet 组件,如程序清单3和程序清单4。

程序清单3 开启以太网外设

程序清单4 开启Shell Telnet组件

与串口Shell不同的是,Shell Telnet在建立连接时需要输入登录名称和密码,此名称和密码也在aw_prj_params.h文件中设置,如程序清单 5。

程序清单5 登录设置

通过网线连接开发板和PC,设置PC的IP地址与开发板在同一网段。在PC上打开一个Shell终端调试软件,配置软件,建立以太网连接。编译SDK将固件烧写到开发板,启动程序,输入用户名和密码,进入 AWorks Shell Telnet 命令界面,如图 3。

图3 AWorks Shell Telnet 命令界面

2.3 使用技巧

help

在控制台上输入help,回车,显示当前AWorks系统已注册的Shell命令,如图 4。

图4 AWorks系统Shell命令集

[command] --help

在控制台上输入[命令名称] --help ,显示输入命令的详细使用方法。

【Tab键】

当控制台没有输入任何字符时,在控制台按下【Tab键】,显示当前AWorks系统已注册的Shell命令。

如果命令字符过长,输入相对繁琐,则在控制台输入几个字符,按【Tab键】即可补全命令。

【上下键】

Shell具有记忆功能,能够记忆使用过的命令,按【上下键】,就可以查看最近输入的历史命令。

【左右键】

移动光标

【退格键】

删除字符

【Enter键】

发送命令

2.4 使用方法

AWorks Shell命令执行格式为:command <arg1> [arg2] ...

<>方括号内为必填参数,[]为可选参数。与传统windows、Linux系统Shell命令基本相同,本文以几个常用命令举例介绍,其他不再赘述。

2.4.1 stack

命令描述

查看当前系统的线程信息。

语法结构

stack [task]

取值说明

[task]是可选参数,取值为线程id号。

使用实例

12下一页>

2.4.2 mount

命令描述

挂载存储设备到指定的文件系统。

语法结构

mount <mount point> <device name> <FS type> 。

取值说明

<mount point> 为挂载点的名称,是必填参数,用户可自行取值。

<device name> 是设备名称,必填参数。

<FS type> 文件系统名称,必填参数。

使用实例

该实例需要插入SD卡,并在系统中开启sd设备(默认开启)。

2.4.3 ls

命令描述

显示当前目录下文件列表。

语法结构

ls [-l][path]

取值说明

[-l] 可选选项,显示详细的文件信息。

[path] 可选参数,路径名称。

使用实例

2.4.4 cd

命令描述

切换目录。

语法结构

cd <path>。

\

取值说明

<path> 必选参数,路径名称。

使用实例

2.4.5 mkdir

命令描述

创建文件夹。

语法结构

mkdir <path>。

取值说明

<path> 必选参数,路径名称。

● 使用实例

2.4.6 touch

命令描述

创建一个文件。

语法结构

touch <path>

取值说明

<path> 必选参数,路径名称。

使用实例

2.4.7 rmdir

命令描述

删除文件夹。

语法结构

rmdir <path>

取值说明

<path> 必选参数,路径名称。

使用实例

3应用

在项目的开发过程中,用户可参见 aw_shell.h文件创建自己的Shell命令。AWorks Shell 命令的注册又分为命令和命令集两种方式,如系统自带命令stack、clr、ls都是单一命令,而wifi则是命令集,命令集下又包含若干命令表。本文针对这两种方式,分别列举注册方法。

3.1注册Shell命令

以LED外设为例,注册三个控制LED的Shell命令:led_on、led_off和led_toggle。

1、首先定义led shell命令表,命令表实际是一个结构体数组,数组中每个元素就是一个shell命令对象,它包含命令名称、命令描述,和命令要执行的函数。如程序清单 6。

程序清单6 定义led shell命令表

\

2、定义 led shell 命令对应的功能函数 __shell_led_on、__shell_led_off和__shell_led_toggle。这三个函数定义基本相同,本文仅列出__shell_led_on函数定义如程序清单 7,其他两个函数定义将程序清单 7中的 aw_led_on() API 替换即可。

程序清单7 __shell_led_on函数定义

__shell_led_on 函数类型和 aw_shell_printf () API 说明请查阅 aw_shell.h。aw_led_on API说明请查阅 aw_led.h。该函数执行过程中需要匹配一个参数,所以 led shell命令使用时,要携带LED编号参数:"LED_RUN" 或者 "LED_ERR"。

3、 注册Shell命令。

程序清单8 注册led shell命令

AW_SHELL_REGISTER_CMDS 是注册shell 命令的宏函数,此过程将led shell命令插入总的shell 命令链表中。

打开shell Serial命令终端,建立连接。编译、烧写并启动程序,按下Tab键,可见 led shell命令已经注册成功如图5LED 命令。

图5 LED 命令

led_on

命令描述:点亮LED灯。

使用实例:

led_off

命令描述:关闭LED灯。

使用实例:

led_toggle

命令描述:翻转LED灯。

使用实例:

3.2注册Shell命令集

本文自定义一个demo shell命令集,在demo 命令集下包含func1、func2和func3三个命令。

1、定义命令集对象,命令集对象必须包括进入命令集名称、退出命令集名名称和命令集描述,其他属性为可选项,如程序清单 9。

程序清单9 shell命令集对象

2、定义demo shell命令集包含的命令表,如程序清单10。

程序清单10 demo shell命令集包含的命令表

3、定义命令表中 func1和func2命令对应的功能函数__demo_func1和__demo_func2,如程序清单 11和如程序清单 12。

程序清单11 __demo_func1函数定义

程序清单12 __demo_func2函数定义

4、定义命令表中 func3 命令对应的功能函数__demo_func3,如程序清单 13。

程序清单 13 __demo_func3函数定义

该函数定义较为复杂,执行过程中需要匹配选项 '-w'、'-r'、'-d',各个选项后必须携带固定数量的参数。

5、注册demo shell命令集。

程序清单14 注册shell命令集

AW_SHELL_REGISTER_CMDSET是注册命令集的宏函数,此过程将 .demo 命令集插入shell命令总链表中。

6、打开 Shell Serial 命令终端,建立连接。编译、烧写并启动程序,按下Tab键,可见 demo shell命令集已经注册成功如图 6。

图6 demo命令集

进入 .demo 命令集

按下Tab键,显示 .demo命令集包含的命令表,如图 7。

图7 demo命令集包含的命令表

func1命令

命令描述:打印输出。

使用实例:

func2命令

命令描述:打印输出。

\

使用实例:

func3命令

命令描述:打印输出

使用实例:

.exit

命令描述:退出 .demo 命令集。

使用实例:

本文使用的硬件平台为M1052_EV_Board开发板,购买可咨询ZLG销售人员;软件平台为 aworks_m105x_sdk_1.0.4-alpha软件包。

<上一页12

本文链接:AWorks编程:Shell交互界面

友情链接:

大悲咒经文 观音心经 佛经