嵌入式linux系统开发详解-第14章深入bootloader_第1页
嵌入式linux系统开发详解-第14章深入bootloader_第2页
嵌入式linux系统开发详解-第14章深入bootloader_第3页
嵌入式linux系统开发详解-第14章深入bootloader_第4页
嵌入式linux系统开发详解-第14章深入bootloader_第5页
已阅读5页,还剩30页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第14章深入Bootloader14.1初识Bootloader14.2U-Boot分析14.3U-Boot启动流程分析14.4移植U-Boot到开发板14.1初识Bootloader14.1.1PC(个人电脑)上的Bootloader14.1.2什么是嵌入式系统的Bootloader14.1.3嵌入式系统常见的Bootloader14.1.1PC(个人电脑)上的BootloaderBootloader是系统加电后运行的第一段程序,一般来说,Bootloader为了保证整个系统的启动速度,要在很短的时间内运行。PC的Bootloader由BIOS和MBR组成。其中,BIOS固化在PC主板的一块内存内;MBR是PC内硬盘主引导扇区(MasterBootRecorder)的缩写。PC上电后,首先执行BIOS的启动程序。然后根据用户配置,由BIOS加载硬盘MBR的启动数据。BIOS把硬盘MBR的数据读取到内存,然后把系统的控制权交给保存在MBR的操作系统加载程序(OSLoader)。操作系统加载程序继续工作,直到加载操作系统内核,再把控制权交给操作系统内核。14.1.2什么是嵌入式系统的Bootloader嵌入式系统虽然硬件差异大,但是仍然有相同的规律可循。在同一体系结构上,外部设备的连接方式、工作方式可能不同,但是CPU的指令、编程模型是相同的。由于和PC系统的差异,在嵌入式系统中,需要开发人员自己设计Bootloader。一些开源软件组织以及其他公司已经设计出了适合多种系统的Bootloader。这些Bootloader软件实际上是为嵌入式系统设计的一个相对通用的框架。开发人员只需要根据需求,按照不同体系结构的编程模型,以及硬件连接结构,设计与硬件相关的代码,省去了从头开发的繁琐流程。14.1.3嵌入式系统常见的BootloaderBootloader是嵌入式软件开发的第一个环节。Bootloader初始化目标硬件,给嵌入式操作系统提供硬件资源信息,并且装载嵌入式操作系统。在嵌入式开发过程中Bootloader往往是难点,开源的Bootloader在设计思想上往往有一些相同之处。1.U-Boot系统加载器2.ViVi系统加载器1.U-Boot系统加载器U-Boot是一个规模庞大的开源Bootloader软件,最初是由denx()发起。U-Boot的前身是PPCBoot,目前是SourceForge()的一个项目。目前可以支持PowerPC(MPC5xx、MPC8xx、MPC82xx、MPC7xx、MPC74xx)、ARM(ARM7、ARM9、StrongARM、Xscale)、MIPS(4kc、5kc)、X86等处理器,支持的嵌入式操作系统有Linux、Vx-Works、NetBSD、QNX、RTEMS、ARTOS、LynxOS等,是PowerPC、ARM9、Xscale、X86等系统通用的Boot方案。2.ViVi系统加载器ViVi是韩国的mizi公司专门针对ARM9处理器设计的一款Bootloader。它的特点是操作简便,同时提供了完备的命令体系,目前在三星系列的ARM9处理器上ViVi也比较流行。与其他的Bootloader一样,ViVi有两种工作模式:启动加载模式和下载模式。14.2U-Boot分析14.2.1获取U-Boot14.2.2U-Boot工程结构分析14.2.3U-Boot总体工作流程14.2.1获取U-BootU-Boot的源代码可以从ftp://ftp.denx.de/pub/u-boot/上获得。使用匿名用户身份登录到U-Boot的FTP服务器后,进入pub/u-boot目录,该目录包含了U-Boot所有代码。本书使用U-Boot1.1.6版本代码作为分析的样本。14.2.2U-Boot工程结构分析子目录名作

