Uboot2016 for tiny4412调试

本文介绍了在Tiny4412开发板上对UBoot2016的调试过程,包括从crt0.S的_main开始的代码分析,通过反汇编理解执行流程。调试过程中涉及了串口初始化、时钟频率设置、DRAM初始化和SD卡布局调整。在解决UART初始化问题时,发现时钟配置不正确,并通过修改board_clock_init()函数修复。同时,详细讲述了如何将UBoot拷贝到DRAM并运行,以及针对DRAM大小识别错误的临时解决方案。
摘要由CSDN通过智能技术生成

 前面已经添加了点灯代码了,那就让我们开始调试吧。

 前面添加点灯代码的时候我们就知道,代码是能够成功运行到crt0.S中的_main的,那我们就可以直接从crt0.S中开始分析了。分析前大家可以花点时间看看crt0.S文件最上面的注释,看完应该就对_main所做的事情有所了解了。另外,我们还可以通过指令arm-none-eabi-objdump -S ./spl/u-boot-spl > u-boot-spl.S 将./spl/u-boot-spl这个可执行文件反汇编,这样就可以通过反汇编代码了解uboot真正的执行流程了。

 先看下面的反汇编代码:

02024af0 <_main>:
 */
#if defined(CONFIG_SPL_BUILD) && defined(CONFIG_SPL_STACK)
    ldr sp, =(CONFIG_SPL_STACK)
#else
    ldr sp, =(CONFIG_SYS_INIT_SP_ADDR)
 2024af0:   e3a0d781    mov sp, #33816576   ; 0x2040000
#if defined(CONFIG_CPU_V7M) /* v7M forbids using SP as BIC destination */
    mov r3, sp
    bic r3, r3, #7
    mov sp, r3
#else
    bic sp, sp, #7  /* 8-byte alignment for ABI compliance */
 2024af4:   e3cdd007    bic sp, sp, #7
#endif
    mov r0, sp
 2024af8:   e1a0000d    mov r0, sp
    bl  board_init_f_alloc_reserve
 2024afc:   eb000004    bl  2024b14 <board_init_f_alloc_reserve>
    mov sp, r0
 2024b00:   e1a0d000    mov sp, r0
    /* set up gd here, outside any C code */
    mov r9, r0
 2024b04:   e1a09000    mov r9, r0
    bl  board_init_f_init_reserve
 2024b08:   eb000004    bl  2024b20 <board_init_f_init_reserve>
    mov r0, #0
 2024b0c:   e3a00000    mov r0, #0
    bl  board_init_f
 2024b10:   ebffff5e    bl  2024890 <board_init_f>

可以看到,在_main中,会对全局变量和栈进行初始化,其中 board_init_f_alloc_reserve 和 board_init_f_init_reserve 这两个函数的代码较少,大家看注释也可了解它们具体做了什么事情。接下来我们重点分析board_init_f这个函数。board_init_f在/arch/arm/mach-exynos/spl_boot.c中实现


                
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值