嵌入式系统引导程序2

上传人:宝路 文档编号:50650314 上传时间:2018-08-09 格式:PPT 页数:32 大小:515.04KB
返回 下载 相关 举报
嵌入式系统引导程序2_第1页
第1页 / 共32页
嵌入式系统引导程序2_第2页
第2页 / 共32页
嵌入式系统引导程序2_第3页
第3页 / 共32页
嵌入式系统引导程序2_第4页
第4页 / 共32页
嵌入式系统引导程序2_第5页
第5页 / 共32页
点击查看更多>>
资源描述

《嵌入式系统引导程序2》由会员分享,可在线阅读,更多相关《嵌入式系统引导程序2(32页珍藏版)》请在金锄头文库上搜索。

1、嵌入式系统软件设计与开发 -bootloader嵌入式系统引导程序z主要内容包括: yBootloader 概述 y常见的bootloader yBlob yBlob 移植 yBlob 的使用Bootloader 概述z Bootloader是在操作系统运行之前执行的一段小程序 ,通过这段小程序,我们可以初始化硬件设备、建立内 存空间的映射表,从而建立适当的系统软硬件环境,为 最终调用操作系统内核做好准备。Bootloader 概述z Bootloader的板上地址分布Bootloader主要任务(1/2)z初始化处理器以及外设的硬件资源配置, CPU片内和片外设备,例如必须正确的配 置SDR

2、AM控制器 z初始化 I/O 芯片,可能有的设备: y串口,报告Bootloader成功/失败 y网络或者Flash接口,引导操作系统 z执行系统自检,报告检测结果 z通过用户命令行提供特定应用程序Bootloader任务(2/2)z使用TFTP协议从网口接收、或者 xmodem协议从串口接收,操作系统镜 像文件到RAM y将镜像烧写到flash中,重启后负责找到该镜 像、解压到RAM中,并跳转到解压位置处执 行 y直接跳转到RAM处执行该镜像归纳:z初始化处理器及外设的硬件资源配置 z建立内存空间映射图 zLoader zBootBootloader的操作模式z启动模式z下载模式常见的Boo

3、tloaderBootloaderDescriptionx86ARMPowerPCLILOMain disk bootloader for LinuxYesNoNoGRUBGNUs successor to LILOYesNoNoLoadlinLoads Linux from DOSYesNoNoROLOLoads Linux from ROM without a BIOSYesNoNoEtherbootROMable loader for booting systems through Ethernet cardsYesNoNoLinuxBIOSLinux-based BIOS replac

4、ementYesNoNoBLOBLoader from the LART hardware projectNoYesNoU-bootUniversal loaderYesYesYesRedBooteCos-based loaderYesYesYesARM BootloaderzU-Boot是常用的ARM bootloader yArmboot加入到u-boot中 y支持arm720, arm920, arm926, sa1100, xscale yhttp:/ yhttp:/ zBlob yBlob最早是为 LART项目开发的bootloader yBlob被移植到其他许多ARM平台 yhtt

5、p:/www.lart.tudelft.nl/lartware/blob zRedboot yRedboot也被用在许多arm平台的 bootloader blobBlob简介Blob是“Boot loader Object”的缩写,是一款嵌 入式linux引导程序,源代码开放,遵循GPL。 最初是Jan-Derk Bakker和ErikMouw针对 LART目标板而设计的,同其他开源代码一样, 很多人为blob的发展做出了自己的贡献。到现在 为止,blob已经支持多种cpu,包括sa1100, sa1110,pxa255,pxa270等,用户可以根据目 标板的特性进行定制。 blob功能它能

6、实现以下功能: 引导嵌入式linux,它可以把linux kernel、fs等 从flash中load到Ram中执行 命令行下在线更新kernel和fs。 命令行下可以直接对物理寻址空间进行查看和 修改。 Blob结构目录子目录包含内容 Doc相关说明文档IncludeBlob的头文件srcblobBlob下基本功能的代码 diagDIAG项目的源代码 lib针对一些外设的驱动代码和库函数 commandsBlob下的命令指令代码 toolsBuild存放构造脚本,用于自动运行 configure,创建各自平台的 makefile文件,自动配置各个平 台 utils存放脚本,可以批处理执行 a

