APP下载

基于S3C2440的VxWorks NandFlash启动设计与实现

2018-05-03贺翔胡俊祥戴钰

电子制作 2018年7期
关键词:网卡嵌入式代码

贺翔,胡俊祥,戴钰

(1.广州海格通信集团股份有限公司,广东广州,510000;2.广东广播电视台,广东广州,510000)

0 引言

VxWorks操作系统作为常用的高性能实时操作系统之一,在卫星通信系统中有着其独特的优势。其开放式结构和对工业标准的支持,使得开发人员更易于设计高效的嵌入式系统,并可以以很小的工作量移植到其它不同的处理器上;该操作系统软件为程序员提供了高效的任务调度、中断管理、实时的系统资源以及实时的任务间通信,使得程序员可以将尽可能多的精力放在应用程序本身,而不再关心系统资源的管理[1]。

Nor Flash及Nand Flash是嵌入式系统中主流的两种Flash类型。Nor Flash的优点在于支持芯片内执行(XIP,eXecute In Place),这样应用程序就可以直接在 fl ash闪存内运行,而不必把代码读到系统RAM中。Nor Flash的传输效率很高,但是很低的写入和擦除速度大大影响了它的性能。另外,由于其容量小,同等容量下价格贵,一般情况下往往配合Nand Flash一同使用。Nand Flash的单元尺寸几乎是Nor器件的一半,由于生产过程更为简单,Nand 结构可以在给定的模具尺寸内提供更高的容量,也就相应地降低了价格。但是Nand 器件使用复杂的I/O口来串行地存取数据,只有8个引脚用来传送控制、地址和数据信息,不支持芯片内执行。故Nor Flash一半用于存储程序,而Nand Flash一般用于存储数据。

s3c2440是samsung公司的一款常用的ARM9系列处理器,由于该处理器里有一个内置的SRAM,叫做stepping stone,系统启动加电后,能够把Nand Flash上的起始4KB的内容拷贝到SRAM里执行,这样就可以实现从Nand Flash启动。本文采用该款处理器,以及K9F2G08U0B型号的Nand Flash、K4S561632N型号的SDRAM、DM9000网卡芯片等作为硬件平台,并在该平台下完成VxWorks操作系统的移植,改造了VxWorks启动过程,实现了采用Nand Flash启动该操作系统。本嵌入式系统方案对于提升综合性能、减少硬件复杂度、节约硬件成本有着重要意义。

1 VxWorks启动过程分析

VxWorks的启动流程如图1所示。系统上电之后,从romInit.S开始运行。首先调用的函数就是romInit( ),该函数主要完成以下功能:

(1)禁止中断;

(2)初始化堆栈;

(3)保存启动类型(冷/热启动);

(4)初始化CPU相关寄存器;

(5)跳转到bootInit.c中的romStart()函数;

图1 Vxworks启动流程

函数romStart()主要完成以下功能:

把代码段和数据段复制到RAM当中;

如果映像是压缩版本的,则需要完成程序映像的解压缩。

跳转到bootCon fi g.c的usrInit( )函数。

函数usrInit( )设置cache的工作模式,完成板级硬件初始化后,调用sysHwInit( )、usrKernelInit( )、KernelInit( ),初始化内核,产生根任务usrRoot( )。在usrRoot根任务中解析Bootline,产生bootCmdLoop任务,用于启动、加载VxWorks映像。

在加载VxWorks映像完成后,程序跳转到sysAlib.S文件中的VxWorks image的入口点_sysInit。此时系统再次进行了一次初始化,进入了第二阶段启动过程[2-4]。本文主要对第一阶段启动过程进行改造,以实现在启动时能够调用NandFlash上的程序完成VxWorks操作系统的正常启动过程。

2 Nand Flash启动VxWorks实现

