网站首页

HOME

关于我们

ABOUT US

产品展示

PRODUCT

新闻中心

NEWS

成功案例

CASE

下载中心

DOWNLOAD

人才招聘

RECRUIT

在线留言

MESSAGE

联系我们

CONTACT US

    技术文章
    联系我们
    西安航普电子有限责任公司
    电话:029-81870107
    邮箱:hangpudianzi@163.com
    网址:www.hangpu-topsys.com
    公司地址:西安市电子四路西京三号2号楼17层
     
     
    技术文章
    龙芯3A平台Vxworks移植的研究和实现
    更新时间:2017-09-07 13:16:07    点击:1688次
    龙芯3A平台Vxworks移植的研究和实现
    王 雷,樊晓桠,王党辉
    (西北工业大学计算机学院,陕西西安710129)
    摘 要:龙芯3A处理器具有高性能低功耗的优点,在高性能计算、个人桌面应用、工业控制、高性能嵌入式等领域
    都有广阔的应用前景.目前龙芯系列平台大都是基于Linux系统,但在工业控制、高性能嵌入式等领域,高实时性
    和高可靠性的VxWorks才是比较理想的选择.在分析了VxWorks移植的主要内容基础上,详细研究了龙芯3A的
    VxWorks移植方法.针对具体工业应用,设计了一种基于龙芯3A的工控平台,并实现了对该平台的VxWorks移
    植.经过在龙芯3A开发板上的验证是可行的.
    关键词:龙芯3A;VxWorks系统;板级支持包BSP;系统移植
    中图分类号:TP316     文献标识码:A     文章编号:1000-7180(2012)02-0086-05
    Research and Implement of VxWorks Porting Based on
    Loongson3A Hardware Platform
    WANG Lei,FAN Xiao-ya,WANG Dang-hui
    (School of Computer Science,Northwestern Polytechnical University,Xi′an 710129,China)
    Abstract:Loongson3Aprocessor has the advantages of high performance and low power consumption,which has
    broad prospects in high performance computing,personal desktop applications,industrial control,and high
    performance embedded fields.At present,Loongson series platform is mostly based on Linux.But in industrial
    control and high performance embedded fields,VxWorks is the ideal choice,which is high real time and high
    reliability.Based on the analysis of the key contents of VxWorks porting,this paper researched the VxWorks
    porting approach of Loongson3A.According to the specific industrial application,designed a kind of Loongson3A
    industrial control hardware platform,and implemented VxWorks porting on this platform.It is feasible by verified
    on Loongson3Adevelopment board.
    Key words:Loongson3A;VxWorks;board support packet BSP;system porting
    1 引言
    龙芯系列处理器是中国科学院计算所自主开发
    的国产处理器系列,龙芯3A是其最新一代的64位
    多核处理器.龙芯3A 基于RISC架构,兼容MIPS
    指令,原生4核设计,采用65nm工艺,晶体管数目
    4.25亿个,最高工作主频1GHz,单颗龙芯3A的最
    大功耗为15W[1].龙芯3A 在包括服务器、高性能
    计算、个人桌面应用、工业控制、数字信号处理、高端
    嵌入式应用等产品中都具有广阔的市场应用前景.
    现有的龙芯平台大都基于Linux操作系统,但
    是在工业控制、高性能嵌入式等领域,对实时性、定
    制性的要求很高,因此VxWorks系统才是比较理
    想的选择.
    本文主要分析了VxWorks移植的主要内容,
    研究了龙芯3A的VxWorks移植方法,实现了一种
    用于工业控制领域的龙芯3A 平台的设计,并对其
    进行了VxWorks移植.
     第2期王雷,等:龙芯3A平台Vxworks移植的研究和实现
    2 VxWorks移植分析
    2.1 VxWorks移植的主要内容
    VxWorks主要由三大部分组成:板级支持包
    BSP、微内核Wind及输入输出系统,如图1所示.板
    级支持包BSP在硬件与微内核Wind之间提供了统
    一的接口,包括硬件初始化、中断处理、时钟管理、内
    存地址映射、实时内核载入等.将VxWorks移植到
    龙芯3A平台上,主要就是完成龙芯3A平台的板级
    支持包BSP的开发.
    图1 VxWorks结构组成[2]
    开发BSP 一般有两种方式:一是使用Wind
    River官方支持或者第三方支持的BSP;二是建立
    自己的BSP以支持特定硬件.对于龙芯3A来说,由
    于这方面的支持度较少,加上可能某些硬件设备比
    较特殊,因此通常需要自己建立龙芯3A 专用的
    BSP.
    通常情况下BSP开发的流程是,先实现一个最
    小化的Vxworks内核,向其中添加定时器、串口设
    备、中断控制器等基本驱动程序,使得Vxworks系
    统基本可用,然后在此基础上添加其他设备,最终满
    足目标需求.本文进行龙芯3A 平台的BSP开发也
    是基于该流程.
    2.2 板级支持包BSP的组成
    通常情况下,BSP的组成文件主要包含在以下
    四个目录里面[2].
    (1)InstallDir\target\config\all
    该目录下的文件包括bootConfig.c、bootInit.
    c、usrConfig.c、configAll.h等.这些文件主要是定
    义了所有VxWorks 的默认公共配置以及
    BootROM 的初始化代码.这些文件作为VxWorks
    体系结构产品的一部分而给出,是所有BSP的公共
    部分,一般无需修改.
    (2)InstallDir\target\config\comps\VxWorks
    该目录下的文件是VxWorks事实内核的基本
    组建描述文件(CDF文件).一般也无需修改.
    (3)InstallDir\target\config\comps\src
    该目录下的文件是与内核基本组件相关的配置
    文件.
    (4)InstallDir\target\config\bspname
    该目录下主要包括了Makefile、config.h、romInit.
    s、sysALib.s、sysLib.c、sysSerial.c、bspname.
    h等文件.这些文件是与具体系统或者硬件相
    关的BSP文件,主要是目标板上的外设的驱动文
    件、以及设备和VxWorks系统接口文件.本文移植
    工作的重点就是该目录.
    其中,config.h文件包含了具体CPU板的所有
    包含文件和定义,主要包括BSP版本ID信息、缓存
    和MMU配置、RAM 和ROM 的地址和大小、默认
    引导行参数、网络设备和中断向量、外部总线地址映
    射等;romInit.s包含了用于初始化的汇编语言源代
    码;sysALib.s 包含了VxWorks映像的入口点_
    sysInit;sysSerial.c包含了所有串口设备驱动器的
    设置和初始化.Makefile文件用于编译创建映像文
    件.VxWorks使用GNU make工具来重新编译和
    连接模块,Makefile包含了整个BSP编译、链接、生
    成二进制文件的过程.bspname.h主要是具体硬件
    平台的参数配置头文件,文件名称可以自定义.该文
    件包括具体硬件平台所有硬件的参数,如CPU 寄
    存器、系统中断号、端口地址、接口配置等.
    2.3 VxWorks映像分类
    开发完成的BSP经过编译链接,可以生成的
    VxWorks映像有两类:一种是可加载的VxWorks
    映像;一种是可引导的VxWorks映像.前者需要固
    化在Flash中的BootROM 加载到RAM 中运行,一
    般在调试阶段通过串口或者网络下载到目标机中运
    行.后者是BootROM 和VxWorks融合在一起的映
    像,通常是调试开发完成后的最终产品.
    3 龙芯3A平台的VxWorks移植
    3.1 龙芯3A平台设计
    本文所涉及的龙芯3A 平台用于工业控制领
    域,主要功能是分析采集到的数据,并根据分析结果
    对外发出控制命令,同时将采集到的数据和处理结
    果实时备份.该平台主要硬件由龙芯3A 处理器、
    87
    微电子学与计算机2012年
    DDR2内存、BootROM、Flash盘、FPGA组成,如图
    2所示.通电后,BootROM 初始化并启动整个系统;
    龙芯3A 通过自带的UART口接收外部传感器采
    集的数据,对接收到的数据进行分析处理,并通过另
    外的UART发出控制命令;Flash盘通过FPGA与
    龙芯3A的PCI总线连接,保存采集到原始数据和
    处理后的数据.其中FPGA 主要完成时序转换、读
    写控制等功能.
    图2 龙芯3A平台结构
    3.2 建立龙芯3A平台的BSP工程
    实现龙芯3A平台的BSP开发,首先需要新建
    一个BSP工程.首先打开Tornado,新建一个工程
    Loongson3A.由于没有现成可用的BSP,可以根据
    用户的硬件配置选择一个近似的BSP 模板,如
    rbtx4938_mips64等等,然后在此基础上添加需要
    的语句和文件,删除无用的语句和文件,最终形成自
    己的BSP工程.
    3.3 龙芯3A平台BootROM 设计
    在龙芯3A 平台上电之初,由于RAM 未初始
    化处于不确定状态,系统初始化引导程序只能存放
    在非易失性的介质,例如Flash芯片中,构成启动
    ROM.
    对于龙芯3A 平台来说,使用较多的初始化引
    导程序有两种.一种是龙芯系列专用工具PMON,
    一种是VxWorks的开发工具Tornado 自带的
    BootROM.两者各有优缺点,PMON 设计与调试较
    为复杂,但是功能比BootROM 强大;BootROM 简
    单易用,但功能上不如PMON.由于Tornado自带
    的BootROM 与VxWorks联系紧密,而且可以制作
    可加载的VxWorks映像和可引导的VxWorks映
    像,同时本文的硬件环境较简单,因此用它作为初始
    化引导程序.
    3.3.1 BootROM 硬件连接
    龙芯3A与BootROM 之间是通过LPC总线连
    接.LPC中的LPC Boot地址空间是龙芯3A系统启
    动时处理器最先访问的地址空间,其物理地址范围
    0x1fc00000-0x1fd00000.对于龙芯3A来说,如果系
    统设置成从PCI地址空间启动,则第一条指令的
    PCI物理地址必须是0x1fc00000,否则系统将从
    LPC总线的ROM 空间0地址处开始取指[1].
    龙芯3A的LPC启动Flash支持4Mbit和8
    Mbit两种规格,通过LPC总线上的L_8MBits信
    号进行选择.为了能够存储BootROM 及VxWorks
    映像,Flash芯片的型号选择了SST49LF080A[3].
    SST49LF080A是专门用于存储系统固件的LPC接
    口的闪存芯片,存储空间大小为8Mbit(1Mbit×
    8).SST49LF080A符合1.0版LPC接口规范,支持
    两种操作模式,一种是LPC模式(LPC),一种是并
    行编程模式(PP).LPC 模式通过LAD[3∶0]和
    LFRAME#进行系统内操作,PP模式通过A[10∶
    0]和DQ[7∶0]实现编程操作.本文中,通过将
    MODE信号设定为逻辑低,使用LPC模式实现系
    统正常启动,如图3所示.需要注意的是,作为启动
    设备,ID[3∶0]必须为0000.
    图3 龙芯3A与BootROM 连接方式
    3.3.2 加载VxWorks内核
    为了能够在龙芯3A 平台上启动VxWorks,需
    要自定义一些启动信息.在BSP开发包的config.h
    文件中包含了DEFAULT_BOOT_LINE的定义,
    包括确定启动装置的参数,主机和目标机IP地址,
    要装载的VxWorks映像的路径和名称等.
    龙芯3A集成了2个UART,在BSP开发的调
    试阶段,可以使用串口下载VxWorks映像并启动,
    修改为如下形式:
    #define DEFAULT_BOOT_LINE\
    “tsfs(0,0)host:VxWorks h=169.254.2.67e
    =169.254.2.68 u=Loongson3A pw=Loongson3Atn=
    target”
    其中启动设备bootDev为tsfs,表示使用目标
    机代理文件系统连接,利用Tornado的目标服务器
    88
     第2期王雷,等:龙芯3A平台Vxworks移植的研究和实现
    指定串口下载VxWorks映像.h和e分别表示主机
    IP和目标机IP,u和pw分别表示用户名和密码.若
    龙芯3A 平台上有网络设备,还可以指定bootDev
    为网卡型号通过网络方式下载.
    最后当调试完成,形成最终产品时,可以制作可
    引导的VxWorks映像,此时BootROM 与VxWorks
    映像融为一体,直接烧写在Flash固件中即可启动
    VxWorks,无需再通过串口、网络等方式下载.
    3.4 龙芯3A平台的BSP开发
    3.4.1 BSP开发与设置
    BSP中的config.h文件涵盖了龙芯3A的所有
    包含文件和定义,需要首先对其修改.修改config.h
    文件如下:
    #define ROM_BASE_ADRS 0xbfc00000
    #define ROM_TEXT_ADRS 0xbfc00000
    #define ROM_SIZE 0x00100000
    #define RAM_HIGH_ADRS 0xbfd00000
    #define INCLUDE_SERIAL
    #define NUM_TTY 2
    #define CONSOLE_BAUD_RATE 115200
    其中,ROM_BASE _ADRS表示ROM 的基地
    址,龙芯3A 平台BootROM 的起始物理地址是
    0x1fc00000,转化为逻辑地址为0xbfc00000.ROM_
    TEXT_ADRS表示初始化启动代码存放在ROM
    中的起始地址,同样为0xbfc00000.ROM_SIZE表
    示ROM 的大小,本文使用的SST49LF080A 芯片
    存储空间大小为8Mbit,因此为0x00100000.RAM_
    HIGH_ADRS表示复制BootROM 到RAM 所使用
    的目标地址,本文设定为0xbfd00000.RAM_LOW_
    ADRS表示RAM 中的VxWorks运行的起始地址,
    可根据自己的内存大小设置.NUM_TTY表示串口
    数量,本文中龙芯3A 平台需要两个使用UART
    口.CONSOLE_BAUD_RATE表示波特率.
    接着需要修改龙芯3A 平台的头文件Loongson3A.
    h,根据设计参数,修改其中的寄存器配置定
    义、系统中断号、端口地址、接口配置等.
    此外还要修改Makefile文件,如CPU 类型号,
    选择编译工具,附加编译选项等:
    CPU=MIPS64
    TOOL=diab
    TARGET_DIR=Loongson3A
    注意要保证Makefile和config.h中ROM 和
    RAM 宏定义中地址一致,此外还要除去一些无关
    模块的引用等.
    3.4.2 驱动程序开发与配置
    在将VxWorks移植到龙芯3A平台的过程中,
    很重要的一步就是设备驱动程序开发和配置.对于
    普通通用设备,可以直接添加BSP提供的普通驱动
    程序,BSP工具包在target/src/drv目录下提供了
    大量普通驱动程序的源代码.在编译阶段,sysLib.c
    可从target/src/drv中复制这些普通程序.如果对
    于特殊非通用设备,必须创建一个BSP专用的驱动
    程序,存放在BSP专用目录下.
    龙芯3A平台的启动过程中,需要对串口设备
    初始化.普通多模式串行驱动程序存放在target/
    src/drv/sio目录下.此目录中包括了很多常见的串
    口设备的驱动源文件,如i8250Sio.c(intel8250)和
    ns16550Sio.c(NS 16550)等等,同时还包含了templateSio.
    c模板文件.龙芯3A 中的UART串口设
    备兼容NS 16550,因此可以直接使用ns16550Sio.c
    作为串口驱动.如果需要添加特殊串口设备时,需要
    先在模版templateSio.c上创建驱动程序,然后修改
    BSP的sysLib.c或sysSerial.c文件,以使它们包括
    所需的驱动程序.由于本文龙芯3A 平台的所用硬
    件均为普通的常用设备,可同样按照上述方式添加
    与配置.
    3.5 Flash文件系统的建立
    由于本文的龙芯3A 平台使用了Flash盘作为
    数据存储设备,出于使用寿命和简化控制操作的考
    虑,为该Flash盘建立文件系统.
    TrueFFS是M-Systems公司开发的一种Flash
    文件实现方式,它屏蔽了底层存储介质的差异,可以
    为各种Flash存储设备提供统一的块设备接口[4].
    TrueFFS与VxWorsk兼容,支持x86、PowerPC、
    MIPS等CPU 架构,并且具有可重用、线程安全的
    特点,非常适合工业控制、嵌入式等领域的龙芯3A
    平台使用.
    在硬件上,龙芯3A 平台使用的Flash芯片是
    SST39LF160.SST39LF160是一种多功能Flash芯
    片,存储空间大小为16Mbit(1Mbit×16).
    3.5.1 BSP相关配置
    要让VxWorks 支持TrueFFS,必须在Vx-
    Works映像中添加相关配置和文件.
    首先要config.h中定义TrueFFS,修改config.
    h如下:
    #define INCLUDE_DOSFS
    #define INCLUDE_TFFS
    #define INCLUDE_TFFS_DOSFS
    89
    微电子学与计算机2012年
    #define INCLUDE_TFFS_SHOW
    龙芯3A 硬件平台的BSP目录下还需要包含
    sysTffs.c文件,将TrueFFS所有层连接在一起与
    VxcWorks绑定.修改sysTffs.c文件如下:
    #define INCLUDE_MTD_SST39VF160
    #define INCLUDE_TL_FTL
    #define FLASH_BASE_ADRS 0x0fd00000
    #define FLASH_SIZE 0x00200000
    其中,INCLUDE_MTD_SST39VF160代表了
    SST39VF160的MTD驱动,其他不相关的MID驱
    动头文件都可以注释掉.
    由于龙芯3A 平台具备虚拟内存管理功能,所
    以sysLib.c中的内存管理单元MMU 需要添加
    Flash相关定义,否则可能会导致Flash访问失败.
    因此对于本文的龙芯3A 平台来说,要在sysLib.c
    中的sysPhysMemDesc[]中添加上面Flash的基地
    址和大小等信息.
    接下来修改tffsConfig.c,在该文件开头添加声
    明:
    #ifdef INCLUDE_MTD_SST39VF160
    FLStatus SST39VF160 _ MTD _Identify
    (FLFlash vol)
    #endif
    并在MTDidentifyRoutinemtdTable[]中添加
    以下内容:
    #ifdef INCLUDE_MTD_SST39VF160
    SST39VF160_MTD_Identify
    #endif
    最后在编译时,将SST39LF160相关MTD驱
    动添加到Makefile中去:
    MACH_EXTRA=SST39LF160_Mtd.o
    3.5.2 驱动程序编写
    SST39LF160驱动程序主要是完成Flash的识
    别、写入和擦除操作,对应的函数声明分别为:
    FlStatus SST39VF160 _ MTD _Identify
    (FLFlash vol);
    static FlStatus SST39VF160MTDErase
    (FLFlash vol,int blockNo,int blockToErase);
    static FlStatus SST39VF160MTDWrite
    (FLFlash vol,CardAddress address,const void
    FAR1buffer,int length,int modes);
    根据这些函数的声明,编写对应的函数,完成驱
    动程序并添加到工程中即可.
    3.6 开发板验证
    龙芯3A-RS780E[5]开发板是龙芯公司为龙芯
    3A量身定制的开发板.它集成了丰富的通用接口,
    方便用户搭建基于龙芯3A 的硬件快速演示平台;
    同时可以满足用户在开发板上进行性能评估和软件
    开发移植的需要.
    本文所研究的内容在龙芯3A-RS780E开发板
    上进行了验证.利用该开发板搭建了本文所设计的
    龙芯3A工控平台,经过移植VxWorks可以成功运
    行,验证了本文移植方法的可行性.
    4 结束语
    针对不同的用途和需求,龙芯3A 的硬件平台
    配置也各不相同,但VxWorks移植的方法是类似
    的.本文详细研究了龙芯3A平台下的VxWorks移
    植方法,并在龙芯3A开发板上验证了其可行性,一
    定程度上可以拓展龙芯系列在工业控制、高性能嵌
    入式等领域的应用范围。
    上一篇: 多屏触控地面站
    下一篇: 基于ARM和VxWorks的CPCI工控平台的设计
    
    版权所有 © 西安航普电子有限责任公司 未经许可

    严禁复制 陕ICP备08100257号 建站/推广/维护/安全:西安利友科技