- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
 - 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
 - 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
 - 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
 - 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
 - 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
 - 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
 
                        查看更多
                        
                    
                
U-BOOT 
	
	作者:陈颖
	邮箱:chxxxyg@163.com
	博客: /
	目录
一  U-BOOT目录结构	1
二  U-BOOT的启动与内核引导	3
1、U-BOOT的启动分析	3
1.1设置异常向量表	3
1.2 U-BOOT的存储映射	4
1.3 硬件设备的初始化	5
1.4 硬件平台前期初始化	9
1.5代码重定位	13
1.6 硬件平台后期初始化	16
2、内核引导	20
2.1 u-boot命令实现原理	20
2.2内核引导	24
三  U-BOOT编译流程分析	35
1、U-BOOT编译命令	35
2、U-BOOT配置流程	35
2.1环境初始化	35
2.2 make smdk2410_config命令的执行过程	38
2.3 make smdk2410命令的执行过程	42
2.4 U-BOOT的编译流程	43
U-BOOT原理分析
一  U-BOOT目录结构
api
api目录对应于一些扩展应用的独立的api
arch
arch存放与CPU架构有关的目录,下面每一个目录就代表一种架构的CPU
board
board目录是与硬件平台相关的目录,特定于某种硬件平台的文件以子目录的形式存放在该目录下
common
common目录存放了u-boot所支持的所有命令
disk
disk目录存放了磁盘驱动和相关的代码
doc
doc目录存放了u-boot的参考文档
drivers
u-boot支持的所有驱动都存放在driver目录下,这些驱动大都根据linux驱动改写而来
dts
dts目录包含一个平台设备树相关的makefile,可编译生成设备树镜像文件
examples
example下时一些在u-boot上运行的事例程序
fs
fs目录下是u-boot所支持的文件系统
include
include目录包含了u-boot的头文件以及各种硬件平台的系统配置文件
lib
lib目录下是u-boot的库文件
nand_spl
支持从nand flash启动的相关代码
net
u-boot的网络子系统
onenand_ipl
支持从onenand 启动的代码
post
Post下是支持上电自检功能的目录
spl
与nand_spl相关的makefile,编译支持从nand flash启动的u-boot二进制文件
tools
tools目录下是u-boot的一些辅助工具,比如生成u-boot镜像文件等
二  U-BOOT的启动与内核引导
1、U-BOOT的启动分析
u-boot支持多种架构类型的cpu,支持多种硬件平台,本文以smdk2410为例来讲解u-boot的功能原理。
u-boot的入口在文件在arch/arm/cpu/arm920t/start.S中,因为在文件在链接文件arch/arm/cpu/u-boot.lds中被第一个链接,如下:
OUTPUT_FORMAT(elf32-littlearm, elf32-littlearm, elf32-littlearm)
OUTPUT_ARCH(arm)
ENTRY(_start)
SECTIONS
{
        . = 0
        . = ALIGN(4);
        .text :
        {
              __image_copy_start = .;
              CPUDIR/start.o (.text)  //start.o对应源代码就是start.S
              *(.text)
        }
…………
1.1设置异常向量表
.globl _start
_start: b       start_code  //复位 
        ldr     pc, _undefined_instruction  //未定义指令向量
        ldr     pc, _software_interrupt  //软件中断向量  
        ldr     pc, _prefetch_abort  //预取指令异常向量 
        ldr     pc, _data_abort  //数据操作异常向量 
        ldr     pc, _not_used  //未使用  
        ldr     pc, _irq   //irq中断向量 
        ldr     pc, _fiq  // fiq中断向量 
_undefined_instruction: .word undefined_instruction
_software_interrupt:    .word software_interrupt
                
原创力文档
                        

文档评论(0)