• [国嵌笔记][030][U-Boot工作流程分析]


    uboot工作流程分析

    程序入口

    1.打开顶层目录的Makefile,找到目标smdk2440_config的命令中的第三项(smdk2440)

    2.进入目录board/samsung/smdk2440/,找到u-boot.lds文件。uboot的链接都是由这个链接器脚本来控制的

    3.打开u-boot.lds文件,找到.text(代码段)的第一个文件cup/s3c24xx/start.o,该文件就是uboot的入口代码。链接器脚本中的ENTRY用来表明整个程序的入口,那么标号_start就是整个程序的入口

    4.第一阶段入口在cup/s3c24xx/start.S文件的_start处

    5.第二阶段入口在lib_arm/board.c文件的start_armboot处

     

    第一阶段(BL1)代码分析

    1.打开source insight工程,并打开start.S文件,[shift]+F8高亮显示

    2.分析代码是只关心做了什么,不关怎么做。可以通过注释找到做了什么。边分析边通过思维导图记录下来。

     

    3.通过make smdk2440_config执行相应的配置项

    4.执行make,编译uboot。在顶层目录下会产生u-boot(elf)文件和u-boot.bin(二进制)文件

    5.通过反汇编u-boot(elf)文件可以查看相关信息

    arm-linux-objdump -D -S u-boot >dump

    搜索start_armboot可以找到start_armboot的地址为0x30001100, 在内存中。说明在这个时候BL1会跳转到内存中执行BL2

    6.打开顶层目录下的config.mk文件,config.mk文件会由Makefile 包含进去。搜索TEXT_BASE(代码段的基地址),会找到 -T(LDSCRIPT) -Ttext $(TEXT_BASE) 表示指定链接器脚本的地址由TEXT_BASE覆盖掉。TEXT_BASE变量在boot/samsung/smdk2440/config.mk文件中定义,该值为0x30000000

    7.b指令相对跳转,只会在SteppingStone中跳转,不会跳转到内存中。ldr pc, start_armboot会修改pc指针的值,使跳转到内存中运行

     

    8.2440、6410和210的第二阶段执行的代码都相同

    9.2440和6410的BL1和BL2产生的是一个bin文件,210的BL1和BL2产生的是两个bin文件

    10.210的BL1的链接脚本位于spl/u-boot-spl.lds。入口程序在arch/arm/cpu/armv7/start.S

    11.BL1会把BL2复制到内存中的0x23E00000处。BL1(16KB)与BL2之间有8KB的填空,所以BL2的地址在BL1后24KB处

    12.210的BL2的链接器脚本位于arch/arm/cpu/armv7/u-boot.lds。程序入口同样在arch/arm/cpu/armv7/start.S中

     

     

     

    2440第一阶段启动流程分析

    1.设置中断向量表

    2.设置处理器为svc模式

    3.刷新I/D cache

    4.关闭mmu和cache

    5.关闭看门狗

    6.关闭所有中断

    7.初始化时钟

    8.初始化串口

    9.简单初始化nand flash

    10.内存初始化

    11.复制nand flash中的bl2到内存中

    12.设置堆栈,为C语言做准备

    13.清除bss段

    14.跳转到BL2

     

    2440第二阶段启动流程分析

    1.分析时,只关心硬件的初始化,不关心软件的初始化

    2.初始化串口

    3.初始化LCD

    4.初始化网卡

    5.初始化LED

    6.执行用户输入的命令

  • 相关阅读:
    ajax提交转码解码
    关于idea开发工具常用的快捷键
    oracle 查询某个时间段数据
    hibernate : object references an unsaved transient instance 问题
    log4j日志
    JS关键字 import
    代码正常,junit却报错原因及解决方法
    hdu 5868 Polya计数
    hdu 5893 (树链剖分+合并)
    hdu 5895 广义Fibonacci数列
  • 原文地址:https://www.cnblogs.com/d442130165/p/4902699.html
Copyright © 2020-2023  润新知