SamsungS3C2440平台上的VxworksBSP移植

发布者:Radiant777最新更新时间:2022-12-20 来源: elecfans关键字:Samsung  S3C2440平台 手机看文章 扫描二维码
随时随地手机看文章

引 言

美国WindRiver公司于1983年设计开发的VxWorks操作系统是一种嵌入式实时操作系统(RTOS),是嵌入式操作系统的典型代表,它的高可靠性、可剪裁性、强实时性被广泛的应用在军事、通信、航空、航天等高精尖技术及实时性要求极高的领域中,如卫星通讯、军事演习、导弹制导、飞机导航等。BSP(Board Support Package)在VxWorks操作系统中起到了部分接口的驱动和硬件初始化的作用,它是生成bootrom和VxWorks映像文件的前提,而S3C2440是Samsung公司设计的ARM920T系列的核心处理器,是嵌入式领域比较常用的ARM处理器。因此,研究基于S3C2440平台上的Vxworks BSP移植具有重要的意义。本文就BSP的概念、BSP移植过程中重点修改的几个文件、串口和网口驱动以及BSP的调试和仿真做详细的介绍。

BSP概述

VxWorks操作系统将所有硬件的功能函数分别放到一系列库中,这些库就被称为板级支持包BSP。BSP是连接VxWorks操作系统与硬件平台的一个接口软件包,在引导系统、支持系统运行过程中扮演着重要的角色,首先,通过BSP可以生成引导操作系统的bootrom;其次,引导行工程的建立基础就是BSP;最后,BSP具有与用户交互的作用,可以提供一个基础的硬件调试环境。BSP还可以使VxWorks运行于特定的硬件平台,如ARM、PPC、X86等,它包含了一系列与硬件相关的函数,完成针对硬件的基本输入与输出操作,可以使上层程序员在不用熟悉硬件的情况下进行编程。例如,一般它完成以下操作:目标板硬件初始化、内存控制器初始化、堆栈初始化、外围设备初始化(I/O、Interrupt……)、异常向量处理、CACHE操作、硬件设备的底层驱动、定时器驱动、串口驱动、END网络驱动、FLASH驱动、LCD驱动等。

BSP在嵌入式系统中扮演的角色,很类似于在PC系统中的BIOS和驱动程序的地位。图1中包括了VxWorks操作系统的各种组件,指明了BSP在整个系统中所处的地位和作用。

VxWorks在S3C2440上的BSP设计

S3C2440简介

移植目标机的硬件配置具体如下:处理器S3C2440,采用ARM920T内核,内存大小64M;NAND Flash大小为128M;

NOR Flash大小为2M;3路URAT;2路SPI;IIC总线接口;网卡:DM9000,10/100M的自适应。



图1 BSP在嵌入式系统中的位置框图

BSP的移植过程

要进行BSP的开发和设计,最好有一个可参考的模板,由于Samsung S3C2440A的内核是ARM920T,所以参考的模板选择Tornado for arm 的integrator920t。BSP文件主要在VxWorks编译环境Tornado的目录target/config/all和target/config/integrator920t文件夹中。其中,all文件夹里的文件对于绝大多数BSP都是共用的,一般来说不用怎么修改,重点是修改integrator920文件夹下的几个文件,这主要是指makefile、config.h、rominit.s和sysLib.c中相关部分的修改,另外添加了串口驱动和DM9000的网卡驱动。

修改Makefile文件

Makefile的两个主要功能就是提供文件之间的依赖关系和目标文件生成方法,定义编译和链接整个BSP的规则,在makefile文件中有一些参数已经在config.h文件中定义过了,但是必须保证两处的定义一致,否则会出现编译错误。下面介绍一些需要修改的参数:

CPU:描述目标板的处理器类型,设计中为ARMARCH4;

TOOL:该参数用来选择编译工具,VxWorks中可使用GNU和DIAB两种,设计中用GNU编译器来编译目标代码;

TGT_DIR:默认设置为$(WIND_BASE)/target;

TARGET_DIR:默认为BSP所在的目录,设计中为mini2440;

VENDOR:板卡生产商的名称,设计中为HITSAT;

BOARD:板卡的名称,设计中为OMU;

ROM_SIZE:ROM或Flash的大小(十六进制);

