嵌入式第三章课件.ppt

上传人(卖家):三亚风情 文档编号:2314503 上传时间:2022-04-01 格式:PPT 页数:86 大小:4.13MB
下载 相关 举报
嵌入式第三章课件.ppt_第1页
第1页 / 共86页
嵌入式第三章课件.ppt_第2页
第2页 / 共86页
嵌入式第三章课件.ppt_第3页
第3页 / 共86页
嵌入式第三章课件.ppt_第4页
第4页 / 共86页
嵌入式第三章课件.ppt_第5页
第5页 / 共86页
点击查看更多>>
资源描述

1、3.1 Bootloader简介简介Bootloader是指操作系统的启动加载程序是指操作系统的启动加载程序通常引导加载程序包括固化在固件通常引导加载程序包括固化在固件(firmware)中中的的boot代码代码(可选可选),和,和Bootloader两大部分,是两大部分,是系统加电后运行的第一段软件代码系统加电后运行的第一段软件代码 相对于操作系统内核来说,它是一个硬件抽象层相对于操作系统内核来说,它是一个硬件抽象层 PC机中的引导加载程序机中的引导加载程序两部分组成两部分组成:BIOS(其本质就是一段固件程序其本质就是一段固件程序)位于硬盘位于硬盘MBR(Main Boot Record,

2、主引导记录,主引导记录)中的操作系统中的操作系统Bootloader(如如LILO和和 GRUB等等)流程流程:BIOS在完成硬件检测和资源分配后,将硬盘在完成硬件检测和资源分配后,将硬盘 MBR中的中的 Bootloader 读到系统的读到系统的 RAM 中,然中,然后将控制权交给操作系统后将控制权交给操作系统BootloaderBootloader的主要运行任务就是将内核映象从硬的主要运行任务就是将内核映象从硬盘上读到盘上读到RAM中,然后跳转到内核的入口点去运中,然后跳转到内核的入口点去运行,即开始启动操作系统。行,即开始启动操作系统。嵌入式系统中引导加载程序嵌入式系统中引导加载程序嵌入

3、式系统中通常没有嵌入式系统中通常没有BIOS那样的固件程序那样的固件程序少数嵌入式少数嵌入式CPU也会内嵌一段短小的启动程序也会内嵌一段短小的启动程序系统的加载启动任务就完全由系统的加载启动任务就完全由Bootloader来完成来完成例如例如ARM7TDMI中,系统在上电或复位时从地中,系统在上电或复位时从地址址 0 x00000000 处开始执行处开始执行这个地址存放的是这个地址存放的是BootLoader程序程序典型的嵌入式系统典型的嵌入式系统 BootloaderBlob: Bootloader object的缩写的缩写开源,遵循开源,遵循GPL,很好的,很好的Linux loader,

4、主要,主要针对针对ARMU-Boot:universal Bootloader的缩写的缩写开源,遵循开源,遵循GPL,支持,支持ARM, MIPS, X86, Nios等处理器等处理器可启动可启动VxWorks, QNX, Linux等多种操作系统等多种操作系统vivi最初是为最初是为S3C2410编写的,用于启动编写的,用于启动Linux ,目前版本是目前版本是0.1.4Bootloader的概念的概念 在操作系统内核运行之前运行的一段小程序在操作系统内核运行之前运行的一段小程序功能功能:初始化硬件设备初始化硬件设备初始化内存空间初始化内存空间调整系统的软硬件环境,以便操作系统内核启动调整系

5、统的软硬件环境,以便操作系统内核启动Bootloader不通用不通用:依赖于硬件依赖于硬件依赖于具体的板级配置依赖于具体的板级配置 不同的不同的CPU有不同的有不同的Bootloader 有些有些Bootloader支持多种支持多种CPU,如,如U-Boot支持支持 ARM和和MIPSBootloader所处的层次位置所处的层次位置Bootloader启动参数启动参数内核内核根文件系统根文件系统3.2 Bootloader的启动流程的启动流程3.2.1 进入进入Bootloader3.2.2 Bootloader的输入输出的输入输出3.2.3 Bootloader的启动过程的启动过程3.2.4

6、 Bootloader的操作模式的操作模式3.2.5 Bootloader与主机之间的文件传输与主机之间的文件传输3.2.1 进入进入Bootloader系统第一条指令系统第一条指令51:100h8086:FFFF:0000ARM:地址:地址 0 x00000000嵌入式系统通常把固态存储设备嵌入式系统通常把固态存储设备(比如:比如:ROM、EEPROM 或或 FLASH 等等)映射到这个预先安排的地映射到这个预先安排的地址上,而址上,而Bootloader就放在这里就放在这里所以,系统加电后,所以,系统加电后,CPU 将首先执行将首先执行 Bootloader 程序程序3.2.2 Bootl

