物联网信息安全技术
上QQ阅读APP看书,第一时间看更新

智能硬件设备是IoT系统中重要的实体要素,也是网络空间和现实世界的衔接点。目前全球有上百亿台智能硬件设备同时联网,设备厂商、应用场景和系列型号繁多,为有利于后续安全知识和技术的学习,读者需要对智能硬件设备的共性和个性进行基本了解。因此,本节将自下向上地按照智能硬件设备的架构,从底层硬件资源、基础操作系统和功能应用这3个方面进行介绍,如图1-12所示。

图1-12 智能硬件设备的架构

其中,针对底层硬件资源重点介绍设备的处理器芯片和指令集,针对基础操作系统重点介绍系统类型和常见命令,针对功能应用重点介绍应用形态和场景差异。智能硬件设备组成要素如图1-13所示。

图1-13 智能硬件设备组成要素

如前所述,IoT由“端—管—云”构成。为便于读者理解,本节统一介绍智能设备和IoT通信管道的网关传输设备硬件资源,后文不赘述。对智能设备而言,其核心硬件资源主要包括传感器和处理器芯片,本节重点介绍处理器芯片的相关知识,对传感器不予过多讨论。

目前,提供IoT设备处理器芯片的厂商有两大类:一类是通信芯片提供商,包括高通(Qualcomm)、博通(Broadcom)、联发科(MediaTek)等公司,无线路由器芯片大多由这些公司提供;另一类是智能设备芯片提供商,一些主流IoT厂商自己提供芯片及集成解决方案(SoC或模组),如小米、华为、苹果等厂商。就硬件特点而言,IoT设备处理器芯片本质上仍然是芯片,只是比传统芯片更具指向性,可应用于众多面向行业场景的智能设备中,需要配合各种各样的应用解决方案。同时,IoT设备处理器芯片的智能化、高速化以及安全性成为关注焦点,AIoT芯片、5G芯片等成为近几年的热点。

常见的IoT设备处理器芯片处理器架构有x86、ARM、MIPS和Power PC(PPC),为便于读者理解,我们先给出指令集相关的一些基本概念。

(1)复杂指令集计算机(Complex Instruction Set Computer,CISC)。指令系统庞大,指令功能复杂,指令格式、寻址方式多,每条指令的长度并不固定,x86就是典型的CISC架构。

(2)精简指令集计算机(Reduced Instruction Set Computer,RISC)。指令数量少且指令功能相对简单,指令长度固定。ARM、MIPS和PPC大都采用RISC。

(3)大端模式(Big-Endian)。数据的高字节保存在内存的低地址中,而数据的低字节保存在内存的高地址中,ARM、MIPS和PPC通常采用大端模式。

(4)小端模式(Little-Endian)。数据的高字节保存在内存的高地址中,而数据的低字节保存在内存的低地址中,x86是典型的小端模式。

接下来我们介绍ARM、MIPS和PPC指令集。

1.ARM指令集

(1)ARM指令集的特点。ARM(Advanced RISC Machine)为RISC处理器架构,广泛应用于嵌入式系统设计。其指令集的主要特点如下。

指令长度固定为4字节,即32位。

使用寄存器。大量数据操作在寄存器中完成,指令执行速度快。

寻址方式灵活简单,执行效率高。

采用流水线处理方式,实现指令集并行操作。

(2)ARM通用寄存器的用途。ARM通用寄存器分为三类:未分组寄存器(R0~R7)、分组寄存器(R8~R14)和程序计数器PC(R15)。

ARM通用寄存器有一些使用规则,如表1-2所示。

表1-2 ARM通用寄存器的使用规则

若函数的参数少于或等于4,参数由R0、R1、R2和R3这4个寄存器传递;若参数个数大于4,则大于4的部分通过堆栈进行传递。如果函数返回结果为一个32位的整数,那么用R0存储返回值;如果函数返回结果为一个64位的整数,那么可以用R0和R1存储返回值。

(3)ARM指令集的分类和功能。ARM指令集可分为跳转指令、数据处理指令、程序状态寄存器(Program Status Register,PSR)处理指令、加载/存储指令、协处理器指令和异常指令六大类。表1-3简要总结了ARM指令集中的主要指令及其功能。读者如需进一步学习,可以查阅相关资料。

