毕业设计(论文)基于SEP3203F50 ARM的开发研究Uboot移植.doc

上传人:laozhun 文档编号:3979850 上传时间:2023-03-30 格式:DOC 页数:28 大小:310KB
返回 下载 相关 举报
毕业设计(论文)基于SEP3203F50 ARM的开发研究Uboot移植.doc_第1页
第1页 / 共28页
毕业设计(论文)基于SEP3203F50 ARM的开发研究Uboot移植.doc_第2页
第2页 / 共28页
毕业设计(论文)基于SEP3203F50 ARM的开发研究Uboot移植.doc_第3页
第3页 / 共28页
毕业设计(论文)基于SEP3203F50 ARM的开发研究Uboot移植.doc_第4页
第4页 / 共28页
毕业设计(论文)基于SEP3203F50 ARM的开发研究Uboot移植.doc_第5页
第5页 / 共28页
点击查看更多>>
资源描述

《毕业设计(论文)基于SEP3203F50 ARM的开发研究Uboot移植.doc》由会员分享,可在线阅读,更多相关《毕业设计(论文)基于SEP3203F50 ARM的开发研究Uboot移植.doc(28页珍藏版)》请在三一办公上搜索。

1、基于SEP3203F50 ARM的开发研究U-boot移植摘 要Bootloader (引导加载程序) 是嵌入式系统CPU 加电后第一个开始运行的代码。在内核映像执行之前完成相关的底层硬件的初始化,建立内存空间的映射图等重要工作,然后为内核提供引导参数,启动内核。嵌入式系统的开发中,移植一个稳定且功能强大的 U-boot 对后续软件的开发至关重要。U-boot (Univers0al Bootloader),是一个功能十分强大的Bootloader ,本文深入研究了U-boot 的工作机理,详细分析了U-boot的源码结构和启动流程,通过串口和JTAG口,将开发板与主机连接,利用调试软件AXD

2、,在主机上实现代码的运行和编译,将目标代码下载到开发板,为嵌入式的后续开发做好准备。关键词 :Bootloader;嵌入式系统;U-boot ;SEP3203F50;移植The development and research onthe SEP3203F50 ARM U-boot transplantAbstract Bootloader(lead and load programme) is the first start running code after the embedded system cpu electrify. It completes rock-bottom hardw

3、ares initialization before execute the kernel image, build memory space and something else important, then provide kernel with lead parameter, and start kernel. In embedded system development,transplant an stable and strong function U-boot is very important for following software development.U-boot

4、(Universal Bootloader), its a powerfui function Bootloader, The article has thoroughly studied the working principle,structure and startup flow of U-boot,through serial interface and JTAG,connect board and computer,use AXD debug,carry out running and debugging of the code,then download target code t

5、o the board,and get ready for empoldering of embedded system .Key words: Bootloader;embedded system;U-boot;SEP3203F50;transplant目 录中文摘要I英文摘要II前 言1第1章 嵌入式系统综述21.1嵌入式系统及其应用开发21.2嵌入式系统的现状及发展前景2第2章 嵌入式系统的启动代码32.1启动代码32.2启动代码的主要作用32.3启动代码相关的硬件信息32.4本系统涉及的硬件信息4第3章 U-boot53.1 U-boot简介53.1.1 U-boot代码的特点分析53

6、.1.2 U-boot支持的主要功能53.2 U-boot的源码结构分析63.3 U-boot的启动流程分析73.3.1 Stage 1(start.s代码结构)73.3.2 stage 2(C语言代码部分)7第4章 U-boot移植94.1 移植前的准备工作94.2 嵌入式开发环境 94.3 U-boot的编译124.3.1 顶层目录下的Makefile124.3.2 开发板配置头文件144.3.3 编译结果144.4 烧写U-boot到Nor Flash154.4.1 烧录代码154.4.2 烧录步骤164.5 移植步骤16结束语19致谢20参考文献21附件22前 言嵌入式系统已经无处不在

7、,从汽车电子、通信设备,到工业控制、医疗仪器,乃至航空航天、国防安全等各行各业,嵌入式系统正日益与人们的日常生活发生越来越紧密的联系。网络设备、移动电话,还有各式各样的手持电子设备,无不是嵌入式系统的成功典范。随着各个应用领域对智能设备的需求迅速增长,嵌入式系统的开发也逐渐成为软硬件领域的研究热点,从而促进了近年来嵌入式系统的研究深度和广度不断增加,这使得更多的开发人员渴望了解嵌入式系统的原理和开发过程。本文针对嵌入式系统的启动代码U-boot,详细地介绍了嵌入式系统开发的概念和应用,U-boot的原理以及移植过程。限于本人的理论水平和实际开发经验,论文当中难免存在一些不足之处,恳请同学和老师

8、批评指正。第1章 嵌入式系统综述1.1嵌入式系统及其应用开发随着信息化技术的发展,嵌入式系统已经成为当前IT产业界一个非常热门的话题。因其高效、低成本、高可靠性、丰富的代码以及应用程序可扩展性、可移植性等一系列优点,目前已越来越成为工业系统和民用系统的主力军,尤其在信息化产品中,越来越多地应用到嵌入式系统的概念。在多数网站和书籍资料中,对嵌入式系统的定义大多是这样的:嵌入式系统是以应用为中心,以计算机技术为基础,并且软硬件可剪裁,适用于应用系统对功能、可靠性、成本、体积、功耗有严格要求的专用计算机系统。嵌入式系统一般由嵌入式微处理器、外围硬件设备、嵌入式操作系统以及用户应用程序4个部分组成,用

9、于实现对其他设备的控制、监视或管理等功能。1后PC时代是一个真实的阶段,而且是一个可以预测的时代。嵌入式系统就是与这一时代紧密相关的产物,它将拉近人与计算机的距离,形成一个人机和谐的工作与生活环境。从某一个角度来看,嵌入式系统可应用于人类工作与生活的各个领域,具有极其广阔的应用前景。 嵌入式系统在传统的工业控制和商业管理领域已经具有广泛的应用空间,如智能工控设备、 POS/ATM机、IC卡等;在家庭领域更具有广泛的应用潜力,如机顶盒、数字电视、WebTV、网 络冰箱、网络空调等众多消费类和医疗保健类电子设备等;此外还有在多媒体手机、袖珍电 脑、掌上电脑、车载导航器等方面应用,将极大地推动嵌入式

10、技术深入到生活和工作的方方面面。它在娱乐、军事方面的应用潜力也是巨大的,而且是有目共睹的。面对全球嵌入式系统工业化的潮流,适应我国加速知识创新和建立面向21世纪知识经济的需要,必须加强高等院校嵌入式系统的教学,培养高层次、实用型、复合型、国际化的嵌入式系统应用人才,使我国嵌入式系统应用水平获得跨越式发展。1.2嵌入式系统的现状及发展前景目前世界范围内嵌入式系统带来的工业年产值已超过了1万亿美元。据塞迪呼叫中心合作开展的调查显示,目前从事嵌入式领域的开发的公司占到了30%左右,计划从事开发的企业占到了14%。尽管还没有从事该领域开发的公司占到了大多数,但我国国内的嵌入式软件市场已处于整体启动阶段

11、。国内嵌入式软件市场未来的发展重点在于对应用范围的拓展,而手持设备、信息家电和工业控制则是近期市场的三大热点。展望未来,明天的嵌入式系统将会比今天的更便宜、更小巧、更可靠、更高效而且更智能化。现在嵌入式系统正处于高速发展阶段,未来几年,随着嵌入式研究的广度和深度不断增加和越来越多的嵌入式人才的加入,这种发展和竞争将愈演愈烈。2第2章 嵌入式系统的启动代码嵌入式系统大多是功能比较单一和固定的系统,通常并没有像PC机的BIOS那样的固件程序,因此在运行嵌入式操作系统或用户的应用程序之前,必须有专门的启动程序来引导硬件系统进入操作系统或主应用程序,因此整个系统的启动加载任务就完全由启动程序来完成。启

12、动程序完成系统正常运行所必须的简单初始化后把系统控制权交给操作系统或者主应用程序。2.1启动代码简单地说启动程序就是在操作系统内核或用户应用程序运行之前运行的一段小程序,是系统加电后运行的第一段软件代码,其功能和PC机上的BOIS类似。通过运行这段小程序对系统硬件进行初始化,将系统的软硬件环境带到一个由用户定制的特定状态,为加载操作系统或用户应用程序做好准备。系统加电或复位后,所有的CPU通常都从CPU制造商预先安排的地址上取指令。SEP3203F50在复位后从地址0x00000000取它的第一条指令。嵌入式系统通常都有某种类型的固态存储器(如:ROM、EEPROM或FLASH等)被安排这个起

13、始地址上。为了保证系统上电或复位时启动程序首先被加载运行,必须将它存放在固态存储器中的0x00000000处,并在硬件设计中把固态存储器接在CPU的nGCS0处。这样一来在系统加电启动后,CPU将首先执行启动程序。2.2启动代码的主要作用系统上电启动或者复位后,开始从地址0x00000000执行启动程序。首先完成简单的硬件设备初始化,对CPU和内存进行简单的初始化;再将启动代码拷贝到RAM空间运行,之后设置好必要的堆栈。在完成了前面的任务后,启动代码剩余的部分就可以直接使用C语言完成了,此时将启动代码跳转到C语言入口处,接下来初始化系统需要使用的其他硬件设备(串口,网络等),检测系统内存映射,

14、将操作系统内核和根文件系统从Flash读入RAM,为内核设置启动参数,调用内核。32.3 启动代码相关的硬件信息通常启动代码是依赖于硬件而实现的,每种不同的CPU体系结构都有不同的启动程序。对于ARM核CPU而言,不同的CPU制造公司为适应不同功能和用户的需要会在ARM核基础上扩展一系列外围器件,因此ARM核处理器结构一般并不相同,启动代码的编写也有一些区别。除了依赖于CPU的体系结构外,启动程序实际上还依赖于具体的嵌入式系统板级设备的配置。启动程序与系统硬件有关,特别是与系统启动相关的硬件信息。主要有:(1) 设备线宽:即启动设备是16位,还是32位,也就是说系统启动设备硬件上的连接情况,是

15、否是多片设备合并做32位16位设备的。(2) 大小端:ARM核的CPU支持大小端模式,在开发启动程序和选择编译器的时候必须清楚所使用的CPU的相关信息。(3) 时序问题:一般的系统启动时CPU会自动选择慢速访问外部存储器以适合大多数设备。因此编写启动代码时,需要修改CPU相关的寄存器增加取指和存取速度,以提高系统启动速度。(4) 系统RAM情况:需要了解系统所使用的RAM类型,地址情况等信息。另外,开发固件程序和启动代码的时候必须了解清楚电路原理图是必不可少的。42.4本系统涉及的硬件信息SEP3203微控制器是具有自主知识产权的面向无线及多媒体信息终端应用设计的基于ARM7TDMI处理器内核

16、的Soc芯片。SEP3203芯片采用32位RISC处理器微控制器,具有低功耗、低成本的有点,此外SEP3203还提供了完整的通用外设接口,可以满足系统用户的各种需求。GE01的主要特征有:(1) SEP3203F50芯片:采用32位RISC控制器,芯片典型工作频率75MHZ(2) ROM:NAND FLASH/NOR FLASH,支持64MByte NAND FLASH启动(兼容128MByte),支持NOR FLASH启动(容量为2MB)(3) 存储器:2片SDRAM最大支持32MByte寻址(兼容16Byte),1片NOR FLASH(4) RTC输入逻辑,提供32.768KHZ时钟源(5

17、) JTAG独立调试接口第3章 U-boot3.1 U-boot简介U-boot,全称Universal BootLoader,由德国DENX小组开发,并遵循GPL条款的开放源码项目。从FADSROM、8xxROM、PPCBOOT 逐步发展演化而来。其源码目录、编译形式与Linux内核很相似,事实上,不少U-boot源码就是相应的Linux内核源程序的简化,尤其是一些设备的驱动程序,这从U-boot源码的注释中能体现这一点。但是U-boot不仅仅支持嵌入式Linux系统的引导,当前,它还支持NetBSD,Vxworkers,QNX嵌入式操作系统,其目前主要支持的目标系统是OpenSBD,Net

18、BSD,FreeBSD,4_4BSD,Linux等,这是U-boot中Universal的一层含义,另外一层含义则是U-boot 除了支持PowerPC系列的处理器外,还能支持MIPS、x86、ARM、NIOS、XScale等诸多常用系列的处理器。这两个特点正是U-boot 项目的开发目标,即支持尽可能多的嵌入式处理器和嵌入式操作系统。就目前来看,U-boot对PowerPC系列处理器支持最为丰富,对Linux 的支持最完善。其它系列的处理器和操作系统基本是在2002年11月PPCBOOT改名为U-boot 后逐步扩充的从PPCBOOT向U-boot的顺利过渡,很大程度上归功于U-boot的维

19、护人德国DENX软件工程中心Wolfgone Denk精湛的专业水平和持着不懈的努力。当前,U-boot项目正在他的领军之下,众多有志于开放源码BOOT LOADER移植工作的嵌入式开发人员正如火如荼地将各个不同系列嵌入式处理器的移植工作不断展开和深入,以支持更多的嵌入式操作系统的装载与引导。53.1.1 U-boot代码的特点分析 Linux有许多引导装载程序可用,U-boot是其中被认为最具弹性和功能最强大的引导装载程序。经过研究分析,U-boot代码的特点描述如下: 开放源码; 支持多种嵌入式操作系统内核,如Linux、NetBSD, VxWorks, QNX, RTEMS, ARTOS

20、, LynxOS; 支持多个处理器系列,如PowerPC、ARM、x86、MIPS、XScale; 较高的可靠性和稳定性; 高度灵活的功能设置,适合U-boot 调试、操作系统不同引导要求、产品发布等; 丰富的设备驱动源码,如串口、以太网、SDRAM、FLASH、LCD、NVRAM、EEPROM、RLC、键盘等。 较为丰富的开发调试文档与强大的网络技术支持;63.1.2 U-boot支持的主要功能系统引导:支持 NFS 挂载、RAMDISK(压缩或非压缩)形式的根文件系统;支持 NFS挂载、从 FLASH 中引导压缩或非压缩系统内核; 基本辅助功能:强大的操作系统接口功能;可灵活设置、传递多个

21、关键参数给操作系统。适合系统在不同开发阶段的调试要求与产品发布,尤其对Linux支持最为强劲;支持目标板环境参数多种存储方式,如FLASH、NVRAM、EEPROM;CRC32校验,可校验FLASH中内核、RAMDISK镜像文件是否完好;用户可以在不需要ICE的情况下通过串口、以太网、 USB等接口下载数据,并烧录到存储设备中去,这个功能在实际的产品中很实用,尤其是在现场软件升级的时候。设备驱动:串口、SDRAM、FLASH、以太网、LCD、NVRAM、EEPROM、键盘、USB、PCMCIA、PCI、RTC 等驱动支持;上电自检功能:SDRAM、FLASH大小自动检测;SDRAM故障检测;C

22、PU型号; 特殊功能:XIP内核引导;73.2 U-boot的源码结构分析U-boot源码相当复杂,覆盖各种常用的目标板配置。将U-boot源码包解压就可得到全部U-boot源程序,在顶层目录下有18个子目录,分别存放和管理不同的源程序,这些目录中所有存放的文件按其规则,可以分为3类: 第一类目录与处理器体系结构或者开发板硬件直接相关; 第二类目录是一些通用的函数或则驱动程序; 第三类目录是U-boot的应用程序、工具或者文档;board:该目录下为每一种开发板建立了一个子目录,每个子目录里存放与开发板硬件相关的代码(至少包含有一个以开发板型号命名的.c 文件和一个 config.mk文件);

23、要将U-boot移植到自己的目标板上,必须参考这个目录下的内容,比如对Flash以及Flash宽度和大小的定制等就要修改其中的flash.c。common:该目录下包含了U-boot的所有上层代码,即与硬件无关的代码,主要是命令处理、内存管理以及硬件设备的应用等;cpu:该目录和board目录类似的为每款 CPU 建立了一个子目录,子目录中存放了与该款CPU相关的代码,主要是CPU上电后的初始化、cache的配置、中断处理程序、串口函数等;disk:该目录下存放的是文件分区表的处理函数,主要针对IDE、SCIS、USB设备;doc:该目录下存放了U-boot的一些说明文档;drivers:该目

24、录下存放了一些通用的模块的驱动程序,如RTL8019、MAX3100等;dtt:该目录下存放了一些常用的数字温度传感器的驱动程序;examples:该目录下存放了一些独立的应用示例程序;fs:该目录下存放的是文件系统的代码,主要支持的文件系统有 FAT、Ext2、Jffs2等;include:该目录下存放的是通用的头文件,该目录下还为不同的体系结构分别设立子目录,各体系结构的子目录下又有各种CPU自己的目录;lib_xxx:该目录下存放的是与各种体系结构相关的代码;lib_generic:该目录下存放的是各体系结构中通用部分的代码;lib:该目录下存放的是与网络相关的代码;post:该目录下存

25、放的是系统上电后的自检代码;rtc:该目录下存放的是 RTC 的驱动代码,可以提供对常用 RTC 的支持;tool:该目录下存放的是一些用来将编译后的文件转换成可执行的二进制映象以及motorola专用的SRecord格式的工具;此外在Uboot的根目录下还有一些文件,它们分别是:READMME:Uboot的说明文件;一些mk为扩展名的文件:如config.mk、arm_config.mk、i386_config.mk等,其中config.mk是通用的编译参数配置文件,xxx_config.mk是各体系结构对应的编译参数配置文件;Make file:Uboot的总体编译参数配置文件;Make

26、config:生成配置文件的批处理文件(在linux中这个文件必须具有可执行的属性)83.3 U-boot的启动流程分析大多数Bootloader都分为stage 1和stage 2两大部分,U-boot也不例外。依赖于CPU体系结构的代码(如设备初始化代码等)通常都放在stage1且可以用汇编语言来实现,而stage2则通常用C语言来实现,这样可以实现复杂的功能,而且有更好的可读性和移植性。3.3.1 Stage 1(start.s代码结构)基于ARM的芯片多数为复杂的片上系统,这种复杂系统里的多数硬件模块都是可配置的,需要由软件来设置其需要的工作状态。因此在用户的应用程序之前,需要由专门的

27、一段代码来完成对系统的初始化。由于这类代码直接面对处理器内核和硬件控制器进行编程,一般都是用汇编语言。U-boot的stage1代码通常放在start.s文件中,它用汇编语言写成,其主要代码功能如下(代码部分见附件):(1) 定义入口 由于一个可执行的Image必须有一个入口点,并且只能有一个全局入口,通常这个入口放在ROM(Flash)的0x0地址,因此,必须通知编译器以使其知道这个入口,该工作可通过修改连接器脚本来完成。(2) 设置异常向量(Exception Vector)(3) 设置CPU的速度、时钟频率及中断控制寄存器(4) 初始化内存控制器 (5) 将ROM中的程序复制到RAM中(

28、6) 初始化堆栈 因为ARM有7种执行状态,每一种状态的堆栈指针寄存器(SP)都是独立的。因此,对程序中需要用到的每一种模式都要给SP定义一个堆栈地址。方法是改变状态寄存器内的状态位,使处理器切换到不同的状态,让后给SP赋值。注意:不要切换到User模式进行User模式的堆栈设置,因为进入User模式后就不能再操作CPSR回到别的模式了,可能会对接下去的程序执行造成影响。(7) 转到RAM中执行,该工作可使用指令ldrpc来完成3.3.2 stage 2(C语言代码部分)lib armboard.c中的start arm boot是C语言开始的函数,也是整个启动代码中语言的主函数,同时还是整个

29、U-boot(armboot)的主函数,该函数主要完成如下操作:(1) 调用一系列的初始化函数(2) 初始化Flash设备(3) 初始化系统内存分配函数(4) 如果目标系统拥有NAND设备,则初始化NAND设备(5) 如果目标系统有显示设备,则初始化该类设备(6) 初始化相关网络设备,填写IP、MAC地址等(7) 进入命令循环(即整个boot的工作循环),接受用户从串口输入的命令,然后进行相应的工作9思想:移植U-boot到新的开发板上仅需要修改与硬件相关的部分即可。主要包括两个层面的移植,第一层是针对CPU的移植,第二层是针对Board的移植。10第4章 U-boot移植4.1 移植前的准备

30、工作U_boot能够支持多种体系结构的处理器,支持的开发板也越来越多。因为Bootloader是完全依赖硬件平台的,所以在新电路板上需要移植U_boot程序。U-boot在移植前需要做以下的准备工作: (1)阅读相关资料,搭建开发平台。下载、安装虚拟机,Linux操作系统,安装ADS集成开发环境以及仿真调试软件Multi_ice,完成开发板与宿主机的连接,熟悉开发环境。(2)熟悉U-boot顶层目录下的各级子目录,尤其是Makefile文件。开始编译,最终生成U-boot.bin映像文件,烧写到Flash中。(3)开始U-boot移植,熟悉硬件电路板和处理器,添加开发板硬件相关的文件,配置选项

31、,然后配置编译。(4)了解U-boot的启动过程,调试U-boot源代码。 11 4.2 嵌入式开发环境由于U-boot是遵照GNU协议编写的,其中的很多代码(特别是汇编)是ADS不支持的,因此必须安装一个交叉编译器,在Linux环境下编译。Linux的环境可以采用前面实验中介绍的虚拟机。交叉编译器有arm_elf、ELDK等,这里我们选择ELDK,它是U-boot 的作者开发的编译器。将ELDK下载到Linux虚拟机里安装,由于ELDK是以iso格式的文件,则需要将该文件mount到Linux中去,命令是:$mkdir/mnt/cdrom$ mount -o loop arm-2004-11

32、-09.iso /mnt/cdrom然后到/mnt/cdrom/目录下就可以看到ELDK的内容了,接下来要安装ELDK。命令是:$ /mnt/cdrom/install d /opt/x86-arm这条命令的意思是把ELDK安装到/opt/x86-arm/目录中。安装完毕后还需要修改U-boot 根目录下的Makefile文件,使编译器能够正确编译你为目标板写的代码。首先在其中添加下面两行:GE01_config:unconfig./mkconfig $(:_config=) arm GFD4 Prochip GE01。其中 GE01_config 是针对目标板的编译选项,以后只要使用“mak

33、e GE01_config”命令就可以执行这段配置。arm是CPU的种类; GFD4是目标板所使用的cpu在/cpu/目录下对应的代码目录;从Prochip 往后是目标板在/board/下对应的目录,一个空格代表一级子目录,如“Prochip GE01”表示的是“Prochip/GE01”。然后修改ARM编译器的目录名及前缀:如ARM编译器的目录是在:/opt/x86-arm/ usr/bin/arm-linux-下,则可以把CROSS-COMPILE = arm-linux- 改为CROSS-COMPILE = /opt/x86-arm/usr/bin/arm-linux-,完成之后,可以运

34、行以下的几条命令,观察一下你的配置是否生效了:make distclean make GE01_config make all,在运行make all命令会报错,这是因为我们还没有为我们的目标板添加代码,下面就来为我们的目标板编写代码。12代码的移植:(1) 在cpu目录中建立相应的目录,如GFD4。在该目录下创建cpu.c、serial.c、 interrupts.c、start.s文件。这些代码不必从头写,可以借鉴U-boot中提供的类似体系结构的代码,在它的基础上修改。本次实验借鉴的是三星s3c44b0的代码。start.s:该程序的流程已经在上面分析过了,需要注意的是它里的汇编代码是和

35、硬件紧密联系的,需要严格按照你所使用的CPU的手册编写。可以参照基础实验里的系统初始化修改。serial.c:存放的是串口操作的函数,主要包括设置波特率、输入输出字符,部分可以参照基础实验里的UART实验修改。interrupts.c:存放的是中断处理程序,由于U-boot本身没有用到中断,所以这里只是对意外产生的异常中断做标识性的处理。但这里有一个比较重要的函数就是udelay(),它通过一个硬件的Timer给系统提供微秒级的延时,但这个Timer并不产生中断,只是用来循环的计数。这部分可以参照基础实验里的Timer实验修改。cpu.c:存放的是对cache和RTC 时钟的操作。并且还有个软

36、件reset的函数 do_reset(),它是利用watch_dog来实现的。(2) 在board目录中建立相应的目录。在该目录下创建config.mk、 flash.c、lowlevel_inits、Makefile、U-boot.lds、.c等文件。同样,这些文件也可以借鉴相似结构的代码。这里借鉴的是意大利Dave公司的B2板。config.mk:这个文件里只有两行,第一行TEXT_BASE = 0x0C100000,它给出了U-boot 程序在内存中的起始地址,就是在start.s中将U-boot本身的代码拷贝到SDRAM中的位置。我们把它改成GE系列实验板上SDRAM中的某个地址。需要

37、注意的是这个地址不能太靠前,因为U-boot的堆栈和全局数据是从U-boot本身代码的起始地址开始向前存放的,而且应尽量设置在高的地址,以便给你以后要加载的映象留出空间,同时也要为U-boot本身预留一段空间。这里我们设置的是0x30800000。第二行是编译器的平台设置选项,由于我们的SEP3203和S3C44B0使用的都是ARM的核,所以不需要修改。flash.c:这个文件里是Flash的驱动。不同的Flash厂商、型号,Flash的操作也各不相同,因此这部分需要仔细修改,并要详细阅读Flash的文档。GE01和GE02板上使用的是Intel的TE28F160BD,GE00 板上使用的是I

38、ntel的TE28F640。lowlevel_init.s:这里是在start.s中调用的lowlevel_init子程序的实际存放位置,它完成一些底层的初始化,如EMI、remap等功能,具体实现应根据目标板的体系结构决定。本实验中将这部分的功能合并在了start.s中的cpu_init_crit子程序了,因此屏蔽调了这部分代码。Makefile:这里存放的是该目录的文件的编译选项。由于我们是从别 B2的目录中拷贝来的,需要将OBJS: = B2.o flash.o改成OBJS: = GE01.o flash.o。 U-boot.lds:链接映象定位文件,它为各个目标文件指定在映象中的位置。

39、同样需要将cpu/sep3203f50/start.o (.text)改成cpu/GFD 4/start.o(.text)。(3) 在/include/asm_arm/目录下创建一个文件夹arch_xxx(xxx为前面第一步中在 cpu/ 目录下创建的目录名称),在这个文件夹里创建一个hardware.h文件,这里存放的是寄存器地址的定义。可以参考SEP3203使用手册编写。(4) 在/include/configs/目录下创建一个以目标板型号为文件名的.h文件,如 GE01.h,这个文件里存放的是U-boot功能及与目标板硬件设备相关的宏定义,如SDRAM的大小,堆栈大小,支持哪些U-boo

40、t命令等。这个文件很重要,它关系到U-boot的选择性编译。其中大部分宏定义的含义可以在README文件中找到。在这里只介绍一些比较重要的宏:定义GFD4的时钟频率,单位为MHZ可选的值为70和60。#define CONFIG_GFD4_CLOCK_SPEED与环境变量有关的定义#define CFG_ENV_IS_IN_FLASH 1#define CFG_ENV_ADDR(CFG_FLASH_BASE+0x20000)#define CFG_ENV_SIZE0x2000#define CFG_ENV_SECT_SIZE0x10000内存空间分配#define CFG_MONITOR_BA

41、SECFG_FLASH_BASE#define CFG_MONITOR_LEN(128 * 1024) /* Reserve 128 kB for Monitor*/#define CFG_MALLOC_LEN(CFG_ENV_SIZE + 128*1024 )#define CFG_GBL_DATA_SIZE128/* size in bytes reserved for initial data */波特率的设置,单位为 bps#define CONFIG_BAUDRATE115200设置 U-boot 支持的命令#define CONFIG_COMMANDS启动时等待按键的时间,单位是秒

42、#define CONFIG_BOOTDELAY5cpu 工作频率,单位是 Hz#defineCFG_HZ物理存储器地址的设置#define CONFIG_NR_DRAM_BANKS1/* we have 1 banks of DRAM */#define PHYS_SDRAM_10x30000000/* SDRAM Bank #1 */#define PHYS_SDRAM_1_SIZE0x01000000/* 16 MB */#define PHYS_FLASH_10x20000000/* Flash Bank #1 */#define PHYS_FLASH_SIZE0x00200000/*

43、 2 MB */#define CFG_FLASH_BASEPHYS_FLASH_1Flash 参数的设置#define CFG_MAX_FLASH_BANKS/* max num of memory banks*/#define CFG_MAX_FLASH_SECT39/* max num of sects on one chip */#define CFG_FLASH_ERASE_TOUT240000/* Flash Erase Timeout (in ms) */#define CFG_FLASH_WRITE_TOUT500/* Flash Write Timeout (in ms) *

44、/#define CONFIG_FLASH_16BIT4.3 U-boot的编译U-boot的源码是通过GCC和Makefile组织编译的。顶层目录下的Makefile首先可以设置开发板的定义,然后递归调用各级子目录下的Makefile,最后把编译过的程序链接成U-boot映像。4.3.1 顶层目录下的Makefile它负责U-boot整体配置编译,按照配置的顺序阅读其中关键的几行。每一种开发板在Makefile都需要有板子配置的定义,GE01开发板的定义如下:GE01_config:unconfig./mkconfig $ (_config=) arm arm7TDMI GE01 NULL

45、SEP3203F50执行配置U-boot的命令make GE01_config,通过./mkconfig脚本生成include/config.mk的配置文件,文件内容正式根据Makefile对开发板的配置生成的。ARCH=armCPU=arm7 TDMIBOARD=GE01SOC=SEP3203F50上面的include/config.mk文件定义了ARCH、CPU、BOARD、SOC这些变量。这样硬件平台依赖的目录文件可以根据这些定义来确定。GE01平台相关目录如下:board/GE01/cpu/arm7 TDMIcpu/arm7 TDMI/SEP3203F50lib_arm/include

46、/asm-arminclude/configs/GE01.h再回到顶层目录的Makefile文件的开始部分,其中下面几行包含了这些变量的定义。# load ARCH、BOARD and CPU configuranationinclude include/config.mkexport ARCH BOARD CPU VENDOR SOCMakefile的编译选项和规则在顶层目录的config.mk文件中定义,各种体系结构通用的规则直接在这个文件中定义,通过ARCH 、BOARD、CPU等变量为不同硬件平台定义不同选项,不同体系结构的规则分别包含在ppc_config.mk、arm_config

47、.mk、mips_config.mk等文件中。顶层文件的Makefile中还有定义交叉编译器,以及编译U-boot所依赖的目标文件。ifeq ( $(arch),arm)CROSS_COMPILE = arm-linux- /交叉编译器的前缀# end ifExport CROSS_COMPILE-# U_boot objects.order is important(i.e.start must be first)OBJS = cpu/$(cpu)/start.o /处理器相关的目标文件-LIBS = lib_generic/libgeneric.a /定义依赖的目录,每个目录下先把目标文件链接成*.a文件LIBS += board/$(BOARDDI

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 办公文档 > 其他范文


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号