ARM裸机-14.shell原理和问答机制引入

本文深入探讨了ARM裸机环境下shell的工作原理,包括其启动流程、命令解析和执行机制。同时,文章还介绍了shell的问答机制,帮助读者更好地理解和应用这一重要的系统交互工具。
摘要由CSDN通过智能技术生成
16.1.shell是什么鬼
16.1.1、壳与封装
(1)shell就是壳的意思,在计算机中经常提到shell是用户操作接口的意思。
(2)因为计算机程序本身很复杂,里面的实现和外面的调用必须分开。接口本身就是对内部复杂的实现的一种封装,外部只需要通过接口就可以很容易的实现效果,但是却不用理会内部实现的复杂性和原理。

16.1.2、程序或操作系统的用户接口
(1)操作系统运行起来后都会给用户提供一个操作界面,这个操作界面就叫shell。用户可以通过shell来调用操作系统内部的复杂实现。
(2)shell编程就是在shell层次上进行编程。譬如linux中的脚本编程、windows中的批处理。

16.1.3、两种shell:GUI和cmdline
(1)GUI(图形用户界面),特点是操作简单、易学易用,适合使用电脑来工作的人。
(2)cmdline(命令行界面),譬如linux的终端和windows的cmd,特点是不易用易学,优点是可以进行方便的shell编程,适合做开发的人。
(3)展望:将来的shell应该是声音图像等接口的。

16.1.4、shell的运行原理:由消息接收、解析、执行构成的死循环
(1)我们主要分析命令行shell的运行原理。
(2)命令行shell其实就是一个死循环。这个死循环包含3个模块,这3个模块是串联的,分别是命令接收、命令解析、命令执行。
(3)命令行有一个标准命令集,用户在操作的时候必须知道自己想要的操作用通过哪个命令来实现,不能随便输入命令。如果用户输入了一个不是标准命令的命令(不能识别的命令),提示用户这不是一个合法命令,然后重新回到命令行让用户输入下一个命令。
(4)用户输入命令的界面是一个命令行,命令行的意思就是用户输入的命令是以行为单位的,更好理解的说用户输入的命令在用户按下回车键之后就算是结束了,shell可以开始接收了。

16.1.5、shell举例:uboot、linux终端、Windows图形界面等
(1)常见的shell,uboot就是一个裸机程序构成的shell(本课程要完成的shell也是裸机的),clinux中断和windows的cmd是操作系统下的命令行shell。windows图形界面、ubuntu图形界面、android的图形界面这些都是图形界面的shell。突然想到另一个类型的shell,网页类型的shell,典型代表就是路由器。


16.2.shell实战1-从零写最简单shell
16.2.1、使用printf和scanf做输入回显
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include <stdio.h>
#include <string.h>
 
 
#define MAX_LINE_LENGTH        256         // 命令行长度,命令不能超过这个长度
 
 
int  main( void )
{
     char  str[MAX_LINE_LENGTH];         // 用来存放用户输入的命令内容
     
     while  (1)
     {
         // 打印命令行提示符,注意不能加换行
         printf ( "aston#" );
         // 清除str数组以存放新的字符串
         memset (str, 0,  sizeof (str));
         // shell第一步:获取用户输入的命令
         scanf ( "%s" , str);
         // shell第二步:解析用户输入命令
         
         // shell第三步:处理用户输入命令
         printf ( "%s\n" , str);
     }
 
     return  0;
}

16.2.2、定义简单命令集
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
#include <stdio.h>
#include <string.h>
 
 
#define MAX_LINE_LENGTH        256         // 命令行长度,命令不能超过这个长度
 
 
 
// 宏定义一些标准命令
#define led                    "led"
#define lcd                    "lcd"
#define pwm                    "pwm"
#define CMD_NUM                3           // 当前系统定义的命令数 
 
char  g_cmdset[CMD_NUM][MAX_LINE_LENGTH];
 
 
// 初始化命令列表
static  void  init_cmd_set( void )
{
     memset (g_cmdset, 0,  sizeof (g_cmdset));        // 先全部清零
     strcpy (g_cmdset[0], led);
     strcpy (g_cmdset[1], lcd);
     strcpy (g_cmdset[2], pwm);
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值