表1-3 ARM指令集中的主要指令及其功能

此外,ARM指令集中的指令会根据程序状态寄存器(CPSR)条件码的状态和指令的条件域有条件地执行,例如,B可以加上后缀EQ(BEQ)表示相等则跳转。指令条件码如表1-4所示。

表1-4 指令条件码

2.MIPS指令集

(1)MIPS指令集的特点。MIPS指令集的主要特点如下。

指令均为32位编码,固定为4字节指令长度。

内存中的数据访问必须严格对齐(至少4字节对齐)。

跳转指令只有26位目标地址,加上2位对齐位,可寻址28位空间,即256MB。

条件分支指令只有16位跳转地址,加上2位对齐位,可寻址18位空间,即256KB。

默认函数的返回地址不存放到栈中,而存放到$31($ra)寄存器中。

采用了高度的流水线,最重要的一个效应就是分支延迟效应:当执行跳转指令时,跳转指令还没有执行,分支后面的指令就执行了。例如:

move $a0,$s1
jalr src
move $a0,$s0

其中,在执行位于第一行的跳转指令时,位于第三行的指令已经执行完了,因此跳转后的函数参数a0的值为s0而不是s1。

(2)MIPS通用寄存器的用途。MIPS有32个通用寄存器(可以用编号$0~$31表示)。表1-5所示为MIPS通用寄存器的功能及使用规则。

表1-5 MIPS通用寄存器的功能及使用规则

其中,$a0~$a3用于函数调用传递参数,如果不够用,那么用栈传递多余的参数;$v0~$v1用于传递返回值,如果不够用,那么用栈传递多余的返回值。

(3)MIPS指令的分类与功能。MIPS指令共32位,最高6位为操作码,剩下的26位表示指令类型,分为R型、I型和J型3类。

R型指令组成如表1-6所示。

表1-6 R型指令组成

其中,op表示操作码;rs表示第一个源操作数寄存器;rt表示第二个源操作数寄存器;rd表示目的寄存器;shamt表示位移量;funct表示功能码。

R型常见指令及示例如表1-7所示。

表1-7 R型常见指令及示例

I型指令用于加载/存储字节、半字、字、双字,还可用于条件分支、跳转、跳转并链接寄存器。I型指令的组成如表1-8所示。

表1-8 I型指令的组成

I型常见指令及示例如表1-9所示。

表1-9 I型常见指令及示例

J型指令用于跳转、跳转并链接、陷阱和从异常中返回。J型指令组成如表1-10所示。

表1-10 J型指令组成

J型常见指令及示例如表1-11所示。

表1-11 J型常见指令及示例

特别地,R、I、J这3类MIPS指令类型中,都存在不少分支跳转指令,如表1-12所示。

表1-12 分支跳转指令及示例

3.PPC指令集

(1)PPC指令集的特点。PPC指令集的特点如下。

大量使用寄存器,数据操作大多在寄存器中完成,指令执行速度更快。

指令长度固定,都使用定长的32位指令。

采用流水线处理方式。

(2)PPC通用寄存器的用途。PPC有32个通用寄存器(可以用编号r0~r31表示),表1-13所示为PPC通用寄存器的功能及默认用途。

表1-13 PPC通用寄存器的功能及默认用途

PPC还有多个专用寄存器,其专用寄存器功能及默认用途如表1-14所示。

表1-14 PPC专用寄存器功能及默认用途

(3)PPC指令分类与功能。PPC指令分为存储/加载指令、转移指令、特殊寄存器传送指令、系统调用指令等类型,PPC主要指令及其功能具体如表1-15所示。

表1-15 PPC主要指令及其功能

与传统嵌入式操作系统相比,智能设备内置的操作系统弱化了对实时性的严格区分,增加了对无线连接和IoT协议种类的支持。部分IoT设备的操作系统如表1-16所示。可以看到,IoT设备(智能设备+网关传输设备)的操作系统可以分为两大类:一类是使用率较高的标准架构操作系统,如嵌入式Linux、Android、VxWorks、QNX、实时操作系统(Real Time Operating System,RTOS)等;另一类是专用IoT操作系统,如智能穿戴设备中的原生态WearOS(类似于Android)、修改版WearOS、watchOS等。此外,因供电受限等原因,门锁、单车等设备以单片机为主,大多没有集成上述操作系统。

