u-bot1.1.6源码详解.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文档。上传文档
查看更多
u-bot1.1.6源码详解

u-boot1.1.6源码详解 u-boot是一种bootloader。在介绍uboot之前,先来说一说什么是bootloader。我们知道在系统上电后必须要有一段程序来对系统硬件进行初始化,如:关闭看门狗、设置系统时钟、关闭系统中断(bootloader可不需要中断,不搞那么复杂)初始化存储控制器,使内存可用、将执行代码复制到内存中等。那么这一段代码就叫bootloader。 1、u-boot功能 对于包含操作系统的嵌入式系统其bootload的功能就不止如此了。它还必须具备:引导操作系统内核、解压操作系统镜像文件的功能,为了方便调试它还因该具备串口输出调试信息、下载固化代码的功能。至此我们可以总结出bootloader到底都干了些什么: 1、初始化系统硬件; 2、解压、引导操作系统内核; 3、下载固化代码; 4、输出调试信息。 bootloader涉及到大量的对底层硬件寄存器的操作,所以它的实现非常依赖开发板具体硬件,如cpu芯片架构及具体型号、外设芯片的具体型号、引导的操作系统。所以写出一个通用的bootloader是不可能的,只能要求bootloader尽量多的支持各种架构、各种型号的cpu、各外设芯片、各种类型的操作系统,在此基础上再针对具体情况进行移植。U-boot满足了这样的要求。 2、u-boot源码结构 U-Boot不仅仅支持嵌入式Linux系统的引导,当前,它还支持NetBSD, VxWorks, QNX, RTEMS, ARTOS, LynxOS嵌入式操作系统。 U-Boot除了支持ARM系列的处理器外,还能支持PowerPC、MIPS、 x86、ARM、NIOS、XScale等诸多常用系列的处理器。它还支持大量的外设芯片设备驱动,如:串口、以太网、SDRAM、FLASH、LCD、NVRAM、EEPROM、RTC、键盘。下图是u-boot 2009.08的目录结构: Board:目标板相关文件,   Common:独立于处理器体系结构的通用代码,封装了绝大部分用户命令实现代码,u-boot命令实现代码在这个文件夹内;   Cpu:与处理器平台相关的文件。如arm920t子目录下包含了ARM920T芯片的串口、网口、LCD驱动及中断初始化等文件;   Driver:通用设备驱动,如CFI FLASH驱动(目前对INTEL FLASH支持较好)   Doc:U-Boot的说明文档;   Examples:可在U-Boot下运行的示例程序;如hello_world.c,timer.c;   Include:U-Boot头文件;尤其configs子目录下与目标板相关的配置头文件是移植过程中经常要修改的文件;   lib_xxx:处理器体系相关的文件,如lib_ppc, lib_arm目录分别包含与PowerPC、ARM体系结构相关的文件;   net:与网络功能相关的文件目录,如bootp,nfs,tftp;   post:上电自检文件目录。尚有待于进一步完善;   rtc:RTC驱动程序;   tools:包含了用于生成U-Boot S-RECORD、BIN、uImage等镜像文件的工具; 3、u-boot的两个执行阶段 目前大多数的bootloader的执行过程分为两个阶段,u-boot也不例外。 第一阶段(stage 1)是依赖于CPU体系结构的代码(如设备初始化代码等),一般用汇编语言来实现。主要进行以下方面的设置: 1)设置ARM处理器进入SVC32模式; 2)禁止IRQ和FIQ; 3)关闭看门狗; 4)屏蔽所有中断; 5)设置时钟(FCLK,HCLK,PCLK)分频系数,倍频系数在该阶段并未设置; 6)配置内存控制器、为搬运代码做准备; 7)搬移uboot镜像到RAM中(该阶段u-boot仅支持从norflash复制代码到内存中) 8)分配堆和栈; 9)清空I/D cache、 10)禁止MMU和cache、 11)清空bss段, 12)调用第二阶段实现函数。 第二阶段(stage 2)通常用C语言来实现。一系列初始化(cpu, 板卡,中断,串口,控制台等),开启I/D cache。初始化FLASH,根据系统配置执行其他初始化操作。打印LOG,使能中断,获取环境变量,初始化网卡。最后进入main_loop()函数。在main_loop函数中会检查bootdelay和bootcmd环境变量,如果bootcmd已经设置过,则在等待bootdelay个毫秒后会自动执行bootcmd,引导操作系统内核。如果等待过程中被用户中断(ctl+c)或者bootcmd没有设置,则会等待用户输入命令。 3.1 第一阶段代码

文档评论(0)

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

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

1亿VIP精品文档

相关文档