APP下载

基于HiveBoard的嵌入式系统1卡启动的研究与实现*

2014-09-06陆清茹史先强辛海燕

电子器件 2014年4期
关键词:单板扇区内核

陆清茹,史先强,辛海燕

(东南大学成贤学院电子系,南京 210000)



基于HiveBoard的嵌入式系统1卡启动的研究与实现*

陆清茹*,史先强,辛海燕

(东南大学成贤学院电子系,南京 210000)

摘要:HiveBoard是东南大学研究人员设计的一款基于国产微处理器的信用卡大小的单板计算机,它实现了使用一张SD卡一次实现嵌入式系统的完整启动。首先介绍了HiveBoard基本配置,分析了典型嵌入式系统的启动方式以及SD卡数据存储与FAT16文件系统相关知识,重点阐述了设计者巧妙地将嵌入式系统所必须的U-Boot、Linux内核和文件系统集成在一张SD卡中并实现完整系统启动的原理和方法,并呈现了整个启动流程。

关键词:HiveBoard;1卡启动;嵌入式系统;单板计算机

随着嵌入式系统软硬件技术的不断发展,嵌入式系统学习和开发者对于开发平台的稳定性、便携性、易用性及功能性提出越来越高的要求。嵌入式开发平台的设计思维也已逐渐向集成化、小型化和高性能等方面转变。面向各个行业开发者的单板计算机(Single Board Computer)应运而生。HiveBoard便是国内单板计算机中的佼佼者。

1 HiveBoard简介

在充分考虑了当下嵌入式系统爱好者对于开发平台的实际需求后,东南大学的学者设计并实现了只有信用卡大小的单板计算机——HiveBoard。

硬件设计上,HiveBoard采用基于国产内核(北大众志unity2)的自主知识产权微处理器SEP6200作为主处理器,主频最高800 MHz,主存128M(DDR2 SDRAM),拥有多种存储器接口;支持多种主流视频格式的1 080 pixel解码,支持HDMI视频输出(外接扩展板);支持24 bit色LCD输出,可支持4层Overlay;内嵌USB OTG 2.0控制器,支持外接PHY实现USB 2.0传输;支持SDIO接口和SDHC存储卡,高速SPI/UART/I2C等串行接口;支持10 M/100 M以太网口[1]。HiveBoard的外观如图1所示。

软件上,引导程序使用U-Boot,操作系统内核是Linux,开发者移植并优化了Qt/E作为嵌入式图形开发工具。在接上电源后,HiveBoard仅需一张SD卡就能实现U-Boot引导Linux内核并挂载根文件系统。

图1 HiveBoard正、背面图

2 典型的嵌入式系统启动分析

一个典型的嵌入式系统,在硬件上通常是以嵌入式微处理器为核心,由存储设备、I/O设备、通信模块以及电源设备等构成。软件上,通常包含引导系统启动的引导程序(Boot-Loader),一个合适的操作系统以及根文件系统等构成。其中,操作系统包含操作系统内核及各种设备驱动及应用程序接口等[2]。

对于一个特定的嵌入式设备,软件系统通常存放在一定的存储设备上,根据引导程序存放的位置不同,系统启动通常分为NorFlash启动,NandFlash启动以及SD卡启动。

HiveBoard的主控微处理器SEP6200支持以上3种启动方式,以SD卡方式启动并以U-Boot(一种常见的BootLoader)作引导程序为例,系统上电复位后,硬件自动将U-Boot前8k内容(U-Boot从SD卡0扇区开始存放)复制到SEP6200片内的ESRAM,在ESRAM中执行一些初始化工作并将SD卡中完整的U-Boot拷贝至主存中的特定地址并跳转过去继续执行U-Boot,U-Boot执行硬件初始化、建立内存映射图并将系统的软硬件环境带到一个合适的状态[3]。随后U-Boot将操作系统内核拷贝解压到主存,并将控制权交给操作系统。操作系统启动完成后,挂接相应的根文件系统,在文件系统中可以运行相应的应用程序。

3 HiveBoard 1卡启动原理及实现

3.11卡启动原理概述

如前所述,HiveBoard采用U-Boot作为BootLoader,操作系统使用Linux,并在操作系统启动后挂载根文件系统,完成整个系统的启动工作。为了降低成本,便于开发HiveBoard使用SD卡作为唯一的非易失性存储设备,因此U-Boot、Linux内核文件以及文件系统等镜像文件在启动之初均必须存放在SD卡上;首先,U-Boot必须从SD卡的第零页开始存放;再者,为了便于开发者在开发过程中更换Linux内核及文件系统,HiveBoard设计者在这张SD卡上开辟出一个FAT16文件系统分区用来存放Linux内核文件及文件系统的压缩文件[4];第三,在Linux环境下,文件系统必须是ext格式的,因此这张SD卡上还必须存在一个ext分区用以存放解压缩后的Linux根文件系统;基于以上考虑,一张符合HiveBoard启动要求的SD卡分区布局应该如图2所示。

图2 符合HiveBoard启动要求的SD卡分区布局