7、oader的输入输出的输入输出主机和目标机之间一般可通过串口建立连接,没主机和目标机之间一般可通过串口建立连接,没有串口的机器需要通过一条有串口的机器需要通过一条USB转串口的电缆才转串口的电缆才能完成连接能完成连接Bootloader执行时通常会通过串口进行执行时通常会通过串口进行 I/O输出打印信息到串口输出打印信息到串口从串口读取用户控制字符等从串口读取用户控制字符等串口的参数要事先约定,如串口的参数要事先约定,如115200,n,8,1,无流控无流控3.2.3 Bootloader的启动过程的启动过程一般采用多阶段的一般采用多阶段的Bootloader,它能提供更为复,它能提供更为复杂

8、的功能,以及更好的可移植性杂的功能,以及更好的可移植性从固态存储设备上启动的从固态存储设备上启动的Bootloader大多都是大多都是 2 阶段的启动过程,启动过程分为阶段的启动过程,启动过程分为 stage 1和和 stage 2 两部分两部分 Bootloader的的2部分:部分:汇编部分执行简单的硬件初始化汇编部分执行简单的硬件初始化C语言部分负责复制语言部分负责复制OS数据数据, 设置设置OS启动参数启动参数,通过串口通信显示信息等功能通过串口通信显示信息等功能BOOTLOADER的生命周期的生命周期:1. 初始化硬件,如设置初始化硬件,如设置CPU主频,设置主频,设置RAM刷新刷新频

9、率并检测,设置频率并检测,设置UART(至少设置一个至少设置一个) 等等2. 设置启动参数,告诉内核硬件的信息,如用哪设置启动参数,告诉内核硬件的信息,如用哪个启动界面,使用的缺省串口控制台及其波特率个启动界面,使用的缺省串口控制台及其波特率3. 跳转到操作系统的首地址跳转到操作系统的首地址4. 消亡消亡3.2.4 Bootloader的操作模式的操作模式1 启动加载模式:启动加载模式:又叫自主又叫自主(Autonomous)模式模式从目标机上的某个固态存储设备上将操作系统加从目标机上的某个固态存储设备上将操作系统加载到载到 RAM 中运行中运行Bootloader 的正常工作模式,没有外界输

10、入时的的正常工作模式,没有外界输入时的缺省模式缺省模式2 下载模式:下载模式:通过串口连接或网络连接等通信手段连接主机通过串口连接或网络连接等通信手段连接主机(Host),能下载文件,如下载内核映像和根文件,能下载文件,如下载内核映像和根文件系统映像等。系统映像等。从主机下载的文件通常首先被从主机下载的文件通常首先被 Bootloader 保存保存到目标机的到目标机的 RAM 中,然后再被中,然后再被 BootLoader 写写到目标机上的到目标机上的FLASH 类固态存储设备中。类固态存储设备中。这种模式通常在第一次安装内核与根文件系统时这种模式通常在第一次安装内核与根文件系统时被使用,当然

11、系统更新也会使用被使用,当然系统更新也会使用 Bootloader 的的这种工作模式这种工作模式下载模式下通常都会向它的终端用户提供一个简下载模式下通常都会向它的终端用户提供一个简单的命令行接口单的命令行接口vivi、Blob 或或 U-Boot 等功能强大的等功能强大的 Bootloader 通常同时支持这两种工作模式,允通常同时支持这两种工作模式,允许用户在这两种工作模式之间进行切换许用户在这两种工作模式之间进行切换如如Blob、uBoot、vivi 在启动时都处于正常的启在启动时都处于正常的启动加载模式,但是会延时动加载模式,但是会延时(通常为通常为10秒左右秒左右)等待等待终端用户按下

12、任意键以切换到下载模式。终端用户按下任意键以切换到下载模式。如在这段时间内没有用户按键,则继续启动操作如在这段时间内没有用户按键,则继续启动操作系统,如系统,如Linux3.2.5 Bootloader与主机之间与主机之间的文件传输的文件传输通常目标机上的通常目标机上的 Bootloader 通过串口与主机通过串口与主机之间进行文件传输之间进行文件传输串口传输协议串口传输协议(vivi的常用方式,的常用方式,uBoot也支持也支持)通常是通常是xmodemymodemzmodem 协协议中的一种议中的一种速度有限,一般传输文件不能太大速度有限,一般传输文件不能太大可通过以太网连接并借助可通过以

