Simics环境下故障注入的研究与实现

2015-12-07 06:18韩德强冯云贺王宗侠高雪园
电子技术应用 2015年1期
关键词:故障注入寄存器命令

韩德强,冯云贺,王宗侠,高雪园

(北京工业大学 计算机学院,北京100124)

Simics环境下故障注入的研究与实现

韩德强,冯云贺,王宗侠,高雪园

(北京工业大学 计算机学院,北京100124)

主要论述了在Simics全系统仿真环境下,对VxWorks嵌入式操作系统的串口故障注入以及网络故障注入的相关研究。Simics允许开发者根据需求自定义处理器、存储器、板级硬件和复杂网络系统等任意规模的硬件目标设备模型。运行在真实硬件目标设备上的底层软件、中间层软件和上层软件完全不用修改即可运行在自定义的Simics硬件目标设备模型上。因此,Simics不仅能够进行仿真硬件级的故障注入,同时还可以全面地检测软件的运行状态。

全系统仿真环境;Simics;VxWorks嵌入式操作系统;故障注入

0 引言

随着嵌入式技术的不断发展,嵌入式系统越来越多地应用在工业控制、航空航天等对系统的可靠性和容错性要求极高的领域中。故障注入技术是评价嵌入式系统的可靠性与容错性的一项重要手段。该技术是一种可靠性验证技术,通过受控实验向系统中刻意引入故障,并观察系统中存在故障时的行为。故障注入技术一般分为基于物理硬件的故障注入、基于软件的故障注入以及基于仿真的故障注入[1]。

基于物理硬件的故障注入通过改变物理环境参数(重离子辐射、电磁干扰、激光照射、电源干扰等)干扰硬件或者通过改变集成电路芯片管脚输入值以达到故障注入的效果[2]。基于软件的故障注入在软件级生成故障,譬如通过应用软件生成故障、通过底层软件(如操作系统等)生成故障。基于仿真的故障注入技术是在模拟测试的计算机原型上,通过在仿真过程中改变逻辑值达到故障注入的效果[2]。

基于仿真的故障注入技术有很多优点。第一,该类型的故障注入可以在不同的抽象层次上进行仿真,支持不同的故障模式。第二,基于仿真的故障注入具有非入侵式特点,从目标系统的角度来看,它是即刻且透明地发生的。第三,基于仿真的故障注入能够实现目标系统和故障注入机制的可观测性以及可控制性。

本文论述的串口和网络相关的故障注入基于风河系统公司提供的Model Library Intel Core i7 with X58 and ICH10 4.6(下文简称x86-X58-ICH10)硬件目标设备模型。该硬件目标设备模型可以仿真一个具有Intel Core i7处理器、X58北桥高速芯片组以及 ICH10南桥的硬件系统。开发者不必花费大量的时间和精力创建硬件模型。该模型在发布之前经过了缜密的内部测试,即使在实际应用中出现了bug,风河系统公司也能够及时修复,因此该模型的质量有保障。由此可见,使用 x86-X58-ICH10硬件模型可以避免基于仿真的故障注入技术带来的局限性。

1 串口相关的故障注入

x86-X58-ICH10硬件模型使用的是 NS16550 UART(Universal Asynchronous Receiver/Transmitter,通用异步收发器)。在 Simics上查看 NS16550的寄存器值,并参考NS16550数据手册,整理NS16550的寄存器详细信息如表1所示[3]。

表1 NS16550寄存器表

开发者可以在Simics全系统仿真环境下,模拟串口相关的寄存器因受到外界物理环境因素干预,寄存器值发生改变,从而引发寄存器级的故障。以LCR线路控制寄存器为例,说明此类故障注入的具体操作方法。LCR线路控制寄存器格式如表2所示。

表2 LCR线路控制寄存器格式

在Simics命令行窗口中查看com[0]对应的 LCR的值为3,即字符长度为8:

修改LCR寄存器的值为1,即将原字符长度由8设置为6,停止位设置为0。在VxWorks串口控制台上执行help指令,由于发送和接收字符长度不匹配,所以串口接收字符显示为乱码,如图1所示。

图1 对LCR寄存器进行故障注入

恢复LCR寄存器的值为3,串口控制台可以正常接收help命令,如图2所示。

