欢迎来到三一文库! | 帮助中心 三一文库31doc.com 一个上传文档投稿赚钱的网站
三一文库
全部分类
  • 研究报告>
  • 工作总结>
  • 合同范本>
  • 心得体会>
  • 工作报告>
  • 党团相关>
  • 幼儿/小学教育>
  • 高等教育>
  • 经济/贸易/财会>
  • 建筑/环境>
  • 金融/证券>
  • 医学/心理学>
  • ImageVerifierCode 换一换
    首页 三一文库 > 资源分类 > PPT文档下载
     

    嵌入式系统BootLoaderP.ppt

    • 资源ID:2587809       资源大小:352.01KB        全文页数:30页
    • 资源格式: PPT        下载积分:6
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录 QQ登录   微博登录  
    二维码
    微信扫一扫登录
    下载资源需要6
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    嵌入式系统BootLoaderP.ppt

    嵌入式系统BootLoader,徐远超,BootLoader,Boot loader是与系统硬件环境高度相关的初始化软件,它担负着初始化硬件和引导操作系统的双重责任。 每一个特定系统的Boot loader都会有所不同。 Boot loader移植是在特定硬件平台上系统软件移植至关重要的一步,是引导操作系统和根文件系统的基础。 对了解嵌入式系统底层运行机制、优化和快速启动的研究都有重要的意义。,PC 机中的引导加载程序,两部分组成 BIOS(其本质就是一段固件程序) 位于硬盘 MBR 中的 OS Boot Loader(如LILO 和 GRUB 等) 流程 BIOS 在完成硬件检测和资源分配后,将硬盘 MBR 中的 Boot Loader 读到系统的 RAM 中,然后将控制权交给 OS Boot Loader Boot Loader 的主要运行任务就是将内核映象从硬盘上读到 RAM 中,然后跳转到内核的入口点去运行,即开始启动操作系统。,嵌入式系统中引导加载程序,系统的加载启动任务就完全由 Boot Loader 来完成 ARM7TDMI中,系统在上电或复位时从地址 0x00000000 处开始执行,这个地址是Boot Loader 程序 典型的嵌入式系统 boot loader Blob: boot loader object的缩写 开源,遵循GPL,很好的Linux loader,主要针对ARM U-boot:universal boot loader的缩写, 开源,遵循GPL,支持ARM,MIPS,X86,Nios等处理器 可启动VxWorks, QNX, Linux等多种操作系统,Boot Loader 的概念,在操作系统内核运行之前运行的一段小程序 功能 初始化硬件设备 建立内存空间的映射图 调整系统的软硬件环境,以便操作系统内核启动 不通用 依赖于硬件CPU 依赖于主板board 不同的CPU有不同的Boot Loader 有些 BootLoader 支持多CPU,如U-Boot支持ARM和MIPS,固态存储设备的典型空间分配结构,Boot Loader 的执行,第一条指令 地址 0x00000000 嵌入式系统通常有固态存储设备(比如:ROM、EEPROM 或 FLASH 等)被映射到这个预先安排的地址上 系统加电后,CPU 将首先执行 Boot Loader 程序,用来控制 Boot Loader 的设备或机制,主机和目标板之间一般通过串口建立连接 Boot Loader执行时通常会通过串口进行 I/O 如输出打印信息到串口,从串口读取用户控制字符等,BootLoader 与主机之间进行文件传输所用的通信设备及协议,通常Boot Loader 通过串口与主机之间进行文件传输 传输协议 通常是 xmodemymodemzmodem 协议中的一种 可通过以太网连接并借助 TFTP 协议来下载文件 串口传输的速度是有限的 主机提供 TFTP 服务,Boot Loader 的操作模式,启动加载模式 自主(Autonomous)模式 从目标机上的某个固态存储设备上将操作系统加载到RAM中运行 Boot Loader的正常工作模式 下载模式 通过串口连接或网络连接等通信手段从主机(Host)下载内核映像和根文件系统映像等。 从主机下载的文件通常首先被 Boot Loader 保存到目标机的 RAM 中,然后再被 BootLoader 写到目标机上的FLASH 类固态存储设备中。 第一次安装内核与根文件系统时或对其更新时使用 通常都会向它的终端用户提供一个简单的命令行接口,Boot Loader 的启动过程,从固态存储设备上启动Boot Loader大多都是 2 阶段 stage 1和 stage 2 BOOTLOADER一般分为2部分 stage 1:汇编部分,执行简单的硬件初始化 stage 2:C语言部分,负责复制数据,设置启动参数,串口通信等功能 BOOTLOADER的生命周期 1. 初始化硬件,如设置UART(至少设置一个),检测存储器等 2. 设置启动参数,告诉内核硬件的信息,如显示控制台LCD或串口、VGA等. 3. 跳转到操作系统的首地址. 4. 消亡,Boot Loader 的主要任务,stage1 通常包括以下步骤 基本硬件设备初始化 为加载 Boot Loader 的 stage2 准备 RAM 空间 拷贝 Boot Loader 的 stage2 到 RAM 空间中 设置好堆栈 跳转到 stage2 的 C 入口点 Boot Loader 的 stage2 通常包括以下步骤 初始化本阶段要使用到的硬件设备 检测系统内存映射(memory map) 将 kernel 和根文件系统映像从 flash 上读到 RAM 空间中 为内核设置启动参数 调用内核,stage1,基本的硬件初始化,目的 为 stage2 的执行以及随后的 kernel 的执行准备好一些基本的硬件环境 1 屏蔽所有的中断 为中断提供服务通常是 OS 设备驱动程序的责任,Boot Loader 的执行全过程中可以不必响应任何中断 中断屏蔽可以通过写 CPU 的中断屏蔽寄存器或状态寄存器(如 ARM 的 CPSR 寄存器)来完成 2 设置 CPU 的速度和时钟频率。 3 RAM 初始化 包括正确地设置系统的内存控制器的功能寄存器以及各内存库控制寄存器等。 4 初始化 LED 通过 GPIO 来驱动 LED,其目的是表明系统的状态是 OK 还是 Error 如板子上没有LED,那么也可以通过初始化 UART 向串口打印 Boot Loader 的 Logo 字符信息 5 关闭 CPU 内部指令数据 cache,为加载 stage2 准备 RAM 空间,通常把 stage2 加载到 RAM 空间中来执行 stage2 通常是 C 语言执行代码,考虑堆栈空间 空间大小最好是 memory page 大小(通常是 4KB)的倍数 一般1M RAM 空间已经足够,地址范围可以任意安排 如 blob 就将 stage2 可执行映像从系统 RAM 起始地址 0xc0200000 开始的 1M 空间内执行 stage2_endstage2_startstage2_size 对所安排的地址范围进行测试 必须确保所安排的地址范围可读写的 RAM 空间 测试方法可以采用类似于 blob 的方法 以 memory page 为被测试单位,测试每个 page 开始的两个字是否是可读写的,拷贝 stage2 到 RAM 中,拷贝时要确定两点 (1) stage2 的可执行映象在固态存储设备的存放起始地址和终止地址 (2) RAM 空间的起始地址。,设置堆栈指针 sp (trampoline.S中完成),通常把 sp 的值设置为(stage2_end-4) 1MB 的 RAM 空间的最顶端(堆栈向下生长) 在设置堆栈指针 sp 之前,也可以关闭 led 灯,以提示用户我们准备跳转到 stage2,跳转到 stage2 的 C 入口点,可以跳转到 Boot Loader 的 stage2 去执行 如在 ARM系统中,这可以通过修改 PC 寄存器为合适的地址来实现,Stage2,stage2 的代码通常用 C 语言来实现,代码可读性和可移植性 不能使用 glibc 库中的任何支持函数 Why? trampoline(弹簧床)编程方式 用汇编语言写一段trampoline 小程序,并将这段 trampoline 小程序来作为 stage2 可执行映象的执行入口点 在 trampoline 汇编小程序中用 CPU 跳转指令跳入 main() 函数中去执行 当main() 函数返回时,CPU 执行路径显然再次回到我们的 trampoline 程序。 用 trampoline 小程序来作为 main() 函数的外部包裹(exter nal wrapper) Why not use main directly 1)无法传递函数参数;2)无法处理函数返回,blob 的trampoline 程序示例,.text .globl _trampoline _trampoline: bl main /* if main ever returns we just call it again */ b _trampoline,Stage2,初始化本阶段要使用到的硬件设备,1初始化至少一个串口,以便终端用户进行 I/O 输出信息 2初始化计时器等 在初始化这些设备之前,也可以重新把 LED 灯点亮,以表明我们已经进入main() 函数执行 设备初始化完成后,可以输出一些打印信息,程序名字字符串、版本号等,检测系统的内存映射(memory map),在 4GB 物理地址空间中哪些地址范围被分配用来寻址系统的RAM 单元 在Samsung S3C44B0X 中,从0x0c00,0000 (192M)到 0x1000,0000(256M) 之间的 64M 地址空间被用作系统的 RAM 地址空间 嵌入式系统往往只把 CPU 预留的全部 RAM 地址空间中的一部分映射到 RAM 单元上,而让剩下的那部分预留 RAM 地址空间处于未使用状态 Boot Loader 的 stage2 必须检测整个系统的内存映射情况 必须知道 CPU 预留的全部 RAM 地址空间中的哪些被真正映射到 RAM 地址单元,哪些是处于 “unused“ 状态的,加载内核映像和根文件系统映像,1 规划内存占用的布局 内核映像所占用的内存范围 根文件系统所占用的内存范围 2 从Flash上拷贝,内存布局,flash布局,include/blob/arch/mba44b0.h,37 #define SDRAMSIZE (8) 38 39 /* the base address were BLOB is loaded by the first stage loader */ 40 #define BLOB_ABS_BASE_ADDR (0x0c200400) 41 42 /* where do various parts live in RAM */ 43 #define BLOB_RAM_BASE (0x0c100000) 44 #define KERNEL_RAM_BASE (0x0c300000) 45 #define PARAM_RAM_BASE (0x0c110000) 46 #define RAMDISK_RAM_BASE (0x0c400000) 47 48 /* and where do they live in flash */ 49 #define BLOB_FLASH_BASE (0x00000000) 50 #define BLOB_FLASH_LEN (60 * 1024) 51 #define PARAM_FLASH_BASE (BLOB_FLASH_BASE + BLOB_FLASH_LEN) 52 #define PARAM_FLASH_LEN (4 * 1024) 53 #define KERNEL_FLASH_BASE (PARAM_FLASH_BASE + PARAM_FLASH_LEN) 54 #define KERNEL_FLASH_LEN (704 * 1024) 55 #define RAMDISK_FLASH_BASE (KERNEL_FLASH_BASE + KERNEL_FLASH_LEN) 56 #define RAMDISK_FLASH_LEN (1280 * 1024) 57 58 /* the position of the kernel boot parameters */ 59 #define BOOT_PARAMS (0x0c000100),设置内核的启动参数,Linux 2.4.x 以后的内核都期望以标记列表(tagged list)的形式来传递启动参数 启动参数标记列表以标记 ATAG_CORE 开始,以标记 ATAG_NONE 结束 每个标记由标识被传递参数的 tag_header 结构以及随后的参数值数据结构来组成 在嵌入式 Linux 系统中,通常需要由 Boot Loader 设置的常见启动参数有:ATAG_CORE、 ATAG_MEM、ATAG_CMDLINE、ATAG_RAMDISK、ATAG_INITRD等,调用内核,直接跳转到内核的第一条指令处 在跳转时,下列条件要满足 1 CPU 寄存器的设置 R00;R1机器类型 ID;R2启动参数标记列表在 RAM 中起始基地址 2 CPU 模式 必须禁止中断(IRQs和FIQs); CPU 必须 SVC 模式; 3 Cache 和 MMU 的设置 MMU 必须关闭; 指令 Cache 可以打开也可以关闭; 数据 Cache 必须关闭,串口终端,调试手段:打印信息到串口终端 串口终端显示乱码或根本没有显示 (1) boot loader 对串口的初始化设置不正确。 (2) 运行在 host 端的终端仿真程序对串口的设置不正确,这包括:波特率、奇偶校验、数据位和停止位等方面的设置,BLOB移植需要修改的文件,详见4.3节,Blob编译与下载实验,详见4.4节,U-boot,德国DENX软件工程中心的Wolfgang Denk 全称Universal Boot Loader 开放源码项目 http:/sourceforge.net/projects/U-Boot 从FADSROM、8xxROM 、PPCBOOT逐步发展演化而来 其源码目录、编译形式与Linux内核很相似 支持 嵌入式Linux/NetBSD/VxWorks/QNX/RTEMS/ARTOS/LynxOS PowerPC、MIPS、x86、ARM 、Nios、XScale等处理器,功能,

    注意事项

    本文(嵌入式系统BootLoaderP.ppt)为本站会员(本田雅阁)主动上传,三一文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一文库(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    经营许可证编号:宁ICP备18001539号-1

    三一文库
    收起
    展开