13、太网连接并借助 TFTP 协议来下载文协议来下载文件件(U-Boot的常用方式的常用方式)解决了串口传输速度有限的问题解决了串口传输速度有限的问题要求主机提供要求主机提供 TFTP 服务服务3.3 Bootloader的主要任务的主要任务stage1 通常包括以下步骤通常包括以下步骤:硬件设备初始化硬件设备初始化为加载为加载Bootloader的的stage2准备准备RAM空间空间拷贝拷贝Bootloader的的stage2到到RAM空间中空间中设置好堆栈设置好堆栈跳转到跳转到stage2的的C入口点入口点stage2通常包括以下步骤通常包括以下步骤:初始化本阶段要使用到的硬件设备初始化本阶段

14、要使用到的硬件设备检测系统内存映射检测系统内存映射将将kernel 映像和根文件系统映像从映像和根文件系统映像从flash上读上读到到RAM空间中空间中为内核设置启动参数为内核设置启动参数调用内核调用内核stage2 的代码通常用的代码通常用C语言来实现语言来实现(stage1的代的代码通常用汇编语言来实现码通常用汇编语言来实现),下面的论述针对,下面的论述针对stage2。要注意代码的可读性和可移植性要注意代码的可读性和可移植性 不能使用不能使用glibc库中的任何支持函数库中的任何支持函数 没有直接把没有直接把main地址直接作为地址直接作为stage2的入口点的入口点1)无法传递函数参数

15、;无法传递函数参数;2)无法处理函数返回无法处理函数返回trampoline(弹簧床弹簧床)编程方式编程方式:用汇编语言写一段用汇编语言写一段trampoline小程序,并将这段小程序,并将这段 trampoline小程序来作为小程序来作为stage2可执行映象的执可执行映象的执行入口点行入口点在在trampoline 汇编小程序中用汇编小程序中用CPU跳转指令跳入跳转指令跳入 main()函数中去执行函数中去执行当当main()函数返回时,函数返回时,CPU执行路径显然再次回执行路径显然再次回到到trampoline程序。程序。用用trampoline小程序来作为小程序来作为main()函数

16、的外部包函数的外部包裹裹(external wrapper)blob 的的trampoline 程序示例:程序示例:.text.globl _trampoline_trampoline:bl main/* if main ever returns we just call it again */b _trampolinevivi 的的trampoline 程序示例:程序示例: get read to call C functionsldr sp,DW_STACK_START setup stack pointermov fp,#0 no previous frame,so fp=0mov a2

17、,#0 set argv to NULLbl main call main;mov pc,#FLASH_BASE otherwise,reboot串口终端串口终端 调试手段:打印信息到串口终端调试手段:打印信息到串口终端串口终端显示乱码或根本没有显示串口终端显示乱码或根本没有显示 (1) Bootloader对串口的初始化设置不正确。对串口的初始化设置不正确。(2) 运行在运行在host端的终端仿真程序对串口的设端的终端仿真程序对串口的设置不正确,这包括:波特率、奇偶校验、数据置不正确,这包括:波特率、奇偶校验、数据位和停止位等方面的设置位和停止位等方面的设置 基本的硬件初始化基本的硬件初始化

18、 目的:为目的:为stage2的执行以及随后的的执行以及随后的kernel的执行的执行准备好一些基本的硬件环境准备好一些基本的硬件环境 1屏蔽所有的中断屏蔽所有的中断为中断提供服务通常是为中断提供服务通常是OS设备驱动程序的责设备驱动程序的责任,任,Bootloader的执行全过程中可以不必响应的执行全过程中可以不必响应任何中断任何中断中断屏蔽可以通过写中断屏蔽可以通过写CPU的中断屏蔽寄存器或的中断屏蔽寄存器或状态寄存器状态寄存器(如如ARM的的CPSR寄存器寄存器)来完成来完成2设置设置CPU的速度和时钟频率。的速度和时钟频率。3RAM初始化初始化包括正确地设置系统的内存控制器的功能寄存包

19、括正确地设置系统的内存控制器的功能寄存器以及各内存控制寄存器等。器以及各内存控制寄存器等。4初始化初始化 LED通过通过GPIO来驱动来驱动LED,其目的是表明系统的,其目的是表明系统的状态是状态是OK还是还是Error如板子上没有如板子上没有LED,那么也可以通过初始化,那么也可以通过初始化UART向串口打印向串口打印Bootloader的的Logo字符信字符信息息5关闭关闭CPU内部指令数据内部指令数据cache为加载为加载stage2准备准备RAM空间空间 通常把通常把stage2加载到加载到 RAM 空间中来执行空间中来执行 stage2通常是通常是C语言执行代码,考虑堆栈空间,语言执