3.2SD卡数据存储与FAT16文件系统

SD卡具有体积小、容量大、功耗低和非易失等特点,SD卡一般采用基于文件系统的方式存储数据,这样可以方便使用计算机直接访问和处理其中的数据[5]。本文论述的是基于FAT16文件系统格式的SD卡存储格式。在使用FAT16格式对SD卡进行格式化后,其内部分区布局如图3所示。

图3 FAT16格式SD卡分区布局

其中,MBR(Master Boot Record)是主引导记录区,它是SD卡的0扇区(1扇区=512 byte),主引导记录区存有主引导记录程序以及各个分区的大小及位置信息,是数据信息的重要入口[6]。其后是隐藏扇区,可以实现特殊的用途,比如存放BootLoader等,这一点很重要。之后依次是各个文件系统分区。隐藏扇区和各个文件系统分区是由各个DPT(Disk Partition Table)确定的,SD卡最多可以有4个分区。MBR区的扇区结构如表1所示。

表1 MBR区扇区结构

其中DPT0描述隐藏扇区和分区0相关信息,DPT1~3描述分区1~3相关信息。

具体到一个分区,其数据存储结构如图4所示。DBR(DOS BOOT RECORD)区即操作系统记录区的意思,也称为引导扇区或启动扇区。它包含一个引导程序和一个BPB(Bios Parameter Block)的本分区参数记录表,BPB记录着本分区的起始扇区、结束扇区、文件存储格式、磁盘介质描述符、根目录大小、FAT个数、分配单元的大小等重要参数。DRB区之后是保留区,之后是FAT(File Allocation Table)区,即文件分配表区。由于磁盘中存储文件时其基本单位不是字节而是簇,1簇由若干个扇区构成。一个文件存放在磁盘上,其内容实际是以簇为单位按照链式结构存放的。FAT就是用来记录哪些簇已经被文件占用,还必须为每个已经占用的簇指明存储后继内容的下一个簇的簇号,对一个文件的最后一簇,则要指明本簇无后继簇。由此可见通过FAT我们就可以在文件系统中完整地查找到一个文件。由于FAT对于文件管理的重要性,所以在FAT1之后又存在其本身的一个备份FAT2。这之后是根目录,每一个存放在根目录下的文件在这里都有一条记录。根目录区之后是数据区。

图4 分区数据存储结构

对于FAT16格式文件系统,每一簇在FAT表中占据2 byte。所以,FAT16最大可以表示的簇号为0xFFFF(十进制为65 536),以32 kbyte为簇的大小的话,FAT16可以管理的最大磁盘空间为:32 kbyte×65 535=2 048 Mbyte,这就是为什么FAT16不支持超过2 Gbyte分区的原因。FAT16记录项的取值及相应的表现情况如表2所示。

表2 FAT16记录项的取值

FAT文件系统的一个重要思想是把目录当作一个特殊的文件来处理,所有的目录文件可以看作是一个存放其他文件(或目录)入口参数的数据表。系统以32 byte为单位进行目录文件所占簇的分配。不同的字段定义了本目录下的一个文件(或目录)的属性,表3是各字段的定义。其中0x1A~0x1B定义了文件的首簇号,从这一簇出发,结合文件长度大小就可以在FAT中找到文件的所有块。

3.3HiveBoard 1卡启动软件设计

3.3.1主要设计思想

如前所述,由于HiveBoard微处理器SEP6200硬件设计的原因,在SD卡启动模式下,上电后系统默认从SD卡第零页开始读取U-Boot前8k内容到ESRAM[7],而FAT16文件系统也有其自身的文件存储格式,设计者结合两方面因素将对于FAT16文件系统至关重要的DPT分区表保留下来放置到U-Boot文件中的合适位置(如表1,DPT在MBR中的位置是01BE-01CD),然后将U-Boot编译后的二进制文件烧写到SD卡的0地址。

由于我们将Linux内核以及文件系统压缩文件存放在FAT分区下,因此在U-Boot中必须添加一条指令来读取FAT16文件系统中的文件到指定内存地址。

3.3.2分区表DPT的设计

由于start.S文件时U-Boot启动时执行的第1个文件,主要完成硬件初始化、屏蔽中断、设置时钟频率等,因此可以将DPT分区表放置在这个文件中,并使用跳转指令跳过分区表。我们可以先在Linux系统下将SD卡分成我们需要的一个FAT分区和一个ext分区,各分区大小根据实际需要确定。使用诸如winHex等二进制工具提取出其分区表,并将其使用字节对齐的方式写入到start.S中,代码如图5所示。将U-Boot编译后再次使用winHex查看分区表起始位置是否位于MBR中的01BE-01CD字节位。如有差别可在start.S源码中调整分区表的代码位置。

图5 start.S中分区表代码

3.3.3FAT16文件系统识别指令设计

