首页 文学文摘 时政新闻 科技科普 经济法律 健康生活 管理财经 教育教学 文化艺术 社科历史

EBoot下SD卡下载功能的实现

作者:张 彬 左成兵 黄少珉 来源:现代电子技术


  摘 要:在基于WinCE构建的嵌入式系统中,EBoot下载操作系统镜像时主要为以太网、USB线、串口下载的方式。由于目前SD卡的广泛应用,通过SD卡下载操作系统镜像则成为EBoot操作系统镜像下载方式的很好的补充。这里基于东南大学国家专用集成电路系统工程技术研究中心SEP5010处理器平台实现了EBoot下SD卡下载的功能。镜像数据在SD卡中以文件系统文件的方式存在,方便了从开发工作站下载镜像。实验结果表明,该方案可以达到948 kB/s的数据平均下载速度。
  关键词:SD卡;SEP5010;镜像下载;EBoot;FAT文件系统
  中图分类号:TP391文献标识码:B
  文章编号:1004373X(2008)2202904
  
  Realization of Download Function in EBoot via SD Card
  ZHANG Bin,ZUO Chengbing,HUANG Shaomin
  (National ASIC System Engineering Research Center,Southeast University,Nanjing,210096,China)
  Abstract:EBoot program downloads OS image mainly via Ethernet,USB or serial port in the WinCE-based embedded systems.Because of SD card being widely used,downloading OS image via SD card can reinforce the download function in EBoot.Realization of download function in EBoot via SD card based on the SEP5010 platform developed by National ASIC System Engineering Research Center.The image is stored in the SD card as the file in a file system,which makes downloading image from the work station more convenient.Result of the experiment shows that the speed of downloading image is 948 kB/s on the average.
  Keywords:SD card;SEP5010;image download;EBoot;FAT file system
  
  1 引 言
  
  嵌入式系统开发一般采用宿主机-目标机的形式,开发人员在宿主机上搭建开发环境完成对目标机的开发和调试。目标机上电后通常会运行一段加载操作系统的程序,称之为Boot Loader。Boot Loader的主要目标就是加载并执行操作系统镜像。Boot Loader加载操作系统镜像可以采用通过以太网、USB线、串口线等媒介下载的方式,也可以采用从FLASH等本地存储设备读取镜像的方式。由于在开发过程中需要频繁地更新目标机上的镜像,所以镜像下载显得尤为重要。考虑到产品应用,目前应用于便携式嵌入式产品的SoC芯片内部基本上都不集成网卡控制器,所以在嵌入式开发中主流的下载方式为串口和USB下载。串口下载连接方式简单,但速度是其最大的缺陷。USB下载的连接方式也很简单,速度上也很好地弥补了串口下载的不足,但由于USB下载方式不但要开发目标机上的驱动而且要开发主机端应用程序。这样不仅开发上增加了难度,还在使用上增加了些许不便。
  本文基于东南大学国家专用集成电路系统工程技术研究中心SEP5010处理器平台[1]实现了EBoot下通过SD卡下载操作系统镜像的功能。EBoot为Windows CE平台的Boot Loader。SD卡( Secure Digital Memory Card )是一种基于半导体快闪记忆器的记忆设备。SD卡具有体积小、功耗低、成本低、高可靠、可擦写、非易失性等特点,目前已广泛应用于MP3、数码相机、数码摄像机、手机等消费类电子嵌入式产品。本文提出的SD卡下载方式是EBoot下操作系统镜像下载方式的很好补充,其下载速度可以达到MB/s的量级,并且操作非常简单,只要宿主机上的镜像通过读卡器拷贝到SD卡中,再将SD卡插入到目标机,然后即可运行EBoot进行镜像下载。这种方式不仅给开发带来好处,还给以后用户更新操作系统带来便利。
  
  2 设计背景
  
  2.1 硬件背景
  图1所示为基于SEP5010处理器平台的SD卡接口电路。SEP5010的SD控制器与SD卡主要通过6根线相连,SDCMD线传输SD控制器发出的命令信号以及SD卡发出的响应信号;SDCLK线是SD控制器为SD卡提供的时钟信号;SDDAT0,SDDAT1,SDDAT2,SDDAT3号这4根线为SD卡和SD控制器提供数据传输的通道。图1中的VCC3为SD卡提供电源。另外PA3,PD0是SEP5010的2个通用GPIO口,系统可以通过分别读PA3,PD0的电平来获知SD卡有没有插入SD卡槽和写保护。卡插上时PA3的电平为低电平,写保护时PD0的电平为高电平。
  
  2.2 软件背景
  2.2.1 EBoot
  图2为EBoot的一般执行顺序[2]。在系统上电后EBoot便开始运行:
  (1) 进行代码重定位,把EBoot自身代码从不能进行线形访问的存储介质拷贝到可以进行线形访问的存储介质,比如从FLASH ROM拷贝到ROM或RAM中。
  (2) 对内存进行配置以满足EBoot的运行需要以及初始化执行高级语言所需要的环境,一般高级语言为C语言。
  (3) 将编译器定义的可写的数据段拷贝到RAM中,拷贝的原因为EBoot有时是在只读媒体上执行而不能进行写操作。
  (4) 初始化外设的调试端口和一些设备端口并执行自检,在自检过程中会初始化一些硬件设备,以检查它们是否可用。
  (5) 自检成功后则下载操作系统镜像到RAM中,最后当操作系统镜像下载成功后,就可跳转到操作系统镜像执行。
  2.2.2 FAT文件系统
  File Allocation Table(FAT)即文件分配表[3]。目前应用广泛的FAT文件系统为FAT16和FAT32文件系统。FAT文件系统的分区由4个区域组成,具体分布如图3所示。第一块区域为保留区(Reserved Region),这块区域的有效部分主要为BPB(BIOS Parameter Block),这个数据结构主要包含的是该FAT文件系统的基本信息。第二块区域为FAT表区(FATRegion),其作用为将某一文件所占用的所有簇串接起来并通过簇号来映射该FAT分区的数据区。FAT表为规定大小的单元组合,该单元即“簇入口”,该单元在FAT表中的位置跟簇号对应。第三块区域为根目录区域(Root Directory Region),该区域只出现在FAT16分区中,FAT32分区的根目录在数据区中,该区域由32 B大小的文件夹入口构成。文件夹入口的信息包括该文件夹入口的属性。第四块区域为文件和文件夹数据区域(File and Directory Region),该区域是以簇为单元组织。
  
  
  3 软件设计
  
  SD卡下载方式在原有EBoot的基础上主要完成的工作分为3个部分,第一个部分为SD卡的初始化,这一部分在Eboot中的硬件平台初始化的步骤中完成;第二部分为打开操作系统镜像文件(NK.bin),即获得操作系统镜像文件在SD卡中的具体位置以及大小,这一部分在EBoot中的预下载步骤中完成;第三部分为将操作系统镜像从SD卡中下载到SDRAM指定位置。这一部分在Eboot中的下载步骤中完成。
  3.1 SD卡的初始化
  SD卡的初始化包括使得SD卡进入数据传输状态以及获得SD卡中的文件系统的基本信息。
  使得SD卡进入数据传输状态的主要进行的步骤如图4所示。初始化GPIO(通用输入/输出口)是为了检测SD卡有无插上和有无写保护。发送一系列命令的过程如下[4]。
  (1) 发送0号命令,0号命令的作用为重启SD卡,使它进入空闲状态。
  (2) 发送41号应用命令,41号应用命令是一个以工作电压范围为参数的命令,如果SD卡的工作电压与该范围不匹配则进入非激活状态,否则继续运行,并将其运行条件寄存器作为响应的一部分发给SD控制器。
  (3) 发送2号命令,其作用为命令SD卡发送包含SD卡基本信息的响应。
  (4) 发送3号命令,其作用是命令SD卡将其相对地址作为响应的一部份发给SD控制器,然后SD卡进入等待状态。
  (5) 发送7号命令,其作用是将SD卡选中,并使其进入数据传输态。
  (6) 发送6号应用命令,使得SD卡进入4位传输态,数据通过4根数据线传输。复位SD控制器的收发FIFO是为了清空其中的残留数据,为之后的数据传输做准备。
  获得SD卡文件系统的基本信息主要通过读取SD卡的第0扇区(扇区是文件系统中的概念,它就相当于SD卡规格书中的块)来获得,并将其存入到一个全局指针指向的数据结构中。
  
  3.2 打开操作系统镜像文件
  打开操作系统镜像即为找到操作系统镜像的具体位置和大小,其具体过程如图5所示。首先根据已获取的SD卡文件系统的基本信息得到文件系统的根目录的在SD卡中的位置;然后在这个根目录中找到与操作系统镜像的第一级路径名匹配的文件夹入口,然后根据该入口信息找到下一目录的位置,从该位置开始再找与第二级路径名匹配的文件夹入口。这样的过程一直重复直到找到与最后一级路径名,也就是操作系统镜像名称匹配的文件夹入口。这样就得到了操作系统镜像的具体位置以及大小并将其存入到一个全局指针指向的数据结构中。
  3.3 下载操作系统镜像
  目前设计中下载的镜像为BIN格式文件。BIN格式文件组织,如图6所示。它的开头是7个字节的文件类型标识码。标识码之后的4个字为数据被下载到内存后在内存中的起始地址,而后的4个字节为下载到内存中的二进制镜像大小。之后的所有数据由若干块组成,每一块分为4个部分,第一部分为4个字节,表示这一块数据区被下载到内存后在内存中的起始位置;第二部分也为4个字节,表示这一块数据区的大小;第三部分也为4个字节,表示数据区的校验和;第四部分为数据区。将操作系统镜像从SD卡下载到内存中时,程序会根据已获得的操作系统镜像的位置信息和大小来读取操作系统镜像。读取按照下载镜像文件的结构以块为单位读取,然后将块中的数据区写入到内存中相应的位置。
  
  下载SD卡中的文件系统中的操作系统镜像文件到内存中的过程跟读取一般介质上的FAT文件系统中的某一文件的过程本质没有差别。首先根据已获得的操作系统镜像的位置来下载其起始的簇的数据到内存中,下载完该簇后从FAT表中与该簇号对应的位置获得下一簇的簇号来继续下载,这样一直持续到把操作系统镜像的所有数据都下载完。当下载操作系统镜像的最后一簇到内存中时,根据已获得的操作系统镜像的大小,下载完该簇的对应的文件结尾处的数据后就完成了操作系统镜像文件的下载。
  3.4 SD卡的读取操作
  由于SD卡读取时最小的读取单位是一个块(Block),而文件系统提供给上一级读取的函数的最小读取单位为字节,这将遇到字节数与块数的转换的问题。在本设计,当上一级函数读取数据时,将SD卡中所涉及的Block全部读取到内存中的一个缓存区中,然后再从缓冲区中以字节为单位读取数据。
  
  4 性能比较
  
  本文对串口、USB和SD这3种下载方式在下载速度方面的比较共进行了3次试验,表1为实验数据。在本实验中下载的操作系统镜像的大小为9 431 kB,SD卡的容量为1 Gb,文件系统为FAT16时簇大小为4 kB,文件系统为FAT32时簇大小为16 kB。
  从表中可以看出,串口的平均下载速度为8.62 kB/s,USB下载(SEP5010的USB控制器为USB 1.1控制器)的下载速度为695.5 kB/s,SD卡下载时,如果卡中为FAT16文件系统的下载速度为947.8 kB/s,如果是FAT32文件系统,其下载速度为865.2 kB/s。测试结果表明,SD卡下载的速度不仅远远超过本平台上串口的下载速度,而且也超过了本平台上USB 1.1的下载速度。
  
  从表1中还可以看出,相对于FAT32,SD卡中的文件系统为FAT16时的下载速度要更快。这是由于在代码中文件是按簇来读取的,当一个簇读完时,在读下一个簇之前会存在一个寻找下一簇的时间。对于一个远大于簇大小的文件,在本设计中其在FAT32文件系统占用簇的数量大约是其在FAT16文件系统占用簇的数量4倍。则程序在FAT32文件系统中读取该文件时,其占用的寻找下一簇的总时间也大约是其在FAT16文件系统中读取该文件时占用的响应时间的4倍。所以在本设计中,相同的文件从FAT16文件系统中读取所消耗时间少于从FAT32文件系统中读取的时间。
  
  5 结 语
  
  本文在SEP5010处理器平台上实现了在EBoot下通过SD卡下载镜像文件方式。在该平台上相对于其他下载方式,SD卡下载方式不仅在速度上有优势,而且操作也相对简单。操作的相对简单不但给开发调试带来便利,而且降低了在后续产品的软件升级的门槛,方便了客服人员及用户。
  
  参考文献
  [1]国家专用集成电路系统工程技术研究中心.SEP5010用户手册[Z].2007.
  [2]何宗健.Windows CE 嵌入式系统[M].北京:北京航空航天大学出版社,2006.
  [3]SD Group.SD Memory Card Specifications[S].Version 1.0,2000.
  [4]Microsoft Corporation.Microsoft Extensible Firmware Initiative FAT32 File System Specification[S].Version 1.03,2000.
  [5]张冬泉.Windows CE实用开发技术\.北京:电子工业出版社,2006.
  [6]杜春雷.ARM体系结构与编程\.北京:清华大学出版社,2003.
  [7][英]Steve Furber.ARM SoC体系结构\.田泽,译.北京:北京航空航天大学出版社,2002.
  [8]微软公司.Microsoft Windows CE设备驱动程序开发指南\.北京:北京希望电子出版社,1999.
  [9]尤晋元,史美林.Windows 操作系统原理\.北京:机械工业出版社,2001.
  [10]傅曦.Windows CE嵌入式开发入门\.北京:人民邮电出版社,2006.
  
  作者简介
  张 彬 男,1982年出生,硕士研究生。研究方向为嵌入式系统设计。
  左成兵 男,1982年出生,硕士研究生。研究方向为电路与系统、嵌入式系统设计。
  黄少珉 男,1980年出生,博士研究生。研究方向为嵌入式系统低功耗技术。