RAM_LOW_ADRS:VxWorks在RAM中的起始地址,即入口地址;

RAM_HIGH_ADRS:非驻留ROM内核的启动程序加载地址。关于入口地址和高位地址的指定需参考硬件的RAM组织。

该文件下其余的设置和定义都与模板中的一致。

修改config.h

config.h文件是BSP软件中比较重要的一个文件,VxWorks内核组件的配置可以通过config.h文件来定义。config.h文件包含了所有头文件和CPU相关的特殊定义,config.h文件中的配置参数是在configAll.h文件内容的基础上根据开发板的硬件资源设置的,其中包括定义引导行、修改存储空间的地址等。下面详细介绍config.h文件中修改的部分配置参数:

(1)定义引导行

#define DEFAULT_BOOT_LINE "dm(0,0) zwj-PC:d:VxWorks h=192.168.0.1 e=192.168.0.2 u=zwjhjj pw=zwjfile tn=mini2440"

其中:dm(0,0)为boot device,即启动设备映像;

zwj-PC为host name,即主机名;

d:VxWorks为file name,即要下载的VxWorks镜像文件路径;

h=192.168.0.1为主机IP地址;

e=192.168.0.2为目标板IP地址;

u=zwjhjj为FTP登陆时的用户名;

pw=zwjfile为FTP登陆时的密码;

tn=mini2440为目标板名称。

(2)修改地址

对目标板存储区配置参数的修改时一定要注意:该文件中地址定义,如ROM-TEXT-ADRS、ROM-SIZE、RAM-LOW-ADR、SRAM-HIGH-SIZE等要与Makefile文件中的相关定义一致。根据实际CPU以及外扩存储器的大小来确定目标板内存。

#define LOCAL_MEM_LOCAL_ADRS 0x30000000 / *RAM的起始地址*/

#define LOCAL_MEM_SIZE 0x04000000 /*RAM的大小为64M*/

#define ROM_BASE_ADRS 0x00000000 /*Flash的基地址*/

#define ROM_SIZE0x00100000 /*存VxWorks的Flash大小*/

#define ROM_COPY_SIZE ROM_SIZE

#define ROM_SIZE_TOTAL 0x00200000 /*Flash总大小*/

#define RAM_LOW_ADRS 0x30001000 /*VxWorks 映像的入口地址*/

#define RAM_HIGH_ADRS 0x32e00000 /*Bootrom在RAM中的起始地址*/

修改S3C2440x.h

该文件是自己添加的一个文件,其中包括处理器相关的外设寄存器结构、地址、外设中断号分配、串口等的设置。下面主要介绍一下该文件中对串口的定义:

/* s3c2440串口的定义*/

#define UART_XTAL_FREQ s3c2440x_PCLK

/*串口时钟频率*/

#define N_s3c2440x_UART_CHANNELS 3 /*串口通道数 */

#define N_SIO_CHANNELS N_s3c2440x_UART_CHANNELS

#define N_UART_CHANNELS N_s3c2440x_UART_CHANNELS

#define UART_0_BASE_ADR 0x50000000 /*串口0的基地址*/

#define UART_1_BASE_ADR 0x50004000/*串口1的基地址*/

#define UART_2_BASE_ADR 0x50008000/*串口2的基地址*/

另外又添加了一个s3c2440xSio.h文件,在该文件中定义了串口数据结构:

typedef struct s3c2440x_CHAN

{ SIO_CHAN sio; /* 标准SIO_CHAN结构 */

STATUS (*getTxChar) (); /*安装发送回调函数 */

STATUS (*putRcvChar) (); /*安装接收回调函数 */

void * getTxArg;

void * putRcvArg;

…….

UINT32 channelMode; /*当前模式(中断或轮询)*/

int baudRate; /*当前波特率*/

}

数据结构初始化之后,还有几个重要的函数需要注意:sysHwInit():处理器I/O端口的初始化;sysSerialHwInit():初始化设备描述符;sysSerialHwInit2():通过intConnect()把串口的中断处理程序s3c2440xIntTx、s3c2440xIntRcv连接接到相应的中断向量上,并由int Enable()开启两个中断,调用s3c2440xDevInit2()对_UCON寄存器赋值完成对串口的最终配置由轮询模式转换为中断模式,并在中断服务程序中实现串口数据的接收和发送。通过对这些功能函数的添加完成串口驱动的设计。