完成上述活动后,最终收集到的输入与输出数据如表2所示。在此基础上,下一部分将应用索洛模型完成SR与SRR的测量。

图2 恢复LCR寄存器初始值

2 网络相关的故障注入

x86-X58-ICH10硬件模型可以支持多种以太网控制器[4],本文论述的是基于ICH10南桥内嵌的82567LF-2[5]以太网控制器的故障注入。

2.1VxWorks操作系统访问真实物理网络的故障注入

Simics支持多种方式与开发主机进行真实物理网路互联,譬如端口转发、网络桥接、IP路由和主机直连等[6]。此处采用端口转发的方式将x86-X58-ICH10硬件模型与真实物理网络连接,并使用 Simics命令行接口提供的相关命令进行故障注入。

首先,启动viper-vxworks-6.9.simics脚本,加载默认IP地址为172.90.0.21的VxWorks文件,并在Simics命令行窗口中执行如下命令:

上述命令创建了具有类似交换机功能的以太网连接器default_eth_switch0,并将default_eth_switch0与硬件模型上的以太网接口相连。然后创建了标准服务节点组件default_service_node0,将之与default_eth_switch0相连,并将default_eth_switch0连接器的网关设置为 172.90.0.1/24。接着完成了主机到运行在硬件平台上 VxWorks之间的FTP、SSH、Telnet、HTTP的端口映射。最后在default_eth_ switch0.link上启动了DNS功能。

执行如下命令,在VxWorks上添加到开发主机上的网关:

启动Windows 7开发主机上的telnet服务。主机端开启telnet服务后,在VxWorks执行telnet“172.21.28.208”命令,登录开发主机,如图3所示。

图3 VxWorks远程登录到Windows 7开发主机

在 Simics命令行窗口中设置 Wireshark软件的安装路径,并启动 Wireshark软件,监控 default_eth_switch0的网络状态。

对数据包接收控制寄存器RCTL进行故障注入。RCTL是一个 32位寄存器,负责控制 MAC接收端的相关功能。在Simics命令行窗口中执行如下命令,查看RCTL寄存器的值:

将RCTL寄存器的值转化成16进制为 04008002H,查询RCTL寄存器格式可知,RCTL的接收允许位(RCTL.EN)被设置为1,即允许接收网络数据包。

在VxWorks上执行“telnet 172.21.28.110”命令,telnet到真实网络中 IP地址为172.21.28.110的 Windows 7主机,同时启动Wireshark软件进行抓包。telnet成功后,执行chkdsk命令。在chkdsk命令的执行过程中,执行如下命令进行故障注入,即重新赋值RCTL为04008000H,将接收允许位置0,不允许接收网络数据包:

如图4所示,在25 s时对RCTL寄存器进行了故障注入。在25 s之前,网络数据包能够正常收发。故障注入完成后,VxWorks端不能正常接收网络数据包,Windows 7主机端将间隔 3 s、6 s、12 s、24 s后尝试重新向VxWorks端发送数据包。具体地,在 26 s左右时,Windows 7主机端第一次尝试向 VxWorks端重新发送网络数据包。然后在29 s、35 s、47 s、71 s左右时,分别进行了第2次、第3次、第4次和第5次重新向VxWorks端发送网络数据包。而在26 s~71 s之间的时间段内,收发成功的网络数据包数量为0。由于在第4次到第5次重新发送之间,恢复了RCTL寄存器的初始值,所以第5次重新发送网络数据包成功。

图4 RCTL寄存器故障注入过程中的网络数据流量图

同样,可以对网络数据包发送控制寄存器TCTL进行故障注入。其故障注入过程和结果与RCTL故障注入非常类似,在此不再赘述。

2.2VxWorks操作系统访问虚拟网络的故障注入

启动 viper-multi-vxworks-6.9.simics脚本,该脚本将加载两个默认IP地址为172.90.0.21的VxWorks映像文件VxWorks_A和VxWorks_B。

首先,将 VxWorks_B的 IP地址设置为 172.90.0.22,在VxWorks_B上执行如下命令:

在 Simics命令行窗口中执行如下命令,加载网络连接器模块:

在 Simics命令行窗口中使用命令创建集线器组件,并命名为myhub;然后将VxWorks_A和VxWorks_B的网络接口与myhub连接,并查看myhub的运行状态:

