当前位置:首页 > 单片机 > 单片机
[导读]BootLoader通常称为“系统的引导加载程序”,是系统加电或复位后执行的第一段程序代码[1]。这段程序的主要任务是,实现硬件设备初始化并建立内存空间的映射图,从而将系统的软硬件环境带到一个合适的状态,

BootLoader通常称为“系统的引导加载程序”,是系统加电或复位后执行的第一段程序代码[1]。这段程序的主要任务是,实现硬件设备初始化并建立内存空间的映射图,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统内核或用户应用程序准备好正确的环境。通常, BootLoader包含两种不同的加载和启动引导方式,即启动加载方式和下载方式。

① 启动加载(boot loading)方式。这种引导方式也称为“自主(autonomous)引导方式”,也即BootLoader从目标机的某个固态存储设备上将操作系统加载到RAM中并引导运行,整个过程并没有用户的介入。这种引导方式是BootLoader的正常工作模式下普遍采用的一种引导方式。因此在嵌入式产品发布的时候,BootLoader一般以这种引导方式对内核代码进行启动引导。

② 下载(down loading)方式。在这种引导方式下目标机上的BootLoader将通过串口连接或网络连接等通信手段从主机下载文件,如下载应用程序、数据文件、内核映像等。从主机下载的文件通常首先被BootLoader保存到目标机的RAM中,然后再被BootLoader写到目标机上的固态存储设备中,其后完成内核的引导运行。BootLoader的这种引导方式通常在系统研发和更新时使用。

在嵌入式系统研发阶段,现有的BootLoader下载引导方式又可根据加载途径的不同细分为以下几种:

① 通过Ethernet网口从宿主机下载内核到目标板,从而实现软件系统启动;

② 通过串口从宿主机下载内核到目标板从而实现软件系统启动;

③ 直接从Flash中提取已存储的内核,从而实现软件系统的启动。

总结以上几种引导方式会发现,它们有些共同的弊端;在系统调试时需要进行宿主机与目标板间的硬件线路的实际连接,使用起来不够方便,且烧片的速度比较缓慢,调试的效率不高;硬件方面需要大容量的Flash的支持,增加了研发成本;进行内核更新时显得不够灵活。为此,采用可移动的存储介质对系统内核进行存储(如SD卡、CF卡等),从而实现对系统内核的灵活调试和引导。这种引导方式的好处是,在调试时无需把宿主机和目标板进行硬件连接,提高了调试的效率,使用起来更便捷、更灵活;进行内核更新时显得更为灵活,只需把更新内核转存到指定目录,此外它的实现也比较简单。进行这方面的改进时只需做以下工作:在硬件方面,增加针对特定移动存储介质的硬件电路,而在中大型系统中,有关移动存储介质的硬件电路(如SD卡、CF卡等相关的电路)是现成的,所以硬件部分也可忽略;在BootLoader程序内部,只需添加对移动存储介质(如CF卡、SD卡等)基于文件系统进行存储访问的指令。按此思路,在已有硬件平台的基础上针对移动设备SD卡对原有BootLoader进行了改进。下面介绍实现过程。

1 硬件平台

本次改进测试的硬件平台是由英蓓特公司开发的基于LPC2294 ARM控制器的LPC22EB06I实验平台。其上的主要功能模块有:

① 2 MB的Flash、1 MB的SRAM(可扩展到4 MB)、256B具有I2C接口的E2PROM等存储器;

② 2个RS232(其中一路可接Modem)、RS485、CAN等通信总线接口;

③ 2个调试接口:LPT和JTAG调试接口;

④ 支持CF卡、SD/MMC等移动存储介质;

⑤ 支持128×128真彩显示。

图1是其硬件功能框图。


图1 LPC22EB06I开发平台功能框图

2 BootLoader的改进设计

2.1 原有BootLoader功能

原来的BootLoader具有如下功能:

① 串口下载功能,通过串口下载内核到指定RAM区;

② Flash烧写功能,从RAM区烧写数据到Flash中;

③ 数据区内块搬移功能;

④ 其他功能。其指令封装结构如下:

struct _CMD_TBL {

char *cmd;//命令字

bool(*run)(struct _CMD_TBL*cptr,int argc,char**argv);//指向具体的功能处理函数

char*usage;//命令使用方法信息

char*help;//帮助信息

char*helpMore;

};

例如,Flash烧写命令封装如下:

CMD_TBL_FLASH

{"flash",DoWriteToFlashBlocks,

"flash {loader/kernel/root} {block1/.../block16} "

" Copy to Flash from SDRAM of Area. "

"flash [dest] [src] [len] "

" Copy to Flash from src to dest. ",

"flash {loader/kernel/root} {block1/.../block16} "

" Copy to Flash from SDRAM. ",

"flash {loader/kernel/root} {block1/.../block16} "

" Copy to Flash from SDRAM of Area. "

"flash [dest] [src] [len] "

" Copy to Flash from src to dest. "

}

其中,flash是其命令字;DoWriteToFlashBlocks为其处理方法的方法名;flash {loader/kernel/root} {block1/.../block16}和flash [dest] [src] [len]为其命令的使用格式(其中“{}”内为可选项,“[]”内为必选项)。

2.2 BootLoader改进实验

此次改进就是在原有BootLoader的基础上,增加对移动存储介质SD卡以FAT格式进行读取数据的指令来实现的。命令封装如下:

CMD_TBL_SD_READ

{"readSD", DoReadFromSDBlocks,

"readSD [filename] [addr] Read data from SD to SDRAM for startup. ",

"readSD [filename] [addr] Read data from SD to SDRAM for startup. ",

"readSD [filename] [addr] Read data from SD to SDRAM for startup. "

}

其功能是,在SD卡中把指定目录下的内核文件提取到SDRAM区域中,从而完成内核的加载。


另增加3条辅助指令,一条完成SD卡的格式化,另一条完成对系统内核的保存,最后一条完成对系统内核的启动加载。命令封装如下:

CMD_TBL_SD_FORMAT{

"formatSD",DoFormatSDCard,

"formatSDformat SD card with FAT ",

"formatSDformat SD card with FAT ",

"formatSDformat SD card with FAT "

}

CMD_TBL_SD_STORE{

"SDstore", DoStoreToSDBlocks,

"SDstore [addr] {kernel/rootfs} "

"Store kernel/rootfs fromSDRAMto SD card. ",

"SDstore [addr] {kernel/rootfs} "

"Store kernel/rootfs fromSDRAM to SD card. ",

"SDstore [addr] {kernel/rootfs} "

"Store kernel/rootfs fromSDRAM to SD card. "

}

CMD_TBL_SD_LOAD{

"SDload", DoLoadFromSDBlocks,

"SDload [addr] {kernel/rootfs} "

"Load kernel/rootfs from SD card toSDRAM. ",

"SDstore [addr] {kernel/rootfs} "

"Load kernel/rootfs from SD card toSDRAM. ",

"SDstore [addr] {kernel/rootfs} "

"Load kernel/rootfs from SD card toSDRAM. "

}

其中,CMD_TBL_SD_FORMAT的功能是完成对SD卡的格式化,CMD_TBL_SD_STORE的功能是把SDRAM区域中的内核代码备份到SD卡的固定存储区,CMD_TBL_SD_LOAD的功能是把SD卡的固定存储区中的内核代码加载到指定的SDRAM区域中。

下面分析一下其基于FAT文件系统的具体读取和备份方法。首先看一下FAT文件系统的基本结构。FAT文件系统的整体结构大体由4大部分组成: MBR区(主引导记录区)、DBR区(DOS引导记录区)、FAT区(文件分配表区,FAT1为主文件分配表区,FAT2为备份文件分配表区)和DATA 区(数据区,包含FDT区——文件目录表区)。FAT文件系统结构如下:

其各个区域基扇区地址(把MBR区的基扇区地址作为0)计算如下:

DBR区的基扇区地址=MBR基扇区地址+63

FAT表的基扇区地址=DBR的基扇区地址+保留扇区数

FDT区基扇区地址=每FAT表扇区数×FAT表个数+(FDT区的开始簇号2)×每簇扇区数+FAT表基扇区地址。(簇是系统进行文件管理的单位,FAT表中的每一项对应一个簇,文件的存取按簇进行,一簇包含若干个扇区。)