20、行代码,考虑堆栈空间,空间大小最好是存储器页大小空间大小最好是存储器页大小(通常是通常是4KB)的倍的倍数数一般一般1M RAM空间已经足够,地址范围可以任意空间已经足够,地址范围可以任意安排安排如如blob就将就将stage2可执行映像从系统可执行映像从系统RAM起起始地址开始的始地址开始的1M空间内执行空间内执行将将stage2安排到安排到RAM空间的最顶空间的最顶1MB也是一也是一种值得推荐的方法。种值得推荐的方法。stage2_endstage2_start+stage2_size对所安排的地址范围进行测试对所安排的地址范围进行测试必须确保所安排的地址范围为可读写的必须确保所安排的地址

21、范围为可读写的RAM 空间空间测试方法可以采用类似于测试方法可以采用类似于blob的方法的方法q以存储器的页为被测试单位,测试每个页以存储器的页为被测试单位,测试每个页开始的两个字是否是可读写的开始的两个字是否是可读写的拷贝拷贝stage2到到RAM中中 拷贝时需要用到下列地址:拷贝时需要用到下列地址:stage2的可执行映象在固态存储设备的存放起始的可执行映象在固态存储设备的存放起始地址和终止地址地址和终止地址RAM空间的起始地址。空间的起始地址。设置堆栈指针设置堆栈指针sp 通常把通常把sp的值设置为的值设置为(stage2_end-4)1MB的的RAM空间的最顶端空间的最顶端(堆栈向下生

22、长堆栈向下生长) 在设置堆栈指针在设置堆栈指针sp之前,也可以关闭之前,也可以关闭led灯,以灯,以提示用户我们准备跳转到提示用户我们准备跳转到stage2跳转到跳转到stage2的的C入口点入口点 最后跳转到最后跳转到Bootloader的的stage2去执行去执行如在如在ARM系统中,这可以通过修改系统中,这可以通过修改PC寄存器为寄存器为合适的地址来实现合适的地址来实现初始化本阶段要使用到的硬件设备初始化本阶段要使用到的硬件设备 初始化至少一个串口,以便终端用户进行初始化至少一个串口,以便终端用户进行I/O输出输出信息信息初始化定时器等初始化定时器等在初始化这些设备之前,也可以重新把在初

23、始化这些设备之前,也可以重新把LED灯点灯点亮,以表明我们已经进入亮,以表明我们已经进入main()函数执行函数执行设备初始化完成后,可以输出一些打印信息,程设备初始化完成后,可以输出一些打印信息,程序名字字符串、版本号等序名字字符串、版本号等 检测系统的内存映射检测系统的内存映射确定在物理地址空间中哪些地址范围被分配用来确定在物理地址空间中哪些地址范围被分配用来寻址系统的寻址系统的RAM单元单元如如SA-1100中,从中,从0 xC0000000开始的开始的512M空空间被用作系统的间被用作系统的RAM空间空间在在S3C44B0中,从中,从0 x0c000000到到0 x10000000之间

24、的之间的64M 地址空间被用作系统的地址空间被用作系统的RAM地址地址空间空间在在S3C2410中,从中,从0 x3000,0000到到0 x4000,0000之间的之间的256M地址空间被用作系统地址空间被用作系统的的RAM地址空间地址空间嵌入式系统往往只把嵌入式系统往往只把CPU预留的全部预留的全部RAM地址空地址空间中的一部分映射到间中的一部分映射到RAM单元上,而让剩下的那单元上,而让剩下的那部分预留部分预留RAM地址空间处于未使用状态地址空间处于未使用状态Bootloader的的stage2必须检测整个系统的内存映必须检测整个系统的内存映射情况射情况必须知道必须知道CPU预留的全部预

25、留的全部RAM地址空间中的哪地址空间中的哪些被真正映射到些被真正映射到RAM地址单元,哪些是处于地址单元,哪些是处于 unused 状态的状态的加载内核映像和根文件系统映像加载内核映像和根文件系统映像 规划内存占用的布局规划内存占用的布局 内核映像所占用的内存范围内核映像所占用的内存范围根文件系统所占用的内存范围根文件系统所占用的内存范围从从Flash上拷贝上拷贝 设置内核的启动参数设置内核的启动参数 Linux 2.4.x以后的内核都以标记列表以后的内核都以标记列表(tagged list)的形式来传递启动参数的形式来传递启动参数启动参数标记列表以标记启动参数标记列表以标记ATAG_CORE