修改romInit.s

部分代码修改如下:

/*添加了对串行口UART的初始化,配置了UART的一些控制寄存器,并设置了波特率,部分代码如下*/

InitUART:

#define UART_BRD (( 50750000 / (115200 * 16)) - 1)

mov r2,#UART_BRD /*设置串口的波特率 */

/*初始化堆栈指针*/

ldr sp, L$_STACK_ADDR

mov fp, #0

在建立堆栈之后,系统就具备了高级语言的执行条件,后续的代码就可以用C语言来实现了。

/*使程序跳转至C语言程序段代码如下*/

#if (ARM_THUMB)

ldr r12,L$_rStrtInRom

orr r12,r12, #1

bx r12

#else

ldr pc,L$_rStrtInRom /*跳转到romStart()中执行*/ #endif

CPU将执行权转移给romStart()之后。该函数就使内存清空,然后把整个引导映像复制到内存中,最后将CPU的控制权交给usrInit()。

修改sysLib.c

文件sysLib.c提供VxWorks和应用程序间的板级联系,这里重点介绍一下内存映射函数。

目标系统开启了MMU模块,BSP在sysLib.c文件里面就定义了一个sysPhysMemDesc[ ]表。部分代码如下所示:

PHYS_MEM_DESC sysPhysMemDesc [] =

{ (void*) (ROM_BASE_ADRS+0xf0000000), (void *) (ROM_BASE_ADRS),

ROUND_UP(ROM_SIZE_TOTAL*2,PAGE_SIZE),

VM_STATE_MASK_VALID|VM_STATE_MASK_WRITABLE|VM_STATE_MASK_CACHEABLE,

VM_STATE_VALID|VM_STATE_WRITABLE_NOT|VM_STATE_CACHEABLE_NOT

}

上面一小段代码是对ROM_BASE_ADRS 的内存映射,ROM_BASE_ADRS+0xf0000000是要映射的虚拟地址,ROM_BASE_ADRS是硬件设计时定义的实际物理地址,ROUND_UP(ROM_SIZE_TOTAL*2,PAGE_SIZE)是映射长度,VM_STATE_MASK_VALID|VM_STATE_MASK_WRITABLE|VM_STATE_MASK_CACHEABLE是可初始化的地址状态,VM_STATE_VALID|VM_STATE_WRITABLE_NOT|VM_STATE_CACHEABLE_NOT是实际初始化的地址状态。

若添加新的外设,该外设对应的内存空间必须在sysPhysMemDesc[]中配置。通过这样的配置就完成了内存映射和MMU的开启。

修改dm9kEnd.c

由于S3C2440使用的是DM9000网卡。要做好DM9000网卡的END驱动首先要初始化网卡的数据结构dm9kDevice,这个数据结构如下:

typedef struct dm9kDevice

{

END_OBJ endObj; /*继承类 */

int unit; /*设备单元号 */

UINT32 flags; /* 本地标志信号*/

int ivec; /* 中断向量 */

int ilevel; *中断级 */

……

} DM9K_DRV_CTRL

数据结构中的END_OBJ类型成员、网卡单元号、中断号和中断向量是网卡驱动中必须包含的成员元素。

驱动的部分接口函数,主要包括网卡加载函数dm9kEndLoad、网卡启动函数dm9kStart、停止网卡函数dm9kStop、网卡控制函数dm9kIoctl、网卡卸载函数dm9kUnload、网卡发送函数dm9kSend、获取组播地址函数dm9kMCastGet、启动轮询模式函数dm9kPollStart、关闭轮询模式函数dm9kPollStop、轮询模式发送函数dm9kPollSend、轮询模式接收函数dm9kPollRcv等,通过对这些接口函数编写功能,实现网卡驱动。

在编写驱动的过程中,还必须注意:由于目标板用一种100pin的DM9000芯片,这种芯片除了有CMD信号之外,还有6根地址片选信号SA4~SA9,根据SA4~SA9对应的CPU地址线和数据手册上引脚定义,可以计算出网卡的端口地址,如果SA4~SA9对应CPU地址的addr4~addr9,那么网卡端口基址就是0x18000300,这样可以计算出网卡的基地址。