由于s3c2440处理器内置的SRAM仅能拷贝Nand Flash上的前4k代码运行,根据上述VxWorks启动过程分析可知,程序必须在romInit( )函数完成硬件初始化之后,在romStart( )函数完成映像解压缩之前完成把Nand Flash上程序拷贝到内存中的过程,即修改替换原romStart( )函数中完成把程序拷贝到RAM中的过程。系统在Make fi le和con fi g.h中通过三个宏定义来确定系统在什么内存地址运行BOOTROM,分别是:ROM _TEXT _ADRS(ROM起始地址)、ROM_LOW_ADRS(VxWorks启动地址)和RAM_HIGH_ADRS(Bootrom程序入口地址)。这里需要添加从Nand Flash把程序拷贝入内存的函数[5],定义在nand.c文件中。定义该函数:

该函数的部分主要代码如下:

在完成该部分函数的添加修改之后,为了在编译中把RdNF2SDRAM函数一同编译进去,需要在make fi le文件中加入:

由于SRAM空间只有4k,为了保证在前4k代码内完成程序的复制,需要保证该段拷贝程序在前4k代码内,这就需要通过修改rules.bsp文件修改编译顺序,如:

修改使$(BOOT_EXTRA)较先编译,链接到程序靠前的位置,或者也可以直接使nand.o较先编译、链接,可保证在前4k代码内完成程序的复制。

3 系统验证及应用

完成上述过程后,进行通过移植相应的外设驱动程序完成BSP开发。VxWorks下支持两个形式的网卡驱动,一种是兼容BSD4.4的网卡驱动,另一种是END(Enhanced Network Drivers)网卡驱动,由于后者使用比较简单而且VxWorks对该种驱动支持性好[6],本文采用END网卡驱动。本系统可通过网卡下载VxWorks映像。

如图2所示,使用Tornado生成好boorom,然后通过H-JTAG烧写到NandFlash上,跳线设置S3C2440从NandFlash启动。

打开服务器端WFTPD,设置好VxWorks镜像的路径、用户名及密码后,重新上电启动S3C2440,打开超级终端,修改启动引导行,主要包括板子IP地址、主机IP地址、FTP用户名及密码、VxWorks镜像文件路径等。然后输入@启动,在WFTPD窗口上看到VxWorks镜像下载的信息,如图3所示。

VxWorks镜像下载完成后,超级终端上变显示了熟悉的VxWorks启动画面,如图4所示。至此,完成了整个启动过程。

图3 VxWorks镜像下载

图4 VxWorks启动画面

4 结语

本文分析了VxWorks启动过程,提出了使用Nand Flash启动Vxworks的设计思路,按照上述步骤进行代码编写与调试,从网络下载VxWorks映像,实现了VxWorks的正常启动。相比传统的Nor Flash用于存储程序、Nand Flash用于存储数据的系统,降低了硬件设计复杂度、提高了稳定性、节约了开发成本。

* [1]Wind River System Inc.VxWorks 6.0 Device Driver Develop—er’s Guide [Z].2004

* [2]孔祥营,柏桂枝.嵌入式实时操作系统VxWorks及其开发环境Tornado[M].北京:中国电力出版社.2002

* [3]徐少毅,李君龙. 基于VxWorks的BSP概念与开发[J].电子产品世界,2002,03(B)

* [4]冯荣尉.基于ARM9的嵌入式硬件设计和VxWorks操作系统移植[D].北京理工大学,2008

* [5] Samsung Electronics Co.LTD. K9XXG08 U0B User’s Manu—al[Z].2005

* [6] 周启平,张扬.VxWorks下设备驱动程序及BSP开发指南[M].北京:中国电力出版社,2004

猜你喜欢

网卡嵌入式代码
基于IMX6ULL的嵌入式根文件系统构建
Focal&Naim同框发布1000系列嵌入式扬声器及全新Uniti Atmos流媒体一体机
联网全靠它 认识笔记本的无线网卡
基于ARM嵌入式的关于图像处理的交通信号灯识别
TS系列红外传感器在嵌入式控制系统中的应用
Server 2016网卡组合模式
神秘的代码
一周机构净增(减)仓股前20名
一行代码玩完19亿元卫星
近期连续上涨7天以上的股