啟动代码与bootloader的区别.docxVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
啟动代码与bootloader的区别

???我主要遇到了这样一个问题,启动代码和Bootloader的区别以及它们在ARM上运行操作系统和不运行操作系统(只有用户程序)的关系。 启动代码是Bootloader,但不能说Bootloader是启动代码。当然这也不是绝对的,只在某些情况下可以这么说。 启动代码是指CPU复位后到main函数之前需要执行的汇编代码。需要这段代码是为了给C语言程序准备好堆栈空间,中断入口和外部数据等。而且这段汇编代码可以直接对硬件进行操作,效率很高。 Bootloader就是在操作系统内核运行之前的一小段程序,通过这段小程序,可以初始化硬件设备、建立内存空间的映射图,从而将系统的软硬件环境带到一个合适的状态,以便为调用操作系统内核、运行用户应用程序准备好正确的环境。嵌入式系统建立一个通用、标准的Bootloader是非常困难的。Bootloader也依赖于具体的嵌入式板级设备的配置,这也就是说,对于两块不同的嵌入式主板而言,即使它们是基于同一?CPU?而构建,要想让运行在一块板子上的?Bootloader?程序也能运行在另一块板子上,通常都需要修改?Bootloader?的源程序。 ? 启动代码内容流程: 1.?启动代码的第一步是设置中断和异常向量。 ????2.?完成系统启动所必须的最小配置,某些处理器芯片包含一个或几个全局寄存器,这些寄存器必须在系统启动的最初进行配置。 ????3.?设置看门狗,用户设计的部分外围电路如果必须在系统启动时初始化,就可以放在这一步。 ????4.?配置系统所使用的存储器,包括Flash,SRAM和DRAM等,并为他们分配地址空间。如果系统使用了DRAM或其它外设,就需要设置相关的寄存器,以确定其刷新频率,数据总线宽度等信息,初始化存储器系统。有些芯片可通过寄存器编程初始化存储器系统,而对于较复杂系统通常集成有MMU来管理内存空间。 ????5.?为处理器的每个工作模式设置栈指针,ARM处理器有多种工作模式,每种工作模式都需要设置单独的栈空间。 ????6.?变量初始化,这里的变量指的是在软件中定义的已经赋好初值的全局变量,启动过程中需要将这部分变量从只读区域,也就是Flash拷贝到读写区域中,因为这部分变量的值在软件运行时有可能重新赋值。还有一种变量不需要处理,就是已经赋好初值的静态全局变量,这部分变量在软件运行过程中不会改变,因此可以直接固化在只读的Flash或EEPROM中。 ????7.?数据区准备,对于软件中所有未赋初值的全局变量,启动过程中需要将这部分变量所在区域全部清零。 ????8.?最后一步是调用高级语言入口函数,比如main函数等。 摘要:本文总结了基于S3C44B0X芯片的Bootloader代码设计的一般流程,具体说明了Bootloader完成的主要任务,实现方法和地址重映射的概念;给出了S3C44B0X在基于uCLinux操作系统的嵌入式应用中,Bootloader的引导过程及关键技术和代码,有着很好的借鉴价值。? 关键词: 嵌入式系统??Bootloader代码??地址重映射??S3C44B0X??uCLinux? ? 1 引言 近年来,ARM在嵌入式设备中的应用越来越广泛。S3C44B0X就是Samsung公司生产的基于ARM7架构的微处理器。uCLinux是专门为无MMU处理器设计的嵌入式操作系统,支持ARM、Motorola等处理器。采用ARM+uCLinux作为嵌入式开发平台,吸取了两者优点,是一种比较流行的开发方式。在ARM程序设计中,启动代码是至关重要的,它不仅初始化硬件系统本身,而且最终引导进入操作系统,所以启动代码的设计直接影响整个开发的正常进行。本文结合S3C44B0X的特点详细给出了Bootloader设计和启动过程。 2 BootLoader代码 ? ? Bootloader代码是芯片复位后进入操作系统之前执行的一段代码,主要是为操作系统提供基本的运行环境,由它最终将操作系统启动起来并将控制权交给操作系统内核。 Bootloader代码由汇编代码和C代码两部分组成。由于资源有限,Bootloader、uCLinux内核映象、文件系统(Ramdisk压缩映象)通常都是固化在Flash中的。在S3C44B0X架构的嵌入式系统中,为了保证上电或复位时正常运行,Bootloader必须存放在Flash(0x0-0x400000, 4M)中的0x0处,则在硬件设计中把Flash接在CPU的nGCS0处[1]。上电后Bootloader首先完成存储器、堆栈、寄存器、全局变量和基本硬件模块的初始化,这由汇编代码完成,然后将操作系统内核与文件系统调入SDRAM(0x0c000000-0x0c800000,8M)中,并将PC指针指向操作系统内核的入口处,为操作系统的运行作好

文档评论(0)

sdgr + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档