26、开始,以开始,以标记标记ATAG_NONE结束结束每个标记由标识被传递参数的每个标记由标识被传递参数的tag_header结构以结构以及随后的参数值数据结构来组成及随后的参数值数据结构来组成在嵌入式在嵌入式 Linux 系统中,通常需要由系统中,通常需要由 Bootloader 设置的常见启动参数:设置的常见启动参数:ATAG_CORE、ATAG_MEM、ATAG_CMDLINE、ATAG_RAMDISK、ATAG_INITRD等等调用内核调用内核 直接跳转到内核的第一条指令处直接跳转到内核的第一条指令处 在跳转时,下列条件要满足在跳转时,下列条件要满足1CPU寄存器的设置寄存器的设置qR00

27、;R1机器类型机器类型 ID;R2启动启动参数标记列表在参数标记列表在RAM中起始基地址中起始基地址2CPU 模式模式q必须禁止中断必须禁止中断(IRQs和和FIQs);qCPU必须必须SVC模式模式(超级用户模式超级用户模式);3Cache和和MMU的设置的设置qMMU必须关闭;必须关闭;q指令指令Cache可以打开也可以关闭;可以打开也可以关闭;q数据数据Cache必须关必须关3.4 几种几种Bootloader介绍介绍3.4.1 WinCE的的Bootloader3.4.2 Redboot3.4.3 Vivi3.4.4 U-Boot3.4.1 WinCE的的Bootloader 有有3种

28、:种:ROM BootloaderBIOS BootloaderMSDOSLoadcepcROM Bootloader又叫又叫Rom Boot存放在存放在Flash/EEPROM中,原来中,原来BIOS的位置的位置上电后上电后CPU到固定地址执行到固定地址执行Rom Boot的代码的代码对整个硬件系统进行初始化和检测对整个硬件系统进行初始化和检测支持通过网卡从远程机器上下载或者从本地支持通过网卡从远程机器上下载或者从本地IDE/ATA 硬盘的活动分区中寻找硬盘的活动分区中寻找nk.bin文件加载文件加载优点:引导并且加载速度快,不需要优点:引导并且加载速度快,不需要BIOS、MSDOS和和Lo

29、adcepc了了缺点:需要缺点:需要CE开发者读懂它的源码并修改开发者读懂它的源码并修改CE提供了提供了Rom Boot的所有源码的所有源码BIOS Bootloader不需要不需要MSDOS操作系统,但需操作系统,但需要要BIOS和和FAT文件系统文件系统系统上电后系统上电后BIOS执行完硬件初始化和配置后,执行完硬件初始化和配置后,BIOS检查引导设备的启动顺序,如果引导设备是检查引导设备的启动顺序,如果引导设备是硬盘、硬盘、CF卡这类的存储设备,那么就加载这些存卡这类的存储设备,那么就加载这些存储器上的主引导扇区储器上的主引导扇区(Master Boot Sector)中的实中的实模式代

30、码模式代码(MBR)到内存,然后执行这些代码到内存,然后执行这些代码MBR首先在分区表首先在分区表(同样位于主引导扇区同样位于主引导扇区)中寻找活中寻找活动分区,如果存在,就加载位于活动分区的第一个动分区,如果存在,就加载位于活动分区的第一个扇区扇区(引导扇区引导扇区)上的代码到内存,然后执行。上的代码到内存,然后执行。引导扇区上的代码的功能是找到并且加载引导扇区上的代码的功能是找到并且加载BIOS Bootloader,BIOS Bootloader再加载再加载nk.bin。对于对于BIOS Bootloader,CE提供了提供了Setupdisk.144和和Bootdisk.144两个文件

31、两个文件BIOS BootloaderBIOS Bootloader和和MSDOSLoadcepc两种方两种方式差不多式差不多在在MSDOS启动后再执行启动后再执行loadcepc.exe,让,让loadcepc加载加载nk.bin到内存后再把到内存后再把CPU控制权交控制权交给给CE内核程序内核程序MSDOSLoadcepc3.4.4 U-Boot简介简介主要功能主要功能特点特点主要目录结构主要目录结构调试方法调试方法移植的主要步骤移植的主要步骤主要命令主要命令简介简介德国德国DENX软件工程中心的软件工程中心的Wolfgang Denk全称全称Universal Bootloader遵循遵