7、utomake、aclocal、autoconf、 autoheader,产生configure、 config.h配置文件Blob相关资源 最新的源代码 http:/ /pxa270_linux/blob_ours/blob_xscale zmake f Makefile.cvs z./configure -host=arm-linux -with- board=mainstone with-linux-prefix= /pxa270_linux/linux/ -enable-xlli - enable-network zmake 生成的blob保存在/blob- xscale/src/bl

8、ob/ Blob - 烧写到目标板1. 正确连接JTAG下载线2. 烧写工具./Jflashmm-linux PXA270 blob p寻找PXA270.dat文件所指定的CPU,把 Blob烧写到这个CPU使用的Flash中。blob引导过程分析blob启动过程 zStage1:y基本的硬件初始化 y为加载stage2准备RAM空间 y拷贝stage2到RAM中 y设置堆栈指针sp y跳到stage2的入口点异常向量表地 址异 常异常中断模式优先级0x0000 0000复位管理模式(SVC)10x0000 0004未定义指令未定义指令中止模 式60x0000 0008软件中断管理模式(SVC

9、)60x0000 000C预取指中止(从存储器 取指出错)中止模式50x0000 0010数据中止(数据访问存 储器出错)中止模式20x0000 0014保留未使用0x0000 0018IRQ(IRQ)模式40x0000 001CFIQ(FIQ)模式3blob启动过程 zStage2: y清除BSS段 y设置堆栈指针sp y初始化本阶段要使用到的硬件设备 y检测系统的内存映射 y加载内核映像和文件系统映像 y调用内核blob代码分析重要文件 /src/blob/start.S 系统启动从这里开始,当系统上电后,CPU指针会 指在地址0X00000000(FLASH)上。 /src/blob/t

10、rampoline.S 这部分程序是汇编代码与C代码的结合点,通过这个 程序,把需要运行的C代码装载到内存中,设置堆栈 ,并把程序指针指向C代码实现的程序。 /src/blob/main.c 初始化Flash,设置网络IP,初始化串口,初始化 LED,初始化网络设备,准备BLOB命令,装载内核 映像,打印基本信息。 /src/blob/xlli/mainstone/start.s /src/blob/xlli/mainstone/xlli_LowLev_Init.s 这两个汇编程序主要实现硬件的基本初始化,比如 初始化GPIO,初始化内存,初始化CPU CLOCKblob移植Blob移植 定制

11、目标板在configure.in加入目标板定义board_name=“Intel HCDDBBVA0 (Mainstone)“ AC_DEFINE(MAINSTONE,1,Intel HCDDBBVA0 (Mainstone)BLOB_PLATFORM_OBJS=“mainstone.o“ BLOB_LED_DRIVER_OBJS=“led-mmap.o“ BLOB_LED_STARTCODE=“ledasm-mmap.o“ BLOB_FLASH_OBJS=“strata.o“ BLOB_NETWORK_DRIVER_OBJS=“ether-smc91x.o“DIAG_PLATFORM_OBJ

12、S=“mainstone.o“ use_cpu=“pxa270“use_lcd=“no“; Blob移植指定目标板对应的.h文件在include/blob/arch.h 中加入#elif defined MAINSTONE #include Blob移植 添加目标板依赖文件添加 include/blob/arch/mainstone.h src/blob/mainstone.c 当然如果自己写,那工作量太大了,可以根据目标 板的情况,找一个和它类似的板子,复制过来修改 。 在这里主要设置cpu速度、串口和它的波特率,各个 模块在flash和ram中的位置,CPU各个寄存器的设 置。其中,sdr

13、am的设置很重要,否则blob无法正 确load到ram中运行,GPIO也要小心设置,调整到 正确的工作模式和初始电平,否则可能板子无法正 确工作。 Blob移植在mainstone.h 和 mainstone.c 所 在目录的Makefile.am 中相应添加文 件 重新编译,重新configure,以添加“- with-board=mainstone” Blob 如何添加驱动程序如何在LCD上显示一个类似linux的logo? src/lib下建立lcd的源代码,编写驱动程序 。 在src/blob/initcall.c里添加lcd_init。 具体要在lcd上显示什么东西,就看在 lcd_init函数里如何编写了。如果要做到类 似linux启动logo那样的效果,那就要参考 linux是如何实现的了。 使用blobz常用命令Any Question?

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 中学教育 > 教学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号