在 Simics命令行窗口中执行如下命令,使用 pcapdump工具在myhub上抓取网络数据包,并保存为.pcap格式的文件:

接着在 VxWorks_B上执行如下命令,连续 ping 20次VxWorks_A:

然后停止使用pcap-dump抓包,执行如下命令。抓取到的网络数据包 my_package.pcap文件保存在用户设置的simics-workspace目录下:

在Simics命令行窗口中执行如下命令,加载网络流量注入组件,新建网络数据包注入组件 myinjector。使用Wireshark工具监控 myhub上的网络数据包,并向 myhub注入捕捉到的my_package.pcap网络数据包:

然后,在 VxWorks_B上执行如下命令,telnet到Vx-Works_A上,输入用户名target和密码password。telnet登录成功后,执行help命令。help命令执行完毕后,继续执行exit命令,退出 telnet登录。同时,在 Simics命令行窗口中执行如下命令,停止向 myhub注入 my_package.pcap网络数据包,并将 Wireshark抓到的网络数据包保存为inject_package.pcapng文件:

使用 Wireshark统计工具分析 inject_package.pcapng文件的结果如图5所示。图中的实线代表myhub上流经的总的数据包。由于my_package.pcap截获的是执行ping命令时的数据包,ping属于ICMP协议,阴影部分表示外部注入的 my_package.pcap数据包。脉冲状的竖线表示VxWorks_B执行telnet时流经myhub上的数据包,这些数据包属于TCP协议,非ICMP协议的数据包。

由此可见,自定义的数据包可以成功注入到基于Simics的虚拟网络中,用来模拟网络过载等网络故障。这种方法有助于开发者分析网络故障、排除故障,提高网络系统的稳定性和健壮性。

图5 Wireshark工具的I/O Graphs统计图

3 总结

本文主要论述了在 Simics全系统仿真环境下,对VxWorks嵌入式操作系统的串口故障注入、VxWorks访问真实网络的故障注入以及 VxWorks访问真实网络的故障注入的原理和具体实现方法。这种基于仿真的故障注入技术对于研究嵌入式系统的可靠性和容错性具有一定的参考意义。

[1]吴正辉,金丰,银恺.某型起落架转弯控制器余度设计及机内测试[J].机械设计与研究,2013,29(3):116.

[2]李林虎.基于编译中间代码的关键变量容错技术[D].长沙:国防科学技术大学,2010.

[3]National Semiconductor.NS16550N datasheet[Z].2003:1-5.

[4]Wind River.Wind river Simics x86-X58-ICH10 target guide 4.6[Z].2014:7-8.

[5]Intel.82567 GbE physical layer transceiver(PHY)[Z]. 2009:6-11.

[6]Wind River.Wind river Simics ethernet networking user′s guide 4.6[Z].2012:6-11.

Research and implementation of fault injections under Simics environment

Han Deqiang,Feng Yunhe,Wang Zongxia,Gao Xueyuan
(College of Computer,Beijing University of Technology,Beijing 100124,China)

This paper discusses the research of the VxWorks embedded operating system′s serial port fault injection and network fault injection under Simics full system simulation environment.Simics enables developers to customize processors,memory, board-level hardware and complex network systems and any-size hardware target device models based on their needs.The underlying software,middle-layer software and upper-layer software running on real hardware target devices can run on Simics target hardware device models without any modification.Therefore,Simics not only enables hardware-level fault injection simulation,but also can fully detect the operating state of the software.

full system simulation environment;Simics;VxWorks embedded operating system;fault injection

TP316.5

A

0258-7998(2015)01-0021-04

10.16157/j.cnki.0258-7998.2014083003171

2014-08-30)

韩德强(1966-),男,高级工程师,硕士生导师,主要研究方向:嵌入式系统。

猜你喜欢
故障注入寄存器命令
模拟训练装备故障注入系统研究
只听主人的命令
STM32和51单片机寄存器映射原理异同分析
Lite寄存器模型的设计与实现
SM4算法前四轮约减轮故障注入分析
采用修改-回放原理的1553B故障注入方法
移防命令下达后
列车MVB总线故障注入研究
这是人民的命令
高速数模转换器AD9779/AD9788的应用