用board开发板相关的定义和结构common包含U-Boot用到的各种处理函数cpu各种不同类型的处理器相关代码docU-Boot文档drivers常用外部设备驱动程序examples存放U-Boot开发代码样例fs文件系统有关的代码,包括cramfs、ext2、fat等常见文件系统includeU-Boot用到的头文件lib_armARM体系结构有关的数据定义和操作lib_genericU-Boot通用的操作函数net常用的网络协议,包括bootp、rarp、arp、tftp等post上电自检相关代码rtc实时时钟有关操作toolsU-Boot有关的数据代码14.2.3U-Boot总体工作流程与大多数Bootloader类似,U-Boot的启动分成stage1和stage2两个阶段。stage1使用汇编语言编写,通常与CPU体系紧密相关,如处理器初始化和设备初始化代码等,该阶段在start.S文件中实现。14.2.3U-Boot总体工作流程14.3U-Boot启动流程分析14.3.1_start标号14.3.2reset标号14.3.3cpu_init_crit标号14.3.4lowlevel_init标号14.3.5relocate标号14.3.6start_armboot()函数14.3.7main_loop()函数14.3.1_start标号在U-Boot工程中,每种处理器目录下都有一个start.S文件,该文件中有一个_start标号,是整个U-Boot代码的入口点。14.3.2reset标号reset标号的代码在处理器启动的时候最先被执行。14.3.3cpu_init_crit标号cpu_init_crit标号处的代码初始化ARM处理器关键的寄存器。14.3.4lowlevel_init标号lowlevel_init标号位于board/smdk2410/lowlevel_init.S文件。14.3.5relocate标号relocate部分的代码负责把U-BootStage2的代码从Flash存储器加载到内存。14.3.6start_armboot()函数start_armboot()函数主要初始化ARM系统的硬件和环境变量,包括Flash存储器、FrameBuffer、网卡等,最后进入U-Boot应用程序主循环。14.3.7main_loop()函数main_loop()函数做的都是与具体平台无关的工作,主要包括初始化启动次数限制机制、设置软件版本号、打印启动信息、解析命令等。14.4移植U-Boot到开发板14.4.1U-Boot移植的一般步骤14.4.2移植U-Boot到目标开发板14.4.3移植U-Boot的常见问题14.4.1

U-Boot移植的一般步骤U-Boot移植工作主要分成处理器相关部分和开发板相关部分。由于U-Boot已经支持目前绝大多数处理器,因此处理器移植的工作相对较少,主要是修改一些配置。对于开发板部分的移植,需要参考硬件线路的外围器件的手册。U-Boot移植大致可以分为下面的步骤:1.检查U-Boot工程是否支持目标平台主要检查U-Boot根目录下的Readme文件是否提到目标平台处理器,cpu目录下是否有目标平台的处理器目录,以及board目录下是否有目标平台类似的工程。如果U-Boot已经编写了与目标平台类似的工程文件,移植工作会大大减轻。2.分析目标平台类似工程目录结构如果U-Boot有与目标平台类似的工程,需要分析一下目标板工程目录的结构。不同的目标板可能差别很大,分析工程目录中有哪些文件可以被新的目标开发板利用。3.分析目标平台代码目标平台代码分析可以按照14.3.4节介绍的U-Boot启动流程分析,看哪些代码是额外的,是否需要去掉额外的代码。4.建立新的开发板平台目录在board目录下建立新的开发板平台目录,目录下的文件可以从现有类似的开发板平台目录下复制得到。5.对照手册修改平台差异部分代码对照硬件手册,按照U-Boot启动流程修改现有代码与新平台有差异的部分。6.调试新代码新修改的代码很可能启动不了,需要通过JTag调试器跟踪调试。找出原因修改后再调试,直到正确启动。以上分析的6个步骤并非必须严格遵守,这里仅是提供一个一般的思路,读者在移植的时候需要结合自己的目标板情况来分析。14.4.2移植U-Boot到目标开发板移植U-Boot到新的目标平台会有许多问题。为了减少出错和工作量,在建立一个新的目标平台的时候可以直接复制现有类似平台的代码目录,然后在现有基础上修改。如移植到mini2440开发板,可以按照下面的步骤操作:1.建立新目标板工程目录在board目录下建立一个mini2440目录,现有的smdk2410目录是类似的平台,可以复制smdk2410目录下的所有文件到mini2440目录。2.向配置文件加入新开发板配置在U-Boot代码根目录下,修改Makefile文件。在1881行插入一行,写入以下配置:1882mini2440_config

:unconfig1883@$(MKCONFIG)$(@:_config=)armarm920tmini2440NULLs3c24x03.预编译新开发板的代码到目前为止可以先编译一下新开发板的代码,目的是为了验证工程文件配置是否正确。在U-Boot目录下执行:$makemini2440_configConfiguringformini2440board...$make4.修改目标板配置新的目标板配置主要存放在include/configs/mini2440.h文件中,该文件有几个宏需要修改:CONFIG_SYS_CLK_FREQ

//目标板处理器晶振的频率CONFIG_DRIVER_CS8900

//目标板是否有CS8900网卡CS8900_BASE

//CS8900网卡控制器地址CONFIG_BOOTDELAY

//启动延迟时间CONFIG_NETMASK

//网络地址掩码CONFIG_SERVERIP

//服务器IP地址CFG_MAX_FLASH_BANKS

//Flash存储器Bank数量PHYS_FLASH_SIZE

//Flash存储器大小CFG_ENV_ADDR

//环境配置信息存放地址CFG_FLASH_ERASE_TOUT

//擦除Flash超时时间CFG_FLASH_WRITE_TOUT

//写Flash超时时间CFG_ENV_SIZE

//环境变量大小5.编译新的配置并且下载执行回到U-Boot代码根目录,重新执行make编译生成u-boot目标文件,然后通过Flash烧写工具烧写到mini2440开发板的NORFlash存储器,然后上电启动。14.4.3移植U-Boot的常见问题在移植U-Boot的过程中会遇到很多问题,最主要的是一开始无

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论