uboot的分析

入口

~/linux/uboot/u-boot-2013.04-rc1/arch/arm/cpu/arm1176$ 

start.S (汇编语言)

1,复位

.globl _start
_start: b reset

b是跳转指令 32M的空间

bl是带返回的跳转指令

bx带状态切换的跳转指令

blx带返回带状态切换


/*
 * the actual reset code
 */


reset:
/*
* set the cpu to SVC32 mode
*/
mrs r0, cpsr
bic r0, r0, #0x3f
orr r0, r0, #0xd3
msr cpsr, r0

一上电先复位

mrs : 将cpsr状态寄存器的值取出来,给r0

bic : 清除需要的位为0 0011 1111,清除第六位为0

orr (或) : 1101 0011 

msr : 将r0的值给cpsr(低8位) = 1101 0011


cpsr,当前程序状态寄存器 Current Program Status Register

  7  6  5  4  3  2  1  0
  I  F  T  M4 M3 M2 M1 M0
  
 I = 1,禁止IRQ中断  
 F = 1,禁止FIQ中断
 T = 1,则是执行ARM指令;如果T = 0,Thumb指令
 M[4:0]  = 0x13 管理模式


2,cpu_init_crit:

/*
* flush v4 I/D caches
*/
mov  r0, #0
mcr p15, 0, r0, c7, c7, 0/* flush v3/v4 cache */ 将v3/v4cache失效
mcr p15, 0, r0, c8, c7, 0/* flush v4 TLB */

mcr 

从ARM寄存器中将数据传送到协处理器p15中。
    r0                    c7,c7


3,外设基地址的初始化

#ifdef CONFIG_PERIPORT_REMAP
/* Peri port setup */
ldr r0, =CONFIG_PERIPORT_BASE
orr r0, r0, #CONFIG_PERIPORT_SIZE
mcr p15,0,r0,c15,c2,4
#endif


4,返回跳跃

bl lowlevel_init/* go setup pll,mux,memory */

~/linux/uboot/u-boot-2013.04-rc1/board/samsung/smdk6400$ lowlevel_init.S 

lowlevel_init:
        mov     r12, lr

a)gpio 配置led

/* LED on only #8 */
        ldr     r0, =ELFIN_GPIO_BASE
        ldr     r1, =0x55540000
        str     r1, [r0, #GPNCON_OFFSET]

        ldr     r1, =0x55555555
        str     r1, [r0, #GPNPUD_OFFSET]

        ldr     r1, =0xf000
        str     r1, [r0, #GPNDAT_OFFSET]


OK6410  GPM0——GPM3这4个GPIO作为LED

#define ELFIN_GPIO_BASE 0x7f008000
#define GPMCON_OFFSET 0x820

r0 = 0x7f008000 + 0x820  = 0x7f00 8820
r1 = 0x 0000 1111 (hex进位)

#define GPMPUD_OFFSET 0x828   

r0 = 0x7f008000 + 0x820  = 0x7f00 8828

0101 0101
r0 = 0x0000 0055


b) 配置watchdog

/* Disable Watchdog */
        ldr     r0, =0x7e000000         @0x7e004000
        orr     r0, r0, #0x4000          r0 = 0x7e00_4000
        mov     r1, #0   
        str     r1, [r0]

        1:看门狗定时器超时,发出复位信号
        0:禁止看门狗定时器的复位功能


c) 系统中断


d) bl system_clock_init

system_clock_init   系统时钟初始化
//6400
#if 0
        ldr     r1, =0x200203
#endif
//6410
        ldr     r1, = 0x80200203

PLL(锁相环)APLL、MPLL、EPLL

APLL : cpu

MPLL :  外围ddr

EPLL : 外围uart


e) bl uart_asm_init

#ifndef CONFIG_NAND_SPL
/* for UART */
bl uart_asm_init
#endif


#ifndef CONFIG_NAND_SPL
/*
 * uart_asm_init: Initialize UART's pins
 */
uart_asm_init:
/* set GPIO to enable UART */
ldr r0, =ELFIN_GPIO_BASE
ldr r1, =0x220022
str r1, [r0, #GPACON_OFFSET]
mov pc, lr
#endif



f)bl nand_asm_init

#ifdef CONFIG_BOOT_NAND
/* simple init for NAND */
bl nand_asm_init
#endif

#ifdef CONFIG_BOOT_NAND
/*
 * NAND Interface init for SMDK6400
 */
nand_asm_init:
ldr r0, =ELFIN_NAND_BASE
ldr r1, [r0, #NFCONF_OFFSET]
orr r1, r1, #0x70
orr r1, r1, #0x7700
str r1, [r0, #NFCONF_OFFSET]

ldr r1, [r0, #NFCONT_OFFSET]
orr r1, r1, #0x07
str r1, [r0, #NFCONT_OFFSET]

mov pc, lr
#endif


g)内存初始化
mem_ctrl_asm_init
《嵌入式Linux学习手册》P65 

bl mem_ctrl_asm_init

~/linux/uboot/u-boot-2013.04-rc1/arch/arm/cpu/arm1176/s3c64xx$  cpu_init.S


#include <config.h>
#include <asm/arch/s3c6400.h>

.globl mem_ctrl_asm_init
mem_ctrl_asm_init:
/* DMC1 base address 0x7e001000 */


h)复位操作

ldr r0, =(ELFIN_CLOCK_POWER_BASE + RST_STAT_OFFSET)
ldr r1, [r0]
bic r1, r1, #0xfffffff7
cmp r1, #0x8
beq wakeup_reset

/* Wakeup support. Don't know if it's going to be used, untested. */
        ldr     r0, =(ELFIN_CLOCK_POWER_BASE + RST_STAT_OFFSET)
        ldr     r1, [r0]
        bic     r1, r1, #0xfffffff7
        cmp     r1, #0x8
        beq     wakeup_reset    


lowlevel_init.S 结束,返回到


5.bl _main

main函数

~/linux/uboot/u-boot-2013.04-rc1/arch/arm/lib$ crt0.S
crt0.S

堆栈初始化

board_init_f()函数
清空gd指向的结构体、填充结构体

board_init_r()函数 《嵌入式Linux学习手册》P66


main_loop()函数  U-boot启动管理函数


但是



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值