表1-16 部分IoT设备的操作系统

下面重点介绍部分操作系统及其常见命令。

1.嵌入式Linux

嵌入式Linux是将Linux系统进行裁剪修改,专门为某个应用场景而设计实现的操作系统。嵌入式Linux和传统PC Linux在内核、函数库及上层应用程序上没有本质区别,它们之间的区别更多在于底层驱动程序是本地编译的还是交叉编译的。

嵌入式Linux常用的工具和命令(如ls、cat和ping等)一般压缩集成到BusyBox的单一可执行文件中。BusyBox提供了一个比较完善的Shell(命令行会话)环境,可适用于各种小的嵌入式操作系统。嵌入式Linux的Shell可以使用ls、cat等命令,实际上这些命令不是独立的执行程序,而是指向BusyBox的一个链接。表1-17所示为一些常见的嵌入式Linux命令。

表1-17 常见的嵌入式Linux命令

2.Android和Android Things

Android是一种基于Linux内核的开源操作系统,主要应用于移动设备(如手机、平板电脑等),由谷歌公司和开放手机联盟开发。目前,Android已逐渐扩展到IoT领域,包括智能电视(Android TV)、智能车载系统(Android Auto)、智能穿戴设备(WearOS)等。基于IoT特殊应用场景,谷歌公司推出了全新的IoT操作系统Android Things。Android Things的前身是IoT平台Brillo,除了继承Brillo的常见功能,Android Things还加入了Android Studio、Android SDK、Google Play服务以及谷歌云平台等Android开发者熟悉的工具和服务。基于Android Things,Android开发者可以使用Android API和谷歌公司提供的服务轻松构建智能联网设备。

Android的主要开发和调试工具为adb。adb提供了一系列用于调试Android设备的shell命令。adb调试工具命令示例如图1-14所示。

图1-14 adb调试工具命令示例

表1-18所示为一些常见的adb shell命令。

表1-18 一些常见的adb shell命令

3.VxWorks

VxWorks是美国风河(Wind River)公司推出的实时操作系统。VxWorks的shell界面如图1-15所示。

图1-15 VxWorks的shell界面

为了便于程序开发,风河公司提供了VxWorks集成开发环境Tornado(VxWorks 6以后的集成开发环境称为Workbench)。开发者可以通过Tornado编辑、编译、链接和调试VxWorks代码。图1-16所示为集成开发环境Tornado界面。

图1-16 集成开发环境Tornado界面

VxWorks shell又称为内核shell,可以通过串口或者Telnet连接。表1-19所示为一些常见的VxWorks shell命令。

表1-19 常见的VxWorks shell命令

本节将更多地从软件层面介绍智能硬件设备的功能应用。

1.应用类型及形态

智能硬件设备的功能应用主要分为两类,如图1-17所示。一是完成感知层的功能,对传感器采集的数据进行转换和预处理,包括摄像头视频数据、智能音响音频数据、穿戴设备的健康数据、GPS数据等;二是发挥应用层的部分功能(边缘计算),配合云端完成IoT数据的局部分析和业务处理,在此基础上围绕场景应用得到相关结论或采取相应动作,同时将原始数据和上述分析计算得到的结果数据一并传输到云端。这些功能在应用形态上大多以软件程序的方式存在,如Linux的应用程序、Android的应用程序等。

图1-17 智能硬件设备的功能应用类型及形态

2.应用差异性

前文提到,智能硬件设备应用于社会生活的各个领域,典型场景如家居、汽车、安防、穿戴、共享单车、物流等,不同行业的智能硬件设备甚至是不同厂商的类似智能硬件设备差异较大。这些差异性体现在包括智能硬件设备的部署方式、外在形状、体积大小、计算资源、通信方式、耗电情况等环节,如图1-18所示。了解这些差异性的存在,能为后续安全原理知识和分析技术的学习打下基础。

图1-18 智能硬件设备的应用场景与差异环节