32、循GPL条款的开放源码项目条款的开放源码项目从从FADSROM、8xxROM 、PPCBOOT发展而来发展而来其源码目录、编译形式与其源码目录、编译形式与Linux内核很相似内核很相似源码就是相应源码就是相应Linux内核源程序的简化,尤其是设内核源程序的简化,尤其是设备驱动程序备驱动程序支持支持:嵌入式嵌入式Linux/NetBSD/VxWorks/QNX/LynxOS等等PowerPC、MIPS、x86、ARM 、XScale等等 对对PowerPC系列处理器系列处理器/对对Linux的支持最完善的支持最完善主要功能主要功能系统引导系统引导支持支持NFS挂载、挂载、RAMDISK 系统引导

33、系统引导 (压缩或非压缩压缩或非压缩)形式的根文件系统形式的根文件系统支持支持NFS挂载,从挂载,从Flash中引导压缩或非压缩系统内核中引导压缩或非压缩系统内核基本辅助基本辅助 强大的操作系统接口功能,可灵活设置、传递多个关键参数给操作系强大的操作系统接口功能,可灵活设置、传递多个关键参数给操作系统,统, 适合系统在不同开发阶段的调试要求与产品发布,尤其对适合系统在不同开发阶段的调试要求与产品发布,尤其对Linux支支持最为功能强劲持最为功能强劲支持目标板环境参数的多种存储方式,如支持目标板环境参数的多种存储方式,如Flash、NVRAM、EEPROMCRC32校验,可校验校验,可校验Fla

34、sh中内核、中内核、RAMDISK镜像文件是否完好镜像文件是否完好设备驱动设备驱动串口、串口、SDRAM、Flash、以太网、以太网、LCD、NVRAM、EEPROM、键盘、键盘、USB、PCMCIA、PCI、RTC等驱动支持等驱动支持上电自检上电自检功能功能SDRAM、Flash大小自动检测;大小自动检测;SDRAM 故障检测;故障检测;CPU型号型号特殊功能特殊功能XIP内核引导内核引导(WINCE XIP KERNEL)特点特点 开放源码;开放源码; 支持多种嵌入式操作系统内核;支持多种嵌入式操作系统内核; 支持多个处理器系列;支持多个处理器系列; 较高的可靠性和稳定性;较高的可靠性和稳

35、定性; 高度灵活的功能设置,适合高度灵活的功能设置,适合U-Boot调试、操作调试、操作系统不同引导要求、产品发布等;系统不同引导要求、产品发布等; 丰富的设备驱动源码;丰富的设备驱动源码; 较丰富的开发调试文档与强大的网络支持。较丰富的开发调试文档与强大的网络支持。主要目录结构主要目录结构Board:目标板相关文件,主要包含:目标板相关文件,主要包含SDRAM、FLASH驱动;驱动;Common:独立于处理器体系结构的通用代码,如:独立于处理器体系结构的通用代码,如内存大小探测与故障检测;内存大小探测与故障检测;Cpu:与处理器相关的文件。如:与处理器相关的文件。如mpc8xx子目录下含子目

36、录下含串口、网口、串口、网口、LCD驱动及中断初始化等文件;驱动及中断初始化等文件;Driver:通用设备驱动,如:通用设备驱动,如CFI FLASH驱动(目前驱动(目前对对INTEL FLASH支持较好)支持较好)Doc:U-Boot的说明文档;的说明文档;Include:U-Boot头文件;尤其头文件;尤其configs子目录下子目录下与目标板相关的配置头文件是移植过程中经常要与目标板相关的配置头文件是移植过程中经常要修改的文件;修改的文件;lib_xxx:处理器体系相关的文件,如:处理器体系相关的文件,如lib_ppc, lib_arm目录分别包含与目录分别包含与PowerPC、ARM体

37、系结体系结构相关的文件;构相关的文件;net:与网络功能相关的文件目录,如:与网络功能相关的文件目录,如bootp,nfs,tftp;Post:上电自检文件目录。尚有待于进一步完善;:上电自检文件目录。尚有待于进一步完善;Tools:用于创建:用于创建U-Boot S-RECORD和和BIN镜像镜像文件的工具;文件的工具;Rtc:RTC驱动程序。驱动程序。调试方法调试方法大致分为两种:大致分为两种:先用仿真器创建目标板初始运行环境,将先用仿真器创建目标板初始运行环境,将U-Boot镜像文件镜像文件U-Boot.bin下载到目标板下载到目标板RAM中的指定中的指定位置,然后进行跟踪调试位置,然后

38、进行跟踪调试好处好处:不用将不用将Uboot镜像文件烧写到镜像文件烧写到Flash中去中去弊端弊端:对移植开发人员的移植调试技能要求较高,对移植开发人员的移植调试技能要求较高,调试器的配置文件较为复杂调试器的配置文件较为复杂用调试器先将用调试器先将U-Boot镜像文件烧写到镜像文件烧写到Flash中去,中去,然后用然后用GDB调试器调试调试器调试所用的调试器配置文件较为简单,调试过程与所用的调试器配置文件较为简单,调试过程与U-Boot移植后运行过程相吻合移植后运行过程相吻合U-Boot先从先从Flash中运行,再重载至中运行,再重载至RAM 中中相应位置,并从那里正式投入运行相应位置,并从那

39、里正式投入运行需要不断烧写需要不断烧写Flash移植的主要步骤移植的主要步骤以以S3C2410为例,说明为例,说明U-Boot的主要移植步骤:的主要移植步骤:1.修改修改Makefile文件文件whhit2410_config : unconfig ./mkconfig $(:_config=) arm arm920t whhit2410 NULL s3c24x0 各项的意思如下各项的意思如下:arm: CPU的架构的架构(ARCH)arm920t: CPU的类型的类型(CPU),其对应于,其对应于cpu/arm920t子目录。子目录。whhit2410: 开发板的型号开发板的型号(BOARD

40、),对应于,对应于board/whhit2410目录。目录。NULL: 开发者开发者/或经销商或经销商(vender)。s3c24x0: 片上系统片上系统(SOC)。2. 建立建立board/whhit2410目录,拷贝目录,拷贝board/smdk2410下的文件到下的文件到board/whhit2410目录,将目录,将smdk2410.c更名为更名为whhit2410.c3. cp include/configs/smdk2410.h include/configs/whhit2410.h4. 将将arm-linux-gcc的目录加入到的目录加入到PATH环境变量环境变量中中5. 测试编译

41、能否成功:测试编译能否成功:make whhit2410_configmake all ARCH=arm生成生成U-Boot.bin就就OK了了6. 依照你自己开发板的内存地址分配情况修改依照你自己开发板的内存地址分配情况修改board/whhit2410/memsetup.S文件文件7. 在在board/whhit2410加入加入NAND Flash读函数,读函数,建立建立nand_read.c 。8. 修改修改board/whhit2410/Makefile 9. 修改修改cpu/arm920t/start.S文件文件10. 修改修改include/configs/whhit2410.h文

42、件文件 11. 重新编译重新编译U-Bootmake all ARCH=arm12.通过通过jtag将将U-Boot烧写到烧写到flash主要命令主要命令打印环境变量列表:打印环境变量列表:printenv设置设置tftp服务器的服务器的ip地址地址setenv serverip 192.168.0.66设置本机设置本机(开发板开发板)的的ip地址地址setenv ipaddr 192.168.0.11保存前面对环境变量所做的修改保存前面对环境变量所做的修改saveenv通过通过tftp下载内核下载内核(串口下载命令为串口下载命令为loady)tftp 0 x30008000 uImagena

43、nd erase 0 x80000 0 x200000nand write 0 x30008000 0 x80000 0 x2000003.4.2 Redboot Redhat公司随公司随eCos发布的一个开源发布的一个开源BOOT支持:支持:ARM,MIPS,MN10300,PowerPC, Renesas SHx,v850,x86 使用使用X-modem或或Y-modem协议经由串口下载,协议经由串口下载,也可以经由以太网口通过也可以经由以太网口通过BOOTP/DHCP服务获服务获得得IP参数,使用参数,使用TFTP方式下载程序映像文件,常方式下载程序映像文件,常用于调试支持和系统初始化用

44、于调试支持和系统初始化Redboot可以通过串口和以太网口与可以通过串口和以太网口与GDB进行通进行通信,调试程序,能中断被信,调试程序,能中断被GDB运行的应用程序运行的应用程序Redboot提供了一个交互式命令行接口,用来从提供了一个交互式命令行接口,用来从TFTP服务器或者从服务器或者从Flash下载映像文件、加载系下载映像文件、加载系统的引导脚本文件,它保存在统的引导脚本文件,它保存在Flash上上3.4.3 vivivivi 是由韩国是由韩国mizi 公司设计为公司设计为ARM 处理器系列处理器系列设计的一个设计的一个bootloader,支持使用串口和主机通,支持使用串口和主机通信