图2 VxWorks COM1口的打印信息

BSP的调试与仿真

BSP修改完成以后,就要进行调试了,这里采用点亮LED灯的调试方法,写一段点灯程序,用BSP生成bootrom和VxWorks映像,使用H-JTAG软件将bootrom烧写进目标板的norflash中,通过在不同位置反复的调用点灯程序和烧写bootrom到norflash中来调试BSP,并通过串口查看调试信息,如图2所示,是操作系统启动过程中,经过串口传输到主机上打印的调试消息,通过这些信息可以判断出系统启动过程中哪一部分出现了问题。


图3 VxWorks Shell界面

系统上电之后,bootrom首先运行,然后通过网线将VxWorks映像文件下载进rom中,图3所示为VxWorks的Shell界面,显示设备列表有串口和网口,表明串口和网口驱动成功。


关键字:Samsung  S3C2440平台 引用地址:SamsungS3C2440平台上的VxworksBSP移植

上一篇:基于S3C2440与GPS的物流配送系统设计实现
下一篇:基于QT/E的ARM/DSP直流电机监控界面的设计与实现

推荐阅读最新更新时间:2024-11-11 01:33

三星Galaxy Note 10邀请函开箱设计
7月2日上午,三星宣布将于8月7日(北京时间是8月8日凌晨4点)在纽约举办新品发布会,正式发布年度旗舰Galaxy Note 10。   与此同时,三星也对媒体寄出了此次发布会邀请函,有媒体开箱后大呼惊喜,那么就让我们一起来看一看三星Note 10发布会邀请函究竟玩出了什么花吧。   三星Note 10发布会邀请函是一个长方形的盒子,外表类似古朴的羊皮纸色,上贴本次官方邀请函主视觉图。   打开盒子后,盒子就会突然响起来,开始播放一段三星移动事业部副总经理录制的一段欢迎音频,原来盒子内部安装了光线感应器,一旦打开就会开始播放音频。   除了声音之外,黑子内部的主题是非常中世纪的的羽毛笔,外带附赠的5个笔头以及一瓶墨水
[手机便携]
<font color='red'>三星</font>Galaxy Note 10邀请函开箱设计
布局移动支付 三星新智能手表将支持NFC
    昨天在韩国发布的一则报告显示,三星计划在今年的下半年推出它的下一代智能手表。报告同时指出,三星将会为这款智能手表加入NFC功能,借助此功能该款智能手表将实现移动支付功能。此举被认为是三星在移动支付端积极布局,对抗苹果的一个新举措。 三星智能手表     今年三月,三星曾在美国以及韩国推广其Samsung Pay服务,而该服务最快将于下月在指定合作伙伴的帮助下正式推出。   苹果的Apple Watch同样内置了NFC芯片,以实现其移动支付功能Apple Pay。目前,Apple Watch用户使用Apple Watch的概率在0.15%左右。该比例虽然很小,但是考虑到Apple Watch庞大的用户群,由此产生的
[手机便携]
明年或仅有三星电子和苹果两家采用7纳米处理器
智能手机处理器的线宽越来越小,意味着处理器性能越来越强大,耗电越来越低,不过芯片制造成本也就越高。受到成本因素限制,明年可能只有三星电子和苹果两家采用7纳米处理器,其他处理器制造商可能继续沿用成本比较低的现有工艺技术。 在芯片中,线宽越小,可以在单位面积的芯片上整合更多的晶体管,另外系统芯片可以整合更多芯片,功能更加强大。 据台湾电子时报引述消息人士报道,高通公司最近发布了骁龙845处理器,该产品将不会采用7纳米工艺制造,而将继续使用三星电子半导体事业部的10纳米工艺。 全球第二大手机制造商联发科,也决定在其Helio P处理器中,采用台积电公司的12或16纳米工艺,生产时间将是明年上半年。 据消息人士表示,手机芯
[嵌入式]
三星押宝量子点 中国市场受益的却是TCL?
    2016,三星电视的核心战略方向依旧放在了量子点技术上(Quantum Dot Technology)。目前彩电产品在硬件方面的创新较过去细微化,彩电企业越来越往迎合用户个性需求的方向拓展,符合消费者胃口成为一个重要的产品创新方向。     比如在画质上,如何强化电视机的真实色彩表现能力是一个核心议题。据家电网了解,虽然三星电视在全球量子点技术的研发上比较早,但是在中国市场,俘获中国消费者芳心的,却是TCL品牌量子点电视 新一代显示技术革新     2014年12月份,当三星还在积极推进量子点显示技术研发的时候, TCL已率先在中国发布了第一台量子点电视——TV+量子点电视H9700。     从美国CES201
