0序言
物联网及嵌入式技术的发展带动了信息化与工业化的快速融合。作为一种新型产业模式,工业物联网(IndustrialInternetofThings,IIoT)在过去几年的研究和实践中遭到很大关注[1-2]。IIoT的迅速发展促使手动化检测系统的设计与研制成为新的科技热点。IIoT将传感网路与手动化系统相结合,已被用于多个行业,以提升生产力和安全性[3-4]。手动化检测系统在IIoT感知层与应用层间起着重要作用,随着涉及的业务需求日渐复杂,它的实现也显得越来越具挑战性。在工业应用场景中软件体系结构设计对于手动化系统的高效运行十分重要。先进的软件工程解决方案对手动化系统设计的效率影响很大[5]。XilinxZynqAPSoC通过集成处理器的软件可编程性与FPGA的硬件可编程性,实现了优异的设计灵活性,可提供面向嵌入式领域可重配置的软件工程解决方案,进而加速生产力。
BSP在嵌入式系统中饰演着关键角色,主要拿来适配特定类型的硬件平台。它一般包含了拿来配置可订制电路的硬件比特流、引导加载操作系统的基础支持代码以及显卡上所有设备的驱动程序。BSP开发目的在于屏蔽底层硬件构建嵌入式linux系统,提供操作系统与硬件驱动,使操作系统能稳定运行于显卡环境[6-7]。因为传统BSP设计存在不可或不易更改、难以复用以及设计流程复杂等问题,本文面向工业检测领域中的手动化系统,采用Xilinx提供的Vivado集成开发套件及用于建立和布署嵌入式系统到Xilinx全可编程处理器平台的PetaLinux工具,完成了基于Zynq-7000APSoC的BSP设计与实现。
BSP设计最终生成对应用层提供支撑的镜像文件为BOOT.BIN和image.ub。BSP的总体构架如图1所示。BOOT.BIN启动镜像主要负责系统硬件部份配置,用于上电后配置Zynq芯片的处理器系统(ProcessingSystem,PS)及可编程逻辑(ProgrammableLogic,PL),并为Linux操作系统打算运行环境。image.ub支持内核升级,功能可剪裁,由PeteLinux工具编译打包生成。
第一阶段引导加载器(FirstStageBootLoader构建嵌入式linux系统,FSBL)在启动储存区然后运行,启动储存区在ARM核上电启动时手动执行,负责加载FSBL至片上储存器(OnChipMemory,OCM)或在线性Flash储存介质上直接运行。对于运行在Zynq平台的Linux系统而言,第二阶段引导加载器(SecondStageBootLoaderlinux安全加固,SSBL)即为通用引导加载器(UniversalBootLoader,U-Boot)。Xilinx提供了用于适配不同系列Zynq显卡的U-Boot。基于Zynq-7000APSoC的BSP各个组成部份对应的功能说明如下:
(1)FSBL。FSBL负责初始化ZynqAPSoCPS端资源并使用硬件比特流文件配置PL端资源。
(2)硬件比特流。硬件比特流由Vivado集成开发工具建立的FPGA系统生成,包含FPGA编程信息,用于配置FPGA元件。
(3)SSBL。SSBL负责初始化显存和必要的外设资源,设置Linux内核的启动参数以及加载Linux系统到显存中运行。
(4)Linux内核镜像。Linux内核镜像是Linux操作系统的核心,提供硬件具象层、进程及显存管理、磁盘与文件系统控制等功能。
(5)根文件系统。根文件系统基于BusyBox源码建立,负责管理Linux系统启动及运行时所必需的目录和关键性文件。
(6)设备树。设备树文件用于描述部份硬件信息并在Linux系统加载设备驱动时传递配置参数。
2FPGA工程设计
传统工业检测设备中好多是符合RS232、RS422或RS485等串行数据通讯标准的设备。对于手动化检测系统而言,怎么面向那些检测设备提供可重配置的插口,成为一个须要解决的关键问题。许多传统工业设备所提供的功能在出厂时便已在固件中完成烧写定义,难以面向新的业务需求进行更改或扩充。但是,对于许多应用场景,固定功能的硬件会由于无法进行资源复用而造成成本提高。FPGA元件由于具有动态可构建的特点,被觉得是数字可演变硬件系统一个挺好的平台[8]。Xilinx使用砷化镓堆叠技术设计出了高容量的FPGA,用于满足低帧率、低延时及高带宽的应用需求。
2.1工程建立
在进行FPGA系统设计时常常须要重用已有的功能模块,于是类似于软件开发库文件的IP核应运而生。IP核一般是预先设计好的电路功能模块,主要被用于ASIC或FPGA系统。Xilinx提供了可联接到中级可扩充插口(AdvancedeXtensibleInterface,AXI)的通用异步收发器(UniversalAsynchronousReceiver/Transmitter,UART)Lite。每一个AXIUARTLiteIP核都可以实际对应一个串行通讯插口,为工业检测设备接入手动化检测系统提供支持。AXIUARTLiteIP核可以为异步串行数据传输提供控制器插口。它的设计目的在于和AXI4-Lite合同实现联接。AXIUARTLite的主要性能和优势[9]如下:
(1)基于AXI4-Lite尺寸的AXI插口;
(2)一个发送通道和一个接收通道(全双工);
(3)16个字符的发送和接收先进先出队列(FirstInputFirstOutput,FIFO);
(4)单个字符的数据比特位(5~8)数目可配置;
(5)校准位(奇偶或无)可配置;
(6)码率可配置。
Xilinx提供了Zynq7处理器系统IP封装,用于加速嵌入式系统的设计与配置。在Vivado集成开发环境中搭建基于Zynq-7000的大型手动化检测系统FPGA工程,工程结构如图2所示。工程中添加了ZYNQ7处理器系统模块、3个AXIUARTLite模块以及AXI互联模块等IP核,AXIInterconnectIP负责将一个或多个AXI储存器映射的主元件联接到一个或多个储存器映射的从元件。在进行FPGA系统设计时还预留了部份GPIO插口资源,便捷对系统功能进行扩充。
2.2资源配置
2.2.1PS端资源配置
按照实际应用需求配置ZynqXCXC77ZZ010010处理器系统,并规划XCXC77ZZ010010的PS端MIO资源。MIO是I/O外设联接的基础。XCXC77ZZ010010芯片通过MIO最多可以引出54个三态通用输入输出(GeneralPurposeInputOutput,GPIO)引脚。这种GPIO引脚都是在程序上可控的,而且支持动态更改配置。它们可以单独配置为输入、输出或中断的功能。PS端部份资源规划结果如表1所示。
2.2.2PL端资源配置
Zynq中的PL主要用于扩充功能。通过使用多个特殊引脚和讯号,可以将Zynq-7000内的PS和PL紧密或松散地耦合在一起[10]。XCXC77ZZ010010主芯片包含用于联接外设和个别特殊功能引脚的IO插口资源。特殊引脚最主要用于实现复位、状态指示、系统配置、模式配置等功能,通过特定引脚和功能复用引脚来实现。XCXC77ZZ010010的主要特殊引脚的配置说明如表2所示。
3PetaLinux工程设计
使用PetaLinux工具建立基于ZynqAPSoC的嵌入式Linux操作系统。PetaLinux工具包括订制的BSP生成工具、Linux配置工具以及软件开发工具。使用这种工具可以实现引导加载程序、Linux内核以及Linux应用程序的灵活配置,有利于开发者在Xilinx处理系统上订制、构建和调配嵌入式Linux解决方案。
3.1系统顶楼配置
基于Zynq工程模板创建PetaLinux工程,导出固件工程生成的硬件描述文件并进行系统顶楼配置,系统顶楼配置项包括Linux组件选择、自动配置项设置、子系统硬件手动配置项设置、内核引导参数设置、U-Boot设置、镜像文件打包配置等。其中子系统硬件手动配置项设置为必选项,容许自定义系统范围的硬件设置,如:以太网卡设置、Flash设置、串口设置、实时时钟(Real-TimeClock,RTC)芯片设置、SD卡设置等。Petalinux工具将按照系统顶楼配置解析硬件描述文件,便于更新设备树所需的硬件信息。
3.2Linux内核配置
Linux内核主要提供五大功能,分别为虚拟文件系统、网络服务、内存管理、进程管理和设备管理。Xilinx提供了免费的PetaLinux开发工具,使开发人员可以轻松在ZynqAPSoC上配置、构建和布署Linux系统及应用,提升软硬件设计开发效率。Linux内核配置基于Linux4.6.0内核进行,主要包括USB并口驱动配置、以太网驱动配置、GSM和CDMA调制混频器的USB驱动配置、Xilinx-uartlite并口驱动配置、DS1818BB2020气温传感驱动配置、GPIO支持等。PetaLinux工程基于开源的协作软件Yocto创建。Yocto旨在于创建可订制的嵌入式产品和统一嵌入式Linux系统的开发标准,它提供了许多模板、工具和方式,促使开发者无需关心硬件体系,防止许多重复工作,进而提升开发效率和产品质量。Linux内核的更新以打补丁的形式实现,内核源码的更新不影响已更改的系统配置项。
3.3设备树配置
Linux内核通过设备树文件获取板级硬件的细节信息因而加载设备驱动。设备树可以对硬件进行规范化描述,支持多平台内核镜像,具备简化的板卡端口,使用更少的平台描述代码以及更精简的设备驱动代码[11]。PetaLinux设备树配置关联文件主要有pcw.dtsi、plnx_aarch64-system.dts、system.dts、system-conf.dtsi、system-top.dts。那些文件统一由PetaLinux工程手动生成,开发者通过更改system-top.dts文件来满足特定的系统需求。基于Zynq-7000的大型手动化检测系统具备网口调试、RTC时钟支持、温温度检测、网络数据传输等功能。须要在system-top.dts文件中进行相应节点信息的更改或添加新的硬件描述节点。诸如在设备树配置文件system-top.dts中添加RTC时钟硬件描述信息及更改后的网卡芯片节点信息如下:
&i2c0{
status="okay";
rtc@51{
compatible="nxp,pcf8563";
reg=;
};
};
&gem0{
compatible="cdns,zynq-gem","cdns,gem";
status="okay";
phy-mode="rgmii-id";
xlnx,ptp-enet-clock=;
local-mac-address=[000a35001e53];
};
4BSP总体测试
在基于XCXC77ZZ010010的硬件平台中对BSP进行总体测试,设备上电后,处理器手动执行片内BootROM中的代码,初始化CPU和一些外围设备,便于读取烧写在NORFlash中的BOOT.BIN引导镜像,BOOT.BIN引导镜像加载储存在eMMC上image.ub到DDR3中运行。之后,文件系统中的mystartup.sh脚本启动储存在eMMC中的系统初始化脚本文件,执行系统初始化配置。PetaLinux系统部份启动信息如图3所示。
图3(a)为PL部份扩充的AXIUARTLite模块注册加载信息,在Linux下作为标准并口分别对应设备文件描述符ttyUL1、ttyUL2及ttyUL3。图3(b)为显存技术设备(MemoryTechnologyDevice,MTD)驱动加载信息,MTD是用于访问储存介质的Linux的子系统,此处表示NORFlash储存器,共创建了boot、bootenv、kernel以及spare4个MTD子分区,其中spare分区为空闲分区,可用于烧写设备惟一序列号。图3(c)为GSM模块USB插口联接测量信息及网口芯片启动状态信息,其中GSM模块对应Linux系统下的设备文件描述符ttyUSB0、ttyUSB1、ttyUSB2、ttyUSB3及ttyUSB4。
5推论
本文实现一种面向手动化检测系统的BSP设计方式,并完成了面向大型微型手动化检测系统的BSP设计与实践。用于评测BSP功能及性能的硬件平台选用XilinxZynqXCXC77ZZ010010芯片作为硬件系统主控制器,BSP部份针对手动化检测系统应具备的基本功能在嵌入式Linux系统中添加了相应的设备驱动,可充分满足工业检测领域的业务需求。实际测试结果表明,该BSP具有开发方便、通用性强、便于进行功能扩充和Linux内核升级、运行稳定等特性,验证了基于Zynq-7000的手动化检测系统BSP设计的可行性与正确性,对于工业手动化系统的BSP设计与实现有一定的参考价值和实际指导意义。因为手动化检测系统的功能日渐复杂,该BSP设计仍需在实践中不断进行构建。
参考文献
[1]ZHOUC,DAMIANON,WHISNERB,etal.IndustrialInternetofThings(IIoT)applicationsinundergroundcoalmines[J].MiningEngineering,2017,69(12):50-56.
[2]ARNOLDC.TheindustrialInternetofThingsfromamanagementperspective:asystematicreviewofcurrentliterature[J].JournalofEmergingTrendsinMarketing&Management,2017,1(1):8-21.
[3]KIELD,ARNOLDC,COLLISIM,etal.TheimpactoftheindustrialInternetofthingsonestablishedbusinessmodels[C].InternationalAssociationforManagementofTechnologyConference,2016.
[4]ZHONGD,LVH,HANJ,etal.ApracticalapplicationcombiningwirelesssensornetworksandInternetofThings:safetymanagementsystemfortowercranegroups[J].Sensors,2014,14(8):13794-13814.
[5]VYATKINV,ZOITLA.Advancedsoftwareengineeringinindustrialautomation[J].IEEETransactionsonIndustrialInformatics,2013,9(3):1234-1249.
[6]房泽欣.S3C2440处理器的嵌入式Linux系统的BSP设计与实现[D].北京:四川学院,2016.
[7]凌约雷,邱爱华,席隆,等.国产高可靠控制器BM3803MG的BSP设计[J].电子技术应用,2012,38(1):24-27.
[8]DOBAIR,SEKANINAL.TowardsevolvablesystemsbasedontheXilinxZynqplatform[C].2013IEEEInternationalConferenceonEvolvableSystems.IEEE,2013:89-95.
[9]Xilinx,Inc.AXIUARTLitev2.0LogiCOREIPProductGuide[EB/OL].(2017-05-05)[2018-02-01].https:///support/documentation/ip_documentation/axi_uartlite/v2_0/pg142-axi-uartlite.pdf.
[10]何宾.XilinxAllProgrammableZynq-7000SoC设计手册[M].南京:复旦学院出版社,2013.
[11]张茂天,张磊,郭晓,等.基于设备树的MPC8247嵌入式Linux系统开发[J].计算机应用,2013,33(5):1485-1488.
作者信息:
宋凯1,2ubuntu linux,高寒1,2
(1.上海工业学院信息学部,南京100124;2.成都工业学院南京市物联网软件与系统工程技术研究中心,上海100124)