基于TMS320C6678的国产DSP操作系统引导程序设计
2018-02-23马云游夏
马云 游夏
摘要 以IMS32UC6678为代表的鬲性能DSP芯片,不仅具有快速的数据处理能力,而且提供了丰富的片上接口资源。DSP应用的开发也从单跑应用程序过渡到操作系统时代,多核操作系统的引导过程要比单个应用的引导更加复杂、更具有挑战性,是DSP的关键技术之一。本文针对国产DSP操作系统提出了一种引导方法,并在星载、车载和舰载等DSP设备中得到了成功的验证。
【关键词】TMS320C6678 引导程序 DSP 操作系统
1 引言
TMS320C6678是德州仪器(TI)公司全新架构的TMS320C66x数字信号处理器。该芯片基于KeyStone多内核sOc架构实现,内部集成了最多8个C66x核,单核的最高工作频率1.25 GHz,单核即可实现40 GMAC的定点处理或20 GFLOP的浮点处理能力。在雷达信号处理、水声设备、电子对抗、图形图像处理、无线和移动通信等领域取得了广泛的应用。
在DSP的实际应用中,系统的启动过程要脱离仿真器件,实现自动加载。特别是对DSP操作系统来说,引导过程不仅要完成对镜像文件的读取、解析、复制到内存,还要考虑到操作系统的内存划分和映射机制、芯片内不同核之间的同步等因素,因此非常有必要研究DSP操作系统的引导方法。
2 DSP启动方式
通常TMS320C6678是通过RBL (ROMBoot Loader)启动的,RBL是固化在DSP芯片内一段程序,永久地存储在DSP的ROM中,起始地址是Ox02BOOOOO,大小共计128Kbytes,用户不能对其修改。在芯片上电复位后,RBL负责将操作系统镜像或用户应用程序镜像从外部主机或内部的非易失性存储器( EEPROM、FLASH)传送到内部的高速内存(Cache、MSM或DDR)中,并跳转到入口地址运行程序。
为了适应不同应用的需要,TMS320C6678提供了多种启动方式,可以通过网卡、PCIe、SRIO、HyperLink接口从主机下载镜像,也可以通过EMIF、SPI、120接口从外部存储器下载镜像,完成启动过程。这里的主机可以是通用的PC机,也可以是具有上述接口(网卡、PCIe、SRIO等)的嵌入式系统,特别是多节点DSP应用中,使用一个DSP节点作为主机启动其它DSP节点是一种非常高效的引导方式。
TMS320C6678芯片有13个外部引脚BOOTMODE[12:0]用于引导方式的设置。上电后,内核O执行RBL代码,并采样这13个引脚的状态,决定采用哪种引导方式。管脚配置共分三类,分别是BOOTMODE[2:0]用于选择引导外设接口,BOOTMODE[9:3]用于设置外设接口的初始化参数。BOOTMODE[12:10]用于PLL的初始化配置。
3 传统启动方式的缺陷
虽然可以通过RBL直接加载应用,但是在实际应用过程中存在众多的限制性因素使其无法满足要求,主要体现在:
3.1 文件格式的限制
RBL是固化在DSP内部的一段程序,非常精简,但是无法直接对ELF格式的文件进行解析。为了实现镜像的加载,必须通过TI提供的一系列的工具将ELF文件转换成特定的格式,而且不同接口转换后的格式也不尽相同,例如通过网络、SPI、I2C、EMIF等加载必须通过不同的方法完成转换,通用性极差。
在启动过程中还需配置引导表( BootTable)、启动参数表(Boot Parameter Table)和启动配置表(Boot Config Table)等众多参数,对不熟悉硬件的DSP开发人员来说难以使用。
3.2 硬件配置的限制
对于实际应用中的DSP板卡来说,外设接口(如SRIO、网卡、PCIe等)通常是通过交换芯片与外部连接,交换芯片在使用前是需要配置的。在RBL中不提供对交换芯片的配置功能,也就意味着带有交换芯片的板卡根本无法通过这些外设接口加载。
带有操作系统的镜像,特别支持网络、动态加卸载、符号表和文件系统等功能的镜像文件通常较大,镜像代码段和操作系统的运行空间需要使用DDR存储器,特别是当启动多核时,Cache和共享内存不具备加载和运行功能复杂的操作系统的条件。而DSP芯片启动过程中不会初始化DDR,也就意味着无法完成镜像的加载。
3.3 操作系统的限制
操作系统不同于简单的应用,操作系统中存在虚拟地址和多核间的同步问题,传统的加载方式无法识别操作系统内部的虚拟地址和物理地址,在解析和镜像搬移的过程中会将数据搬移到虚拟地址,这样操作系统根本无法运行,RBL启动仅限于单核,也不考虑多核间的同步问题。
4 国产DSP操作系统
本文的引导是针对于带有操作系统的镜像,操作系统选用国产的锐华DSP实时操作系统,该操作系统提供了面向主流DSP芯片的高性能国产基础软件解决方案,其内核完全自主设计,并针对TI公司TMS320C6678芯片进行了系统优化。
锐华DSP实时操作系统使用AMP多核并行处理架构,操作系统部署在每个DSP核上,每个核都有自己的存储空间和任务队列、上下文操作空间、堆栈等,核间提供了多核屏障、自旋锁等多核同步和资源保护机制。锐华DSP实时操作系统具有强实时、高可靠特征,基于微内核及组件技术,能根据实际应用需要对操作系统内核进行配置、裁剪、扩展与定制。同时支持模块的动态加卸载,易于系统重构及应用升级,解决了多核DSP难于使用的问题,改变了原有的DSP处理器编程模式,提高了用户的软件开发效率。
銳华DSP实时操作系统的所有核使用同一份映像代码,每个核根据核号执行不同的代码分支。操作系统将DDR内存分为2块大的区域,高端为多核共享区,低端为每个核的私有区。其中,引导、系统代码、共享数据以及用户自定义内存均位于共享区,每个核的堆和栈位于私有区。
在私有区中,每个核使用虚拟地址,也就是说每个核的物理地址不同,但逻辑地址是相同的,因此在操作系统引导方案设计过程中必须考虑这一因素。
多核加载功能是在操作系统中实现的,引导程序首先加载核O,对于另外7个核来说,主要是挂载IPC中断,然后进入等待状态。当核0启动后,通过系统参数读取哪些核需要被引导,然后向需要被引导的核发送IPC中断,其它核收到中断后,即跳到入口地址,并完成多核的加载过程。
5 引导流程
针对传统启动方式的缺陷和实时操作系統的特点,本文设计了一种新的二次引导的加载程序(RBOOT)。与其它的二次引导不同,RBOOT重点考虑了操作系统参数、内存构架、板卡外设配置等。RBOOT可以作为通用的DSP芯片引导程序,无需为专门的DSP板卡或特殊的硬件设备定制,具有非常好的通用性。
RBOOT可以固化在外部存储器(EEPROM. NOR Flash. NAND Flash),通过RBL引导。RBOOT支持主机启动和存储器启动,包括但不限于RBL的全部启动方式。如果有必要RBOOT甚至可以通过串口、GPIO等非常规启动接口引导操作系统。
在RBOOT加载后进入读秒过程,并待串口的输入。如果串口上有输入,则进入SHELL界面等待用户的命令,如果无输入,则使用默认的引导方式加载。DSP操作系统镜像加载流程如图1所示。
在SHELL界面用户可以完成以下功能:
(1)配置操作系统,包括操作系统的物理地址空间、虚拟地址空间,需要引导的核的个数等,引导程序可根据这些参数正确的加载操作系统;
(2)配置硬件,可配置的硬件包括网卡、SRIO、PCIe的参考频率、发送和传输通道的参数、工作模式、波特率、板卡上的交换芯片、PHY芯片、DDR等。在加载过程中,根据这些参数启动外设,从而将镜像文件读入到芯片内部;
(3)配置环境参数,包括主机和目标机的IP地址、子网掩码、网关信息、SRIO端口号、PCIe端口号、镜像文件名称等,如果从存储器启动,还可设置操作系统镜像文件在存储器上的偏移等;
(4)配置加载方式,目前可支持的加载方式有网卡、SRIO、PCIe、SPI、EMIF等,用户可根据当前的硬件特点选择任何一种方式加载;
(5)加载操作系统,读取用户配置的信息,根据当前的启动方式加载操作系统,如果用户未设置,会使用默认的方式(EMIF接口)加载,因为在系统正式运行后,以EMIF方式加载为主。
在板卡外设启动后,RBOOT首先会读取ELF文件的文件头,从文件头中解析出程序头( Program Header)、段头(Section Header)和操作系统入口地址( Entry point address)的信息。根据这些信息将ELF文件中的数据复制到内存地址并进行校验。
在复制数据段到内存的过程中,需考虑操作系统的物理地址和虚拟地址的转换,如果读到的是虚拟地址空间,需要计算出物理地址,并将数据复制到真实的物理地址中,这是和无操作系统镜像加载最显著的区别。
当所有的数据复制完成并成功通过校验后,跳入到操作系统镜像的入口地址,并运行操作系统。
6 实验结果
RBOOT实现了自动加载操作系统镜像程序,支持多种加载方式。实验结果表明该引导程序能够满足加载方式多样化的需求,可以从网络( TFTP)、SRIO、PCIe、SPI、EMIF等加载操作系统镜像,且加载过程中用户无需更改镜像文件的格式。
除了多种功能外,还对加载时间进行了测试,测试使用相同的镜像文件,大小为1.2Mbytes,程序的代码段放在DDR上,8核同时加载。实验结果表明,加载时间优于传统的JTAG加载以及RBL的网络等加载方式,具体的实验数据参见表1。
某些特定领域对多节点DSP的加载时间有特殊要求,如多个节点(64或128个)同时加载,必须在很短的时间内通过网络将操作系统完全加载成功,并且达到可用状态。实验结果表明,RBOOT可以用并行化的方式从TFTP服务器加载程序,完全满足多节点同时加载的性能指标。
7 结束语
RBOOT作为一款可配置硬件参数和操作系统参数DSP的引导程序,非常适合于国产DSP操作系统的引导。和传统的引导方式相比,不仅性能上有了显著提高,而且提供了灵活的启动方式,对于提高开发效率,缩短产品的研制周期有非常重要的意义。
参考文献
[1] TMS320C6678 Multicore Fixed andFloating-Point Digital SignalProcessor
(SPRS691E). TI
Inc. http://www.ti.com.2 014.
[2]Key Stone Architecture DSP BootloaderUser Guide (SPRUGY5C). TI Inc.http://www. ti. com. 2013.
[3]牛金海.TMS320C66x KeyStone架构多核DSP入门与实例精解[M],上海交通大学出版社,2014.