[家用电子]
掌握核心技术,三星布局5G时代
如今,消费者已经习惯并依赖4G带来的便捷连接和高效的生活,而在未来已来的5G时代,一切都将得到更加极致的进化。 一直专注挖掘用户需求,持续以创新引领市场的三星电子,凭借从智能手机、穿戴设备到平板电脑等一系列“4G家族”的强势阵容为用户提供丰富的产品选择,始终让其他终端厂商望尘莫及。 通过这些全生态4G产品,三星积累了世界领先的技术服务经验和用户口碑。在未来的5G时代,凭借一贯的创新精神和技术积累,相信三星将一如既往地为全球的消费者提供创新性的产品和高品质的服务。 智能物联,5G商业应用前景广阔 近年来,作为全产业链的科技巨头三星一直大力投入5G领域,不仅率先与全球领先的网络运营商开展了深度合作,而且先期研发的
[手机便携]
掌握核心技术,<font color='red'>三星</font>布局5G时代
英特尔入局,或威胁三星系统半导体代工地位
近日,英特尔宣布“IDM 2.0”计划,将斥资200亿美元在美国亚利桑那州建造两座晶圆工厂,同时宣布了代工服务相关计划。韩媒指出,三星电子短期内不会受到影响,但长期来看,可能会受到重创。 据BusinessKorea报道,相较台积电,英特尔投入代工市场对三星电子产生的威胁更大。分析师指出,英特尔和三星电子目前在技术上仍存在较大差距,因此短期内不会对三星电子构成重大威胁。然而从长远来看,三星电子可能会受到英特尔的重创。 早些时候在2019年4月,三星电子宣布,到2030年将投资133万亿韩元(约合7668亿元人民币)成为系统半导体领域的第一。 系统半导体占整个半导体市场的70%,远远大于存储半导体。这也是英特尔将目标瞄准系统半
[手机便携]
开年旗舰有多猛? 10个点教你读懂三星S9
26日,三星在MWC 2018展会上正式发布了旗舰机型三星Galaxy S9/S9+。这两款在MWC上如约而至的上半年安卓“机皇”不出意料地拿到了骁龙845移动平台的首发,其配置和使用体验自不必说。不过我个人认为,作为安卓阵营的王牌选手,三星对自家旗舰机型的打造绝不仅是堆料那么简单。那么除了高配置和商务范,三星Galaxy S9/S9+还为我们带来了哪些惊喜呢?让我们通过10个点来了解一下。    1。国际版:首发骁龙845移动平台   三星Galaxy S9/S9+国际版首发骁龙845移动平台。骁龙845移动平台是骁龙835的下一代产品,制程为10nm,其CPU搭载了8个Kryo 385核心,其中三星Galaxy S9
[手机便携]
三星DRAM“霸主”地位难撼动!已开发出全球最小DRAM内存芯片
  继 2016 年 2 月 三星 使用第一代 10nm 制程工艺生产出了 8Gb DDR4 芯片之后, 三星 电子今日又宣布已开始通过第二代 10nm 制程工艺生产 8Gb DDR4 芯片。另据路透社报道, 三星 开发的 8Gb DDR4 芯片是“全球最小”的 DRAM  芯片。下面就随网络通信小编一起来了解一下相关内容吧。   据悉,和第一代 10nm 工艺相比,三星第二代 10nm 工艺的产能提高了 30%,有助于公司满足全球客户不断飙升的  DRAM  芯片需求。此外,第二代 10nm 芯片不仅比第一代快 10%,同时功耗又降低了 15%。   三星表示,和 2012 年使用 20nm 工艺生产的 4Gb DDR3 芯片
[网络通信]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved