嵌入式开发环境的建立.ppt

上传人:小飞机 文档编号:6158775 上传时间:2023-09-30 格式:PPT 页数:90 大小:2.80MB
返回 下载 相关 举报
嵌入式开发环境的建立.ppt_第1页
第1页 / 共90页
嵌入式开发环境的建立.ppt_第2页
第2页 / 共90页
嵌入式开发环境的建立.ppt_第3页
第3页 / 共90页
嵌入式开发环境的建立.ppt_第4页
第4页 / 共90页
嵌入式开发环境的建立.ppt_第5页
第5页 / 共90页
点击查看更多>>
资源描述

《嵌入式开发环境的建立.ppt》由会员分享,可在线阅读,更多相关《嵌入式开发环境的建立.ppt(90页珍藏版)》请在三一办公上搜索。

1、第5讲 嵌入式开发环境建立与开发,嵌入式系统设计方法,嵌入式系统的开发步骤,嵌入式系统设计步骤,系统需求分析:确定设计任务和设计目标,并提炼出设计规格说明书,作为正式设计指导和验收的标准。系统的需求一般分功能性需求和非功能性需求两方面。功能性需求是系统的基本功能,如输入输出信号、操作方式等;非功能需求包括系统性能、成本、功耗、体积、重量等因素。,硬件需求分析处理性能技术指标和成本功耗操作系统和软件支持工具的选择,软件需求分析实时性系统的功能开发的难度成本,嵌入式系统设计步骤,体系结构设计:描述系统如何实现所述的功能和非功能需求,包括对硬件、软件和执行装置的功能划分以及系统的软件、硬件选型等。一

2、个好的体系结构是设计成功与否的关键。硬件/软件协同设计:基于体系结构,对系统的软件、硬件进行详细设计。为了缩短产品开发周期,设计往往是并行的。应该说,嵌入式系统设计的工作大部分都集中在软件设计上,采用面向对象技术、软件组件技术、模块化设计是现代软件工程经常采用的方法。系统集成:把系统的软件、硬件和执行装置集成在一起,进行调试,发现并改进单元设计过程中的错误。系统测试:对设计好的系统进行测试,看其是否满足规格说明书中给定的功能要求。,嵌入式系统的开发流程,需求分析及规格说明,选择主要芯片,确定编程语言,选择开发环境,RTOS的使用,选择开发方案,测试工具与其他辅助设备,嵌入式系统的开发设计与调试

3、,设计,生产,IDE,软件开发与测试,评估板,仿真器,逻辑分析仪,边界扫描测试仪,示波器,开发环境,什么是嵌入式开发环境:,源程序,目标文件,可重定位程序,可执行文件,编译器/汇编器/链接定位器调试器/仿真器主机(Host)及其工作平台实时操作系统(可选)目标评估系统(可选)测试工具(软件/硬件/协议等,可选)其他辅助设备(可选),典型的开发环境,嵌入式系统的调试(1),嵌入式系统的调试有四种基本方法模拟调试(Simulator)软件调试(Debugger)BDM/JTAG调试(BDM/JTAG Debugger)全仿真调试(Emulator),嵌入式系统的调试(2),模拟调试(Simulat

4、or)调试工具和待调试的嵌入式软件都在主机上运行,由主机提供一个模拟的目标运行环境,可以进行语法和逻辑上的调试。优点:简单方便,不需要目标板,成本低缺点:功能非常有限,无法实时调试大多数调试工具都提供Simulator功能,嵌入式系统的调试(3),软件调试(Debugger)主机和目标板通过某种接口(通常是串口)连接,主机上提供调试界面,待调试软件下载到目标板上运行。这种方式的先决条件是要在Host和Target之间建立起通信联系(目标板上称为监控程序Monitor)优点:纯软件,价格较低,简单,软件调试能力较强缺点:需要事先烧制Monitor(往往需多次试验才能成功)且目标板工作正常,功能有

5、限,特别是硬件调试能力较差。,PC,Target,Monitor,串口,嵌入式系统的调试(4),BDM/JTAG调试 这种方式有一个硬件调试体。该硬件调试体与目标板通过BDM、JTAG等调试接口相连,与主机通过串口、并口、网口或USB口相连。待调试软件通过BDM/JTAG调试器下载到目标板上运行。优点:方便、简单,无须制作Monitor,软硬件均可调试缺点:需要目标板,且目标板工作基本正常(至少MCU工作正常),仅适用于有调试接口的芯片,Target,PC,接口,BDM/JTAG Debugger,嵌入式系统的调试(5),全仿真调试(Emulator)这种方式用仿真器完全取代目标板上的MCU,

6、因而目标系统对开发者来说完全是透明的、可控的。仿真器与目标板通过仿真头连接,与主机有串口、并口、网口或USB口等连接方式。由于仿真器自成体系,调试时既可以连接目标板,也可以不连接目标板(Stand alone)。优点:功能非常强大,软硬件均可做到完全实时在线调试缺点:价格昂贵。,ARM的调试软件,模拟调试SDT2.52:ARMulatorADS1.2:ARMulatorTrace32:SimulatorEW-ARM:C-spy软件调试ADS1.2:Angel(串口)SDT2.52 Angel(串口)JTAG调试ARM:Multi-ICE,简易型仿真器Trace32-ICD for ARMHit

7、ex:Tanto for ARM全仿真调试Trace32-FIRE/ICE,ADS1.2ARM公司出品,IDE环境,包括ARM/Thumb汇编器:armasmANSI C 编译器-armcc 和 tccISO/Embedded C+编译器-armcpp and tcpp链接器 armlinkWindows 集成开发环境 CodeWarrior格式转换器 fromelf库管理器-armar调试器模拟调试器:ARMulatorJTAG调试:AXD(与Multi-ICE配合)支持所有ARM内核,最新版本:RealView2.0,ARM的调试软件,EW-ARM瑞典IRA公司出品著名的嵌入式工具提供商,

8、以提供编译器/协议栈/统一建模工具著称主要产品:Embeded Workbench(EW)、Make APP、Visual State等EW-ARM:针对ARM的集成开发环境:C/C+编译器C-SPY 模拟调试器ROM-Monitor多种级别代码优化方法,满足用户在速度、文件大小方面的要求内建ARM特性优化器支持多种断点模式支持Nucleus,VxWorks等RTOSGreenhillsGNU,ARM的调试软件,ARM调试工具,Multi-ICEARM公司出品与ADS配套使用支持不同的ARM内核另有Multi-trace模块可选,ARM嵌入式开发模式,目标机/宿主机开发模式宿主机需要运行一些软

9、件进行程序编辑、编译和调试等功能,这些软件通常称为集成开发环境(IDE)。,宿主机(Host):是用于开发嵌入式系统的计算机。一般为PC机(或者工作站),具备丰富的软硬件资源,为嵌入式软件的开发提供全过程支持。目标机(Target):即所开发的嵌入式系统,是嵌入式软件的运行环境,其硬件软件是为特定应用定制的。,驻留监控模式,驻留监控程序是一个特殊应用的程序,开发者先将驻留监控程序调试好并在目标机上运行,驻留监控程序通过特定的通信方式(如以太网、USB等)和运行于宿主机的集成开发环境进行通信实现程序下载、调试等功能。这种模式下载速度快,和集成开发环境连接紧密,但该程序运行需要占用一些目标板资源。

10、调试驻留监控程序通常采用在线仿真模式进行。驻留监控程序有:VxWorks操作系统的bootrom、Linux操作系统的u-boot、Windows CE的Eboot等。,嵌入式软件开发流程,嵌入式开发流程,系统移植,这个阶段根据不同的软件设计方案可能不同。无操作系统的软件开发启动代码应用程序基于操作系统的软件开发bootloader操作系统移植BSP板级支持包应用程序开发,启动代码,功能硬件初始化引导C代码特征通常用汇编语言编写程序复位运行入口点代码量非常小,程序流程设置中断、异常入口关中断硬件寄存器初始化(GPIO配置、总线配置、PLL时钟)初始化栈指针数据区初始化C入口函数调用 BL Ma

11、in,应用程序(无操作系统),功能硬件驱动应用特征通常用C语言或者嵌入式汇编语言编写程序较复杂,代码量较大,bootloader,功能硬件初始化引导操作系统下载程序(串口、网口、USB)烧写flash特征程序复位运行入口点通常用汇编语言+C语言编写代码量较小,BSP板级支持包,功能为应用程序提供统一的硬件操作接口特征高度硬件相关高度依赖于具体硬件平台各种操作系统各异,操作系统的选择,商用型Vxworks,Nucleux,PlamOS,Symbian,WinCE,QNX,pSOS,VRTX,Lynx OS,Hopen,Delta OS免费型Linux,CLinux,C/OS-,eCos,uITR

12、ON对实时要求高的,可以采用Vxworks、WinCE,RTLinux无实时要求的,可以采用Embedded Linux对于复杂的嵌入式系统应考虑使用RTOS本实验教学平台支持以下操作系统:uC/OS、Linux、Vxworks、Wince,操作系统的移植,必须根据硬件平台和应用场合将某种操作系统进行定制和代码修改使其能够运行在该硬件平台上,这个过程就是操作系统的移植。操作系统提供商将针对某一个处理器的公板移植代码进行发布,用户进行移植时只需要选择和你使用相同处理器的公板移植代码,并根据你的硬件进行适当修改,这种移植称为板级移植。如果你所使用的处理器在操作系统的发布中还没有一个公板代码,则针对

13、处理器部分的代码都需要由用户重写,这种移植成为片级移植。由于硬件资源的限制,嵌入式操作系统通常需要进行裁减以减少代码大小和提高运行效率。需要的功能加上,不需要的功能去掉。,嵌入式系统编程语言的选择,Data from Japan ITRON survey for new embedded systems,应用程序设计调试,1、图形用户界面:VxWorks下的WindMLLinux下的QT Embedded、MicroWindows等Windows CE的用户界面则保持传统的Windows风格界面2、实时性:在应用程序设计中同样也要考虑。3、功耗:在应用程序设计时须充分考虑系统功耗,在不影响系统

14、功能的同时将功耗降到最低。4、程序大小,应用程序开发(操作系统),功能GUI图形、人机交互控制算法特征硬件依赖程度小部分可仿真调试各种操作系统各异,嵌入式软件设计和调试流程,编辑创建工程添加文件、编写程序汇编语言加C语言编译配置编译、汇编和连接参数编写连接脚本文件编译,调试连接调试器下载程序运行、调试固化通过仿真器烧写flash专用或通用的编程器通过bootloader烧写flash,交叉编译,GNU交叉编译编译.c arm-elf-gcc汇编.S arm-elf-gas连接.o arm-elf-ld操作文件汇编文件.SC文件.c链接脚本文件ldscript库文件.o.lib.a,生成调试格式

15、文件.elfDWARF-1DWARF-2生成bin文件elf2binarm-elf-objcopy,ARM嵌入式系统控制界面,要操作PC通常必须使用键盘和显示器或者鼠标。ARM也是一台计算机,在开发过程甚至是产品设计中也需要有一定的交互方式。由于硬件的局限,通常不会使用标准的键盘、显示器作为输入输出设备,而是使用串口连接的方式和宿主机进行通信。宿主机运行一个名为超级终端的软件,它能够接收从ARM通过串口发送过来的字符信息,并显示出来(相当于ARM的输出设备,如显示器),该软件也能获取用户输入并通过串口发送到ARM,由ARM接收并处理(相当于ARM的输入设备,如键盘)。,超级终端软件,1、Win

16、dows超级终端,2、DNW,嵌入式开发流程,ARM代码结构,ARM程序编译后得到的二进制代码通常包含:代码段(text段或code段):编译后的代码,只读读写数据段(data段):可读写的全局变量,读写只读数据段(rodata段):只读数据,如const类型的全局变量BSS段:需要清0的数据这些段在链接(link)过程中产生,并且在链接过程中都应该设置各段的起始地址。程序必须从代码段指定的起始位置处运行。根据代码段运行所在地址的硬件介质不同可以将程序分为在RAM运行的程序和在ROM运行的程序。,链接脚本,段Text段rodata段data段bss段符号Image_RO_Limit Image

17、_RW_BaseImage_ZI_BaseImage_ZI_Limit,GCC库专用调试信息,链接脚本示例,程序在SDRAM中运行,程序在FLASH中运行,在RAM运行程序结构图,在ROM运行程序结构图,启动代码,由于ARM软件编程一般采用高级语言,如C语言,因此在系统启动后必须有一段程序能够将CPU带入到能够运行C语言的状态,这段程序就是启动代码。启动代码通常用汇编语言完成,并在系统复位入口点(ARM系统中为0地址)运行。在嵌入式系统中系统复位入口点所在的硬件通常是Flash等芯片,存储在这些芯片中的数据即使掉电也能够保存,而且这个地方的硬件的访问宽度是由硬件设计决定,软件不能更改,这样就能

18、保证上电后该地址的数据有效。,启动代码主要功能(1),1、建立异常向量表2、初始化硬件:初始化RAM、关闭中断、关闭看门狗等3、初始化堆栈4、初始化读写数据段、BSS段:在ROM中运行的程序必须将数据段从ROM中拷贝到RAM中,并将BSS段清零;在RAM中运行的程序则需要将BSS段清零,然后将整个代码段、只读数据段、读写数据段和BSS段从ROM拷贝到RAM。,启动代码主要功能(2),5、重定向位置无关的代码是指该代码不用在编译指定的地址 运行也能保证程序的执行流程和执行逻辑不会改变。位置相关代码运行的地址必须和编译时的地址一致,否则将导致程序运行流程改变。在初始化程序区、数据区之后需要一条跳转

19、指令将PC跳转到编译时指定的运行地址接着运行。LDR指令及之前的指令都在ROM中运行,而startram标号之后的代码则跳转到编译时指定的地址(RAM或者ROM中)中运行了,因为startram标号表示的地址是由编译时就确定的。这个过程就是重定向。LDRPC,=startramstartram:重定向之前运行的代码必须是位置无关的代码。,启动代码主要功能(3),6、跳转到C代码LDRPC,=Main,启动代码分析,在基于ARM920T core的嵌入式系统中,系统在上电或复位时都从地址0 x00000000开始执行,因此在这个地址处安排的通常就是系统的启动代码。它通常也是BootLoader程

20、序的一部分,可以在启动代码基础上编写BootLoader。用汇编语言编写。启动代码是在复位后运行其它程序之前运行的一段小程序。通过它,初始化硬件设备、建立内存空间的映射图,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用C函数准备好正确的环境。,启动代码的移植和修改,启动代码除了依赖于 CPU 的体系结构外,实际上也依赖于具体的嵌入式板级设备的配置,比如板卡的硬件地址分配,RAM芯片的类型,其他外设的类型等。对于两块不同的嵌入式板而言,即使它们是基于同一种 CPU而构建的,如果他们的硬件资源和配置不一致的话,要想让运行在一块板子上的启动代码也能运行在另一块板子上,也还是需要作一些必要的

21、修改。,启动代码流程图,启动代码的功能:RAM初始化,设置各个部件的时钟和片选,将BootLoader拷贝到RAM中,设置堆栈,调用C函数。注意:在本阶段,特别是在堆栈设置之前,进行函数调用(也有些汇编子程序不需要使用堆栈)或者使用堆栈保存数据将产生不可预知的结果;,设置异常跳转表,复位异常直接跳转到ResetHandler处,它是相对跳转,位置无关。,关闭看门狗,设置S3C2410 WTCON寄存器必须设置,设置中断模式并禁止中断,设置S3C2410中断寄存器设置所有一级中断源与二级中断源为不可用状态,配置存储器控制寄存器宽度,堆栈初始化,C代码初始化,拷贝RW数据段,ZI段清零,跳转到Ma

22、in函数处执行,BootLoader的基本概念,BootLoader是系统加电后运行的第一段软件代码。嵌入式系统中,整个系统的加载启动任务完全由 BootLoader来完成。比如在一个基于ARM920T core的嵌入式系统中,系统在上电或复位时都从地址0 x00000000开始执行,而在这个地址处安排的通常就是系统的BootLoader程序。简单地说,BootLoader就是在操作系统内核或用户应用程序运行之前运行的一段小程序。通过这段小程序,我们可以初始化硬件设备、建立内存空间的映射图,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统内核或用户应用程序准备好正确的环境。,B

23、ootLoader 的移植和修改,BootLoader除了依赖于 CPU 的体系结构外,BootLoader 实际上也依赖于具体的嵌入式板级设备的配置,比如板卡的硬件地址分配,RAM芯片的类型,其他外设的类型等。对于两块不同的嵌入式板而言,即使它们是基于同一种 CPU而构建的,如果他们的硬件资源和配置不一致的话,要想让运行在一块板子上的BootLoader程序也能运行在另一块板子上,也还是需要作一些必要的修改。,系统启动和Bootloader,通常,Boot Loader 是严重地依赖于硬件而实现的,特别是在嵌入式世界。因此,在嵌入式世界里建立一个通用的 Boot Loader 几乎是不可能的

24、。尽管如此,我们仍然可以对 Boot Loader 归纳出一些通用的概念来,以指导用户特定的 Boot Loader 设计与实现。处理器启动方式基本原理:硬件复位-处理器模式-设置程序指针PC和堆栈指针SP-转向执行PC处的代码。典型处理器举例:X86:硬件复位后,进入实模式,执行FFFF:0000处的代码(实际为BIOS代码)ARM(S3C2410、SA1110、STA2001):硬件复位后,一般进入管理模式,执行地址为0处的代码(多为Flash,与处理器配置有关)68K(68EZ328、68VZ328):硬件复位后,一般进入Supervisor模式,执行地址为0处指示的Flash代码,嵌入

25、式Linux系统基本组成,初始化启动代码:Bootloader嵌入式Linux操作系统内核:kernel根文件系统:rootfs用户应用程序,系统加电或复位后,所有的 CPU 通常都从某个由 CPU 制造商预先安排的地址上取指令。基于 CPU 构建的嵌入式系统通常都有某种类型的固态存储设备(比如:ROM、EEPROM 或 FLASH 等)被映射到这个预先安排的地址上。因此在系统加电后,CPU 将首先执行 Boot Loader 程序。下图1就是一个同时装有 Boot Loader、内核的启动参数、内核映像和根文件系统映像的固态存储设备的典型空间分配结构图。,系统启动和Bootloader,Bo

26、otloader基本原理:系统初始代码,用于引导操作系统主要功能:初始化硬件建立内存空间映射引导操作系统用户操作功能:内存检查、操作系统文件下载、核心参数设置、Flash读写等。,系统启动和Bootloader,Boot Loader 的启动过程分单阶段(Single Stage)还是多阶段(Multi-Stage)两种。由于 Boot Loader 的实现依赖于 CPU 的体系结构,因此大多数 Boot Loader 都分为 stage1 和 stage2 两大部分。依赖于 CPU 体系结构的代码,比如设备初始化代码等,通常都放在 stage1 中,而且通常都用汇编语言来实现,以达到短小精悍

27、的目的。而 stage2 则通常用C语言来实现,这样可以实现给复杂的功能,而且代码会具有更好的可读性和可移植性。从固态存储设备上启动的 Boot Loader 大多都是 2 阶段的启动过程,也即启动过程可以分为 stage 1 和 stage 2 两部分。,BootLoader的主要任务与典型结构框架,从操作系统的角度看,BootLoader的总目标就是正确地调用内核来执行。大多数BootLoader都分为stage1和stage2两大部分。依赖于CPU体系结构的代码,比如设备初始化代码等,通常都放在stage1中,而且通常都用汇编语言来实现,以达到短小精悍的目的,也就是前面说的启动代码。而s

28、tage2 则通常用C语言来实现,这样可以实现复杂的功能,而且代码会具有更好的可读性和可移植性。,stage 1 和 stage 2 具体完成任务:Stage1:多用汇编语言完成 硬件设备初始化 为加载bootloader的Stage2准备RAM空间 拷贝bootloader的Stage2到RAM中 设置好堆栈 跳转到Stage2的入口点Stage2:初始化本阶段使用到的硬件设备 检测系统内存映射 将Kernel和根文件系统从Flash上读到RAM空间 设置内核启动参数 引导内核,BootLoader的主要任务与典型结构框架,Stage 1初始化流程图,stage 1的功能:RAM初始化,设置

29、各个部件的时钟和片选,将BootLoader拷贝到RAM中,设置堆栈,调用Stage 2。注意:在本阶段,特别是在堆栈设置之前,进行函数调用(也有些汇编子程序不需要使用堆栈)或者使用堆栈保存数据将产生不可预知的结果;,Stage 2流程图,stage 2的功能:初始化串口,显示菜单,通过控制台获取用户输入,并执行相应的命令操作。,bootloader 的 stage2 可执行映象刚被拷贝到 RAM 空间时的系统内存布局,BootLoader 的安装,系统加电或复位后,所有的CPU通常都从CPU制造商预先安排的地址上取指令。比如,S3C2410在复位时都从地址 0 x00000000 取它的第一

30、条指令。嵌入式系统通常都有某种类型的固态存储设备(比如:ROM、EEPROM或FLASH等)被安排这个起始地址上,因此在系统加电后,CPU将首先执行BootLoader程序。也就是说对于基于S3C2410的这套系统,我们的BootLoader是从0地址开始存放的,而这块起始地址需要采用可引导的固态存储设备如FLASH。,用来控制 BootLoader 的设备或机制,串口通讯是最简单也是最廉价的一种双机通讯设备,所以往往在BootLoader中主机和目标机之间都通过串口建立连接,BootLoader 程序在执行时通常会通过串口来进行 I/O,比如:输出打印信息到串口,从串口读取用户控制字符等。当

31、然如果认为串口通讯速度不够,也可以采用网络或者USB通讯,那么相应的在BootLoader中就需要编写各自的驱动。,Boot Loader 的操作模式,启动加载模式:这种模式也称为自主(Autonomous)模式。也即BootLoader从目标机上的某个固态存储设备上将操作系统加载到RAM中运行,整个过程并没有用户的介入。这种模式是BootLoader的正常工作模式。下载模式:在这种模式下,目标机上的BootLoader将通过串口连接或网络连接等通信手段从主机下载文件,比如:下载应用程序、数据文件、内核映像等。从主机下载的文件通常首先被BootLoader保存到目标机的RAM中,然后再被 Bo

32、otLoader写到目标机上的固态存储设备中。BootLoader 的这种模式通常在系统更新时使用。工作于这种模式下的 BootLoader 通常都会向它的终端用户提供一个简单的命令行接口。在uboot中可以通过修改环境变量实现自主模式。,BootLoader与主机间文件传输的通信设备及协议,最常见的情况就是,目标机上的 BootLoader 通过串口与主机之间进行文件传输,传输可以简单的采用直接数据收发,当然在串口上也可以采用xmodemymodemzmodem 协议以及在以太网上采用TFTP协议。,在BootLoader中主机和目标机之间都通过串口建立连接,BootLoader程序在执行时

33、通常会通过串口来进行I/O,比如:输出打印信息到串口,从串口读取用户控制字符等。操作模式:启动加载模式下载模式常用串口、以太网、USB等接口在主机和目标机之间传递数据(如下载程序)。,Bootloader,系统启动和Bootloader,典型的BootloaderX86:BIOS代码执行基本的初始化,LILO或Grub则是典型的Bootloader程序。ARM:u-boot、armboot、redboot、blob、vivi等PPC:u-boot、ppcboot、redboot等。,常见的BootloaderBootRom,BootRom是用于VxWorks操作系统开发的bootloader。

34、和Tornado等集成开发环境紧密结合。可通过某种可选择的通信手段(如网口、串口),将VxWorks内核加载到目标板。BootRom还提供如地址内容查看、地址内容修改和BootRom菜单显示信息控制等功能。,常见的BootloaderEBoot,Eboot是用于Windows CE操作系统开发的bootloader。它通过以太网和主机的集成开发环境Platform Builder进行通信,可以实现Windows CE内核的下载、调试。此外Eboot提供Flash固化等功能。,常见的Bootloaderu-boot,支持PowerPC、ARM、Xscale、MIPS、Coldfire、NIOS、

35、Microblaze和x86等。除了支持Linux系统的引导外,还支持NetBSD、VxWorks、QNX、RTEMS、ARTOS、LynxOS等多种嵌入式操作系统的引导。用户接口类似于Linux的shell界面,通过串口连接,用户可以交互式的输入命令和看到结果。使用u-boot可通过串口、以太网等接口从宿主机下载程序并引导系统,同时还可以将程序固化到Flash中,它提供灵活的环境变量操作接口,方便实现自主模式和引导模式之间的切换。JXARM9-2410使用通用的u-boot,u-boot简介,u-boot是由德国DENX小组开发的交叉平台BootLoader,其全称为“universal B

36、oot Loader”。u-boot的开发目标是支持尽可能多的嵌入式处理器和嵌入式操作系统。它提供数百种嵌入式开发板和各种CPU,包括PowerPC、ARM、Xscale、MIPS、Coldfire、NIOS、Microblaze和x86等,同时它除了支持Linux系统的引导外,还支持NetBSD、VxWorks、QNX、RTEMS、ARTOS、LynxOS等多种嵌入式操作系统的引导。从下面地址下载uboot的源代码。http:/,U-Boot特点,开放源码;支持多种嵌入式操作系统内核,如Linux、NetBSD、VxWorks、QNX、RTEMS、ARTOS、LynxOS;支持多个处理器系列

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

38、x支持最为强劲;支持目标板环境参数多种存储方式,如FLASH、NVRAM、EEPROM;CRC32校验,可校验FLASH中内核、RAMDISK映像文件是否完好。设备驱动:串口、SDRAM、FLASH、以太网、LCD、NVRAM、EEPROM、键盘、USB、PCMCIA、PCI、RTC等驱动支持。上电自检功能:SDRAM、FLASH大小自动检测;SDRAM故障检测;CPU型号。特殊功能:XIP内核引导。,U-Boot源码结构(1),board:和一些已有开发板有关的文件,每一个开发板都以一个子目录出现在当前目录中,比如makefile和U-Boot.lds等都和具体开发板的硬件和地址分配有关。c

39、ommon:与体系结构无关的代码,用来实现各种命令的C程序。cpu:包含CPU相关代码,其中的子目录都是以U-BOOT所支持的CPU为名,比如有子目录arm926ejs、mips、mpc8260和nios等,每个特定的子目录中都包括cpu.c和interrupt.c,start.S等。其中cpu.c初始化CPU、设置指令Cache和数据Cache等;interrupt.c设置系统的各种中断和异常,比如快速中断、开关中断、时钟中断、软件中断、预取中止和未定义指令等;汇编代码文件start.S是U-BOOT启动时执行的第一个文件,它主要是设置系统堆栈和工作方式,为进入C程序奠定基础。disk:di

40、sk驱动的分区相关代码。doc:文档。,U-Boot源码结构(2),drivers:通用设备驱动程序,比如各种网卡、支持CFI的Flash、串口和USB总线等。fs:支持文件系统的文件,U-BOOT现在支持cramfs、fat、fdos、jffs2和registerfs等。include:头文件,还有对各种硬件平台支持的汇编文件,系统的配置文件和对文件系统支持的文件。net:与网络有关的代码,BOOTP协议、TFTP协议、RARP协议和NFS文件系统的实现。lib_arm:与ARM体系结构相关的代码。tools:创建S-Record格式文件和U-BOOT images的工具,如mkimage,

41、crc等。,U-Boot重要代码,cpu/arm920t/start.Sinterrupts.c cpu.c memsetup.S,U-Boot移植主要步骤,建立自己的开发板类型(Makefile)修改程序链接地址(board/s3c2410/config.mk)修改中断禁止的部分(/cpu/arm920t/start.S)因为在fs2410开发板启动时是直接从nand flash加载代码,所以应该启动代码(/cpu/arm920t/start.S)修改内存配置(board/fs2410/lowlevel_init.S)加入nand flash读函数(board/fs2410/nand_rea

42、d.c)加入nand flash的初始化函数(board/fs2410/fs2410.c)修改外设控制器相关宏(board/fs2410/fs2410.c)提供nand flash相关宏定义(include/configs/fs2410.h)加入nand flash设备(include/linux/mtd/nand_ids.h)设置nand flash环境(common/env_nand.c),u-boot的启动界面,u-boot的用户接口类似于Linux的shell界面,通过串口连接以后,用户可以交互式的输入命令和看到结果,u-boot的启动界面如下所示:U-Boot 1.1.1(Sep 6

43、 2004-12:12:06)U-Boot code:33F80000-33F9CED0 BSS:-33FA116CRAM Configuration:Bank#0:30000000 64 MBFlash:32 MBIn:serialOut:serialErr:serialHit any key to stop autoboot:0JX2410#,板级支持包,BSP(板级支持包)是介于底层硬件和操作系统之间的软件层次,它完成系统上电后最初的硬件和软件初始化,并对底层硬件进行封装,使得操作系统不再面对具体的操作。,板级支持包的特点,硬件相关性:因为嵌入式实时系统的硬件环境具有应用相关性,所以,作

44、为高层软件与硬件之间的接口,BSP必须为操作系统提供操作和控制具体硬件的方法。操作系统相关性:不同的操作系统具有各自的软件层次结构,因此,不同的操作系统具有特定的硬件接口形式。,板级支持包的功能,板级支持包的功能,嵌入式系统初始化片级初始化板级初始化系统级初始化硬件相关的设备驱动程序,系统级初始化,这是一个以软件初始化为主的过程,主要进行操作系统初始化。BSP将控制转交给操作系统,由操作系统进行余下的初始化操作。包括加载和初始化与硬件无关的设备驱动程序,建立系统内存区,加载并初始化其他系统软件模块,比如网络系统、文件系统等;最后,操作系统创建应用程序环境并将控制转交给应用程序的入口。,硬件相关的驱动程序,与初始化过程相反,硬件相关的设备驱动程序的初始化和使用通常是一个从高层到底层的过程。尽管BSP中包含硬件相关的设备驱动程序,但是这些设备驱动程序通常不直接由BSP使用,而是在系统初始化过程中由BSP把它们与操作系统中通用的设备驱动程序关联起来,并在随后的应用中由通用的设备驱动程序调用,实现对硬件设备的操作。,

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

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号