45、。信。vivi与其它与其它Bootloader相比,增加了对分区的命相比,增加了对分区的命令支持令支持vivi程序流程程序流程编译编译vivivivi的使用的使用系统复位系统复位禁止看门狗禁止看门狗关闭中断关闭中断初始化系统时钟初始化系统时钟跳到跳到stage2入口执行入口执行输出输出vivi版本号版本号开发板初始化开发板初始化内存映射并拷贝内存映射并拷贝vivi代码到代码到SDRAM中中初始化堆栈初始化堆栈初始化初始化MTD设备设备初始化私有数据初始化私有数据初始化内置命令初始化内置命令启动启动vivi-boot_or_vivi编译编译vivi首先,进入首先,进入vivi 源代码目录:源代码

46、目录:#cd /vivi然后配置和编译它,执行:然后配置和编译它,执行:#make menuconfig,实际上,你不需要自己手工选择配置它,已经配置实际上,你不需要自己手工选择配置它,已经配置好了,只需装载一个缺省的配置文件即可,使用这好了,只需装载一个缺省的配置文件即可,使用这个配置文件生成的个配置文件生成的vivi 正好适合于目标板,这个配正好适合于目标板,这个配置文件在置文件在vivi/arch/def-configs 目录中,该目录包目录中,该目录包含了一些适合于各种板的配置文件。含了一些适合于各种板的配置文件。装载装载“arch/def-configs/smdk2410”后保存该设

47、后保存该设置,并执行置,并执行 #make 命令编译命令编译vivi#cd /vivi#make menuconfig将出现下面窗口:将出现下面窗口:在跳出的窗口中选择在跳出的窗口中选择“ Load on Alternate Configuration File ” 菜单,菜单, 然后输入然后输入“arch/def-configs/smdk2410”。再选择再选择“OK”,前一个界面又会出现一次,这时,前一个界面又会出现一次,这时选择退出,然后选择选择退出,然后选择“Yes”保存刚才的配置。保存刚才的配置。保存完毕,执行以下命令:保存完毕,执行以下命令:#make如果编译过程顺利,将会在当前目

48、录下生如果编译过程顺利,将会在当前目录下生成成vivi 二进制映象文件二进制映象文件vivi的使用的使用Vivi的使用可以查看的使用可以查看mizi公司的公司的vivi使用手册,下使用手册,下面会介绍其中几个经常使用的命令面会介绍其中几个经常使用的命令使用使用JTAG 接口下载接口下载vivivivi的的load命令命令参数设定命令参数设定命令使用使用JTAG 接口下载接口下载vivi使用使用JTAG 接口下载程序需要接口下载程序需要JTAG小板、连接电小板、连接电缆和烧写程序。把缆和烧写程序。把JTAG小板和电缆连接小板和电缆连接S3C2410开发板和主机的并口,然后打开目标板开发板和主机的

49、并口,然后打开目标板电源开关电源开关烧写程序有烧写程序有2种:种:PC端端windows环境下的烧写程序环境下的烧写程序PC端端linux环境下的烧写程序环境下的烧写程序Mizi公司提供了下载软件,公司提供了下载软件,Jflash是是Linux的下载的下载程序程序在在Linux下执行以下命令可以查看下执行以下命令可以查看Jflash 的使用的使用方法:方法:#./Jflash s3c2410-help对应不同类型的对应不同类型的Flash ,Jflash 程序使用不同的程序使用不同的选项参数,如使用选项参数,如使用64M三星三星Nand Flash,则,则“/t=5”,可执行以下命令开始烧写,

50、可执行以下命令开始烧写vivi。#./Jflash-s3c2410 vivi /t=5当当vivi 烧入烧入Flash,并能正常启动,连接好串口,并能正常启动,连接好串口,运行运行minicom 终端程序,就会进入终端程序,就会进入vivi 的命令提示的命令提示符下。符下。vivi的的load命令命令命令格式如下:命令格式如下:load flash kernel x其中:其中:load vivi 的下载命令的下载命令flash 把文件下载到把文件下载到flash 中中kernel 要下载的文件是要下载的文件是kernel 类型,和分区参类型,和分区参数同名,还可以是数同名,还可以是vivi,r

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

当前位置:首页 > 办公、行业 > 各类PPT课件(模板)
版权提示 | 免责声明

1,本文(嵌入式第三章课件.ppt)为本站会员(三亚风情)主动上传,163文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。
2,用户下载本文档,所消耗的文币(积分)将全额增加到上传者的账号。
3, 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(发送邮件至3464097650@qq.com或直接QQ联系客服),我们立即给予删除!


侵权处理QQ:3464097650--上传资料QQ:3464097650

【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。


163文库-Www.163Wenku.Com |网站地图|