从FAT文件系统的组织结构可以看出,从SD卡中读取系统内核代码数据到指定的RAM区比较容易,就是根据系统内核文件名在文件系统中进行查找定位,随后完成读取。对于内核代码的备份和加载,需要在深入分析FAT文件系统的组织结构的基础上对SD卡格式化作一些处理。在格式化时,通过设置MBR 区和DBR区的数据实现不对SD卡存储区的最末8 MB区域(根据实际需要可增减)作格式化处理的目的,即把它置为RAW区。所以系统内核备份的实现,就是把系统内核代码通过SD卡的写入指令填充到RAW 区。系统内核的加载是从RAW区直接读取备份的内核代码。

3 总结

本文所述的内核加载启动引导方式已经过实践验证。它实现了目标板与宿主机间硬件线路连接的完全脱离,为系统调试者提供了便利,有效地提高了系统调试的效率;与此同时,它还能方便地实现系统的在线更新。可以说要进行系统启动引导设计,此方法是一个不错的选择。最后说明一点,本文介绍的 BootLoader改进方法是在LCP2294芯片开发的LPC22EB06I实验平台上完成的。由于BootLoader与处理器的体系结构和具体嵌入式板级设备的配置密切相关,若要在其他的处理器芯片或平台上采用上述方法,还需对BootLoader中与处理器体系结构相关的代码作适当的修改。这部分不是本文探讨的主要内容,所以在此不再详述,若有读者还想详细了解相关内容,请查阅相关论文或书籍。

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

9月2日消息,不造车的华为或将催生出更大的独角兽公司,随着阿维塔和赛力斯的入局,华为引望愈发显得引人瞩目。

关键字: 阿维塔 塞力斯 华为

加利福尼亚州圣克拉拉县2024年8月30日 /美通社/ -- 数字化转型技术解决方案公司Trianz今天宣布,该公司与Amazon Web Services (AWS)签订了...

关键字: AWS AN BSP 数字化

伦敦2024年8月29日 /美通社/ -- 英国汽车技术公司SODA.Auto推出其旗舰产品SODA V,这是全球首款涵盖汽车工程师从创意到认证的所有需求的工具,可用于创建软件定义汽车。 SODA V工具的开发耗时1.5...

关键字: 汽车 人工智能 智能驱动 BSP

北京2024年8月28日 /美通社/ -- 越来越多用户希望企业业务能7×24不间断运行,同时企业却面临越来越多业务中断的风险,如企业系统复杂性的增加,频繁的功能更新和发布等。如何确保业务连续性,提升韧性,成...

关键字: 亚马逊 解密 控制平面 BSP

8月30日消息,据媒体报道,腾讯和网易近期正在缩减他们对日本游戏市场的投资。

关键字: 腾讯 编码器 CPU

8月28日消息,今天上午,2024中国国际大数据产业博览会开幕式在贵阳举行,华为董事、质量流程IT总裁陶景文发表了演讲。

关键字: 华为 12nm EDA 半导体

8月28日消息,在2024中国国际大数据产业博览会上,华为常务董事、华为云CEO张平安发表演讲称,数字世界的话语权最终是由生态的繁荣决定的。

关键字: 华为 12nm 手机 卫星通信

要点: 有效应对环境变化,经营业绩稳中有升 落实提质增效举措,毛利润率延续升势 战略布局成效显著,战新业务引领增长 以科技创新为引领,提升企业核心竞争力 坚持高质量发展策略,塑强核心竞争优势...

关键字: 通信 BSP 电信运营商 数字经济

北京2024年8月27日 /美通社/ -- 8月21日,由中央广播电视总台与中国电影电视技术学会联合牵头组建的NVI技术创新联盟在BIRTV2024超高清全产业链发展研讨会上宣布正式成立。 活动现场 NVI技术创新联...

关键字: VI 传输协议 音频 BSP

北京2024年8月27日 /美通社/ -- 在8月23日举办的2024年长三角生态绿色一体化发展示范区联合招商会上,软通动力信息技术(集团)股份有限公司(以下简称"软通动力")与长三角投资(上海)有限...

关键字: BSP 信息技术
关闭
关闭