根据4.2节所述,建立MBR、DBR、DPT等关键数据的数据结构,代码如图6所示。先读取MBR到内存并分析得到文件系统基本配置信息,从其中计算得出DPT,在分区中分析DBR数据结构信息,计算出FAT和根目录偏移扇区,然后根据要读取的文件名在其中匹配出文件的首簇号及文件大小,根据文件的起始数据簇号在FAT表中查找所有该文件占用的数据簇号,根据数据簇号查找相应的数据簇。查找下一个数据簇号读取相应数据簇,直到读出最后一个数据簇0xFFFF[8],图7是提取文件名和在FAT16分区匹配文件的函数。

图6 主要数据结构代码

图7 文件名提取和文件查找函数

3.3.41卡启动整体流程

设计者将U-Boot、Linux内核、文件系统压缩文件和RamDisk按照存储布局制作成一个镜像文件。在第1次使用HiveBoard时,使用者只需使用win32diskimager这样的烧写工具将镜像文件烧写到SD卡的0地址就。此时SD卡的存储布局如图8所示,从SD卡第零页开始存放U-Boot(包含DPT分区表),接着是存放有Linux内核级文件系统压缩文件和RamDisk,紧接着是ext分区用来存放解压缩后的根文件系统。

图9 HiveBoard 1卡启动完整流程

HiveBoard第1次上电启动后,在U-Boot环境下输入命令,读取Linux内核uImage和RamDisk文件系统到内存指定位置,运行内核并挂接RamDisk文件系统。进入RamDisk后自动执行脚本文件重新为SD卡的ext分区重新制作ext文件系统,并读取FAT分区下的根文件系统压缩文件并解压到ext分区中。之后,系统重新启动,读取Linux内核并运行,此后挂接新制作的ext文件系统,至此,HiveBoard 1卡启动制作完成,整个过程的流程如图9所示。

4 总结

本文主要论述了基于国产微处理器的单板计算机HiveBoard的基本配置,介绍了将FAT16文件系统结合到U-Boot中,一次烧写完成U-Boot烧写、SD卡功能分区以及Linux内核与文件系统放置等工作。描述了以上工作的原理和实现方法。这为当下嵌入式系统学习和设计提供了一种使用便利、成本低廉的方案。

参考文献:

[1]南京博芯电子技术有限公司.V1.0.HiaveBoard用户手册[R].2013年.

[2]王根义,马德宝,杨黎斌.基于ARM的嵌入式最小系统架构研究[J].微计算机信息,2008(2):163-165.

[3]夏宏,郭宗一.嵌入式系统引导技术的研究与实现[J].中国电力教育,2007(S3):292-294.

[4]梁超,杨峰,雷鹏,徐志刚.U-Boot SD卡启动方式的移植分析与功能扩展[J].现代电子技术,2013,20:84-86,90.

[5]李文华,徐国洪,胡华文,等.基于FAT32文件系统的SD卡数据存储结构研究[J].长江大学学报(自然版)理工卷,2012,09(6):102-104,111.

[6]王拾亦,闫学文.基于ARM与SD卡的嵌入式存储系统研究与设计[J].微型电脑应用,2009(7):43-45+5.

[7]SEUIC.SEP6200 Linux软件开发指南[R].2013.

[8]院泽嘉,董金明.FAT16文件系统在嵌入式操作系统μC-OS中实现[J].电子测量技术,2005(6):27-28.

陆清茹(1982-),女,汉族,江苏人,东南大学电子系学士及硕士学位,东南大学成贤学院电子系助教,研究方向为嵌入式,silver_1120@163.com。

ResearchandImplementationofSystemBootingwithaSingleSD-CardBasedontheHiveBoard*

LUQingru*,SHIXiangqiang,XINGHaiyan

(Department of Electronics,Chengxian Institute,Southeast University,Nanjing 210000,China)

Abstract:HiveBoard is a single board computer designed by the researchers of the Southeast University.It’s based on the domestic SOC which is called SEP6200.It implements the whole system booting using a single SD card.In this paper,the author introduces the basic configuration of the HiveBoard.Then,the paper analyzes the data storage structure of SD card and the knowledge of the FAT16 file system.Finally,the author expounds that how to integratethe U-Boot,the Linux kernel image and the file-system in the single SD card and the whole process how the HiveBoard is booted by this SD card.

Key words:HiveBoard;SD-card system booting;embedded system;single board computer

doi:EEACC:721010.3969/j.issn.1005-9490.2014.04.030

中图分类号:TP334.7

文献标识码:A

文章编号:1005-9490(2014)04-0723-05

收稿日期:2013-12-08修改日期:2014-01-26

项目来源:国家城镇化发展用地实地核查技术研究项目(2013BAJ05B03)

猜你喜欢

单板扇区内核
分阶段调整增加扇区通行能力策略
强化『高新』内核 打造农业『硅谷』
单板U型场地滑雪关键技术动作及训练方法
基于嵌入式Linux内核的自恢复设计
Linux内核mmap保护机制研究
管制扇区复杂网络特性与抗毁性分析
U盘故障排除经验谈
单板层积材带来的内部生产模式
微生物内核 生态型农资
基于贝叶斯估计的短时空域扇区交通流量预测