当前位置:首页 > 嵌入式 > 嵌入式硬件
[导读]摘要:以Motorola 32位处理器ColdFire5307为例,分析、介绍Motorola公司用于嵌入式系统开发的dBUG通用bootloader软件的结构、运行原理及应用。 关键词:嵌入式系统 ColdF

摘要:以Motorola 32位处理器ColdFire5307为例,分析、介绍Motorola公司用于嵌入式系统开发的dBUG通用bootloader软件的结构、运行原理及应用。 关键词:嵌入式系统 ColdFire bootloader dBUG 引 言 bootloader是用来完成系统启动和系统软件加载工作的程序。它是底层硬件和上层应用软件之间的一个中间件软件,完成处理器和周边电路正常运行所要的初始化工作;可以屏蔽底层硬件的差异,使上层应用软件的编写和移植更加方便;不仅具有类似PC机上常用的BIOS(Basic Input Output System,基本输入、输出系统监控程序)功能,而且还可具有一定的调试功能。目前,在嵌入式系统开发中有多种bootloader可供选择,其中 Motorola公司的名为dBUG的bootloader比较优秀。它可以移植在Motorola MC68000、ColdFire和PowerPC系列所有微处理器上面,有强大的调试功能,支持单步、下载、网络更新等;其良好的软件架构使用户能很方便地修改其代码,扩展新的功能。本文以作者用于网络数据存储的coldfire5307C3开发板为例,简析其上的dBUG bootloader的结构和运行机制,并给出实际修改范例。 1 bootloader源码结构 (1)bootloader的文件组织   dBUG bootloader源代码可以从Motorola公司网站获得。它是一个范例程序,通过修改相应的配置文件和处理器相关文件,可以很方便地移植到不同的处理器系统上。其源码由两个部分组成,一部分是lib项目,另外一部分是每种Motorola微处理器单独的处理器项目。比如,ColdFire 5307就使用MCF5307C3项目和lib项目一起来生成最终的dBUG代码。其中lib项目中是与处理器无关的一些命令或者函数,而每个单独的处理器项目是和每种不同的处理器息息相关的。在编译的时候,首先需要将lib项目编译生成标准库函数(也就是将一些通用命令和函数先封装起来)。然后,编译 MCF5307C3项目,就会将刚才编译的lib项目和MCF5307C3项目结合在一起生成最终代码。   整个dBUG bootloader代码的架构比较复杂,其源码按功能可分为3个模块[1]:User Interface Component、CPU-specific Component、Board-specific Component。用户进入dBUG的目录以后,会看到三个子目录,如图1所示[1,2]。 ① 第一个目录是bin目录,在该目录下面主要是一个简单的TFTP Server软件。TFTP是简单的FTP(文件传输协议)。它是基于UDP协议的,主要用来下载程序目标代码。 ② 第二个目录是prog目录,下面主要是lib项目和MCF5307C3项目的项目组织文件和一部分源代码。在prog目录下面的libdbug目录下,有 lib项目的项目管理文件libdbug.mcp,使用CodeWarrior可以打开该项目文件和编译等。prog目录下面的M5307C3目录下是 ColdFire 5307系统的项目文件,而该目录下的obj目录下是生成的dBUG目标代码。src目录下是5307项目的项目管理文件。用户可以使用 CodeWarrior,打开M5307C3目录下的/src/dbug/mwerks/m5307c3.mcp项目管理文件来编译代码。

③ 第三个目录是src目录,是dBUG的主要源代码。   综上所述,用户只要打开m5307c3.mcp和libdbug.mcp两个项目文件,即可以看到dBUG所有的源代码。 (2)与处理器和外围硬件配置相关的文件 ① 入口文件:vector.s。 存有处理器复位初始入口地址、跳转指令及中断矢量表。 ② 初始化汇编语言文件:mcfxxxx_lo.s。 功能为预初始化处理器、调用初始化函数及跳转到main主函数。其中xxxx表示某特定的处理器型号,如5307。 ③ 初始化C语言文件:Sysinit.c。 内含多个初始化函数,功能为初始化处理器及各底层硬件。 ④ 系统配置文件:Config.h和Board.h 。 Config.h 设定板上处理器类型和其它模块功能。 Board.h 设定板上各参数信息,如片外Flash和SDRAM大小、类型、数据宽度和地址范围、划分板上内存空间范围、系统时钟大小、系统总线速率以及一些其它要用到的系统常量。 ⑤ 连接配置文件:Flash.lcf。 设定连接时各函数空间地址及内存分配。 ⑥ 预包含头文件:mxxxx_mwerks.h和mwerks.h。 两函数被所有的C语言和汇编语言函数包含,它们设定CodeWarrior 预处理器所用到的常量和编译器编译选项。 2 bootloader运行流程简介   bootloader启动流程如图2所示。   系统上电复位后,跳到Boot ROM的最低地址处。Boot ROM的开始空间FFE00000"FFE00400为vector.s中的中断矢量表。将表中第一个32位字传给5307的SP,将第二个32位字传给 PC,即完成复位中断跳转。   该复位中断跳转到vector.s中的start处。此处仅初始化sr,然后跳转到mcf5307_lo.s中的asm_startmeup。该段代码首先进行部分初始化和真正初始化前的准备工作:禁止Cache、禁止中断和地址转换、初始化用户指定的内部模块(MBAR)和内部 SRAM(RAMBAR)起始地址。然后,将SP指向内部SRAM空间,即当调用真正的初始化程序时用内部SRAM的一段地址空间作为临时堆栈。接下来,调用sysinit.c文件中的外围电路和系统配置的初始化程序mcf5307_init()。   mcf5307_init()函数顺序调用各个功能的初始化子函数,初始化系统集成模块、并行通用输出输入口、串口、I2C控制器、DMA控制器、片选寄存器、SDRAM控制器。当运行完mcf5307_init()后,流程回到asm_startmeup中。此时,外围电路和内部模块已按用户要求进行了正确的配置,系统的初始化已基本完成。于是,将堆栈指针SP指向用户要求的堆栈空间,该堆栈为该板上的外部SDRAM空间。最后,跳转至main函数。

  在main中,首先将系统的矢量表从Flash空间拷贝到用户指定的外部SDRAM中。然后,将Flash中的data段初值拷贝到外部SDRAM指定的data空间中,根据配置将外部SDRAM中的bss段清0,之后进行一些系统全局数据结构、参数表等的初始化。最后,调用mainloop开始人机交互循环:不断接收用户的命令、根据命令查表调用相应的任务函数、在界面上打印出相应的执行信息。 3 bootloader用户应用 (1)bootloader的系统移植   由于Motorola的dBUG bootloader为一标准的范例程序,要将其移植到具体的嵌入式系统中,还需要根据系统的硬件配置,修改其部分配置文件和底层接口文件。本文以用于网络数据存储的ColdFire5307C3开发板为例,介绍在其上的dBUG移植过程。 ①ColdFire5307C3开发板硬件情况: ColdFire5307 32位处理器,16MB (32位数据总线)SDRAM,2MB (16位数据总线)Flash ROM,2 UART,10Mbps (16位数据总线)以太网接口。 ②修改bootloader的处理器和配置相关文件: a. 根据5307处理器手册及用户需要,修改vector.s中的中断矢量表。 b. 根据5307处理器手册编写mcf5307_lo.s文件。 c. 根据板上的硬件配置修改sysinit.c文件,编写相应的硬件初始化函数。 d. 根据系统配置修改config.h和board.h文件。 e. 根据需要修改mxxxx_mwerks.h和mwerks.h,设定某些编译选项。 f. 根据需要修改连接配置文件Flash.lcf,设定连接时目标代码的地址分配。 g. 编写相应的硬件驱动,如该板上用到的MBM29LV 160BE70 Flash芯片的驱动程序文件am29xxxx.c和am29 xxxx.h、该板上用到的网卡芯片的驱动程序文件Ns8390.c以及5307的串口驱动函数等。 (2)bootloader命令简介[2]   dBUG提供了丰富的调试命令: ① 程序流程控制命令reset(系统重启)、go、exe(用户程序执行)、br(断点设置)、step(单步)、trace(单步跟入)、gt(运行到); ② 内存和寄存器操作命令md、mm(内存查看和修改)、rd、rm(寄存器查看和修改)、bm(内处块移动)、bf(内存块数据填充)、bc(内存块比较)、bs(内存块查找); ③ 指令和数据操作命令dc(数据转换)、dis(反汇编)、asm (汇编指令插入)、sym(符号表管理); ④ 程序下载命令dl(通过串口下载)、dn(通过网络下载)。 (3)bootloader用户功能扩展   除了dBUG bootloader本身提供给用户的命令外,用户还希望根据不同的情况定制自己的命令。如Linux加载、μC/OS加载、kermit下载等。一般自己添加的命令都会放在一个单独的C文件里面。为了方便,用户也将自己添加的命令都放在board.c文件的最后。   例如,用户想要给dBUG添加μC/OS操作系统加载的功能,除了在dBUG中加上自己的程序加载代码外,还应给dBUG添加一个名为ucosii的用户命令。这样可以通过在界面上输入命令的形式实现相应的加载功能。首先应该在board.c里面实现这个函数: ucos_boot (int argc, char **argv) { ………… }   而后,应在cmds.c文件里面声明这个函数,并在紧接着的UIF_CMD UIF_CMDTAB数组里面声明这个命令的特性和参数。   {“ucosii”, 4,0,0,0,ucos_boot, “Boot uCOS-II from RAM”,””},   其中,第一个test字符串是命令的名称,第二个4表明命令识别的时候要匹配4个字符才行,最后的字符串是help命令时对test命令的解释。在描述中间的test表明指向的函数名称。这样就很方便地添加了这个用户命令。 4 结 论   综上所述,Motorola公司的dBUG软件由于其良好的源代码组织结构使得用户在其上开发应用非常方便,用户稍加修改就可将其移植到不同的硬件平台上。它拥有良好的用户界面,不仅可以完成用户所需的程序下载、加载等功能,而且还可以方便地进行调试,使用户可以更好地监控自己的程序。除此之外,用户还可以很方便地添加自己所要的功能,其结构具有良好的可扩展性。所以,Motorola公司的dBUG 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 信息技术
关闭
关闭