linux uboot 启动顺序

本文详细介绍了Linux U-Boot的启动流程,分为两个阶段:第一阶段是硬件初始化和代码重定位;第二阶段执行系统初始化,包括处理器、板级配置、中断、环境变量、内存等初始化,并进入主循环处理用户命令。U-Boot提供了go和bootm命令来引导内核启动,其中go命令直接跳转执行,bootm命令支持解压和加载各种操作系统映像。
摘要由CSDN通过智能技术生成

U-Boot启动过程

(国嵌)

 bootloader 除了依赖CPU,还依赖板级设备的配置,例如板卡的硬件地址分配,外设硬件芯片的类型。不同的板子需修改
bootloader。阶段1:硬件初始化,为加载bootloader的二阶段准备RAM空间,拷贝2阶段代码到内存,设置好堆栈,跳到2阶
段,初始化本阶段要的设备,将内核和根文件从flash中拷贝到RAM中,最后调用内核。


开发板上电后,执行U-Boot的第一条指令,然后顺序执行U-Boot启动函数。看一下board/smdk2410/u-boot.lds这个链接脚本,可以知道目标程序的各部分链接顺序。第一个要链接的是cpu/arm920t/start.o,那么U-Boot的入口指令一定位于这个程序中。下面分两阶段介绍启动流程:

        

第一阶段

.globl _start
_start: b reset  //复位向量,这里使用b指令转移到“子程序名”处开始执行
ldr pc, _undefined_instruction
ldr pc, _software_interrupt
ldr pc, _prefetch_abort
ldr pc, _data_abort
ldr pc, _not_used
ldr pc, _irq
ldr pc, _fiq


_undefined_instruction:
.word undefined_instruction//未定义指令异常  
_software_interrupt:
.word software_interrupt //软中断异常
_prefetch_abort:
.word prefetch_abort//取指令异常
_data_abort:
.word data_abort//数据中止异常
_not_used:
.word not_used  
_irq:  //外部中断
.word irq
_fiq://快速中断
.word fiq
_pad:
.word 0x12345678 /* no
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值