(Bootloader就是启动加载程序的意思.docVIP

  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就是启动加载程序的意思,uClinux启动离不开引导程序。Bootloader是在操作系统运行之前执行的一段自举程序。通过这段小程序,用以初始化硬件设备、改变处理器运行模式、重组中断向量表和建立内存空间的映射表,从而建立适当的系统软硬件环境,为最终调用操作系统内核做好准备。 ? U-Boot全称Das U-Boot-universal bootloader,是由DENX SoftwareEngineering的Wolfgang Denk维护一种通用的Bootloader。U-Boot被认为是功能最多、最具弹性以及开发最积极的开放源码bootloader,可以方便地移植到各种硬件平台上。 Blackfin uClinux网站上提供了U-Boot在Blackfin上的移植。(/gf/project/u-boot/)。笔者从其网站上下载了u-boot-1.1.6-2008R1.5.tar.bz2的源码,并将其复制到/home/uclinux/bootldr目录,使用TAR命令将其解压到u-boot-1.1.6-2008R1.5文件夹(下文简称u-boot-1.1.6)。 在开始移植前请参考Blackfin Linux Docs章节的bootloader部分。该手册介绍的针对Blackfin移植的一般步骤。为了对硬件底层寄存器进行设置,还需要参考Blackfin的Hardware Reference Manual(可在ADI公司网站下载,笔者下载的是3.4版本,下文引用页码以这个版本为准)。针对特定版本的U-Boot,Readme文档也许是最好的参考资料,它位于u-boot源码文件夹下。U-Boot的官方网站也提供非常详尽的文档资料(http://www.denx.de/wiki/U-Boot/Documentation)。 U-Boot代码一般分为stage1和stage2两大部分、stage1依赖于CPU体系结构如设备初始化代码,常用汇编语言编写已达到短小精悍,提高系统运行效率的目的。它主要包括在u-boot-1.1.6/cpu/blackfin文件夹中的Start.s和Start1.s文件。Stage1的入口函数从Start.s开始,通常开始包含以下步骤: (1) 基本硬件初始化,为随后执行kernel准备好基本的硬件环境。包括:屏蔽所有中断,引导装载程序的执行过程中不必执行任何中断,中断屏蔽可通过写cpu的终端屏蔽寄存器或状态寄存器实现;设置CPU速度和时钟频率,初始化pll;RAM初始化,初始化内存控制器的各个寄存器;初始化UART,向串口打印U-Boot的字符信息;关闭cpu内部指令,数据cache。 (2) 为加载U-Boot的stage2准备RAM空间,通常stage2置于整个RAM空间的最顶层1MB空间。 (3) 拷贝U-Boot的stage2到RAM。判断是否是FLASH运行,如果是就将stage2的代码拷贝至TEXT BASE处。将stage2安排到RAM空间的最顶层1MB是推荐的方法。 (4) 设置堆栈指针sp,为C语言代码执行做好准备。 (5) 跳转至cpu_init_f(在cpu.c文件中)的C语言代码入口点。 此阶段的程序流程图如下: “在start.s的最后,CPU初始化已经完成,需要进入第二阶段的执行。它会将_cpu_init_f函数指针写入到INT15的向量表中,然后用raise 15进入下一阶段的运行,这是因为CPU复位之后处于RESET中断的状态,这是优先级很高的一个中断,在这种情况下,虽然可以对CPU进行完全的操作(Supervisor mode),但是却无法响应其它的中断请求。因此start.s将自身跳到中断15再运行,这样同时可以响应其它的中断,CPU也仍然处在Supervisor mode,可以进行完整的控制。” Stage2主要包括lib-Blackfin/board.c 和cpu.c中cpu_init_f、board_init_f函数以及common/main.c中的main_loop函数。按照初始化顺序如下: (1) 初始化中断、串口、RTC、定时器等 (2) 初始化Flash。 (3) 初始化用以动态分配heap的内存 (4) 初始化SPI、NAND FLASH。 (5) 初始化MAC Address、IP Address (6) 设备初始化。 (7) 进入 mainloop() 函数循环。 主要设备初始化完成后,需要启动控制台,即命令行模式。由mainloop()函数解析输入命令、执行命令、输出信息。在默认情况下,mainloop()会等待bootcmd环境变量说设定的自动运行的命令(比如setenv bootcmd bootm 0x2000 0000),引

文档评论(0)

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

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

1亿VIP精品文档

相关文档