• Uboot S3C2440 BL1 的流程


    1.   reset

          中断向量表

    2. 进入reset

         (1) 设置svc32 模式

           (2) flash  I/D caches

            (3)disable  MMU 和 cache

            (4)2440 没有onenand 

             (5)bl   lowlevel_init    

    接 (5)

            1.初始化时钟

            2. 初始化UART,串口

            3.nandflash 简单初始化

             4. 判断当前uboot 是否运行在内存中,如果不是则进行内存初始化

    返回 (5)后面

    跳过宏定义

    从NandFlash 中拷贝bootloader到内存中

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

    清除BSS段

    uboot 配置编译:

    make smdk2440 config

    make

    arm-linux-objdump -D -S  uboot.bin 30000000

    ./dnw  uboot.bin 30000000

    souceinsight 高亮 shift + F8

    第二部分从startarmboot开始

    做两件事情:

    1.硬件初始化

    2.软件初始化,初始化一些环境变量

    (1)初始化串口

     (2)LCD 初始化

     (3)初始化 网卡

      (4)初始化LED

        (5)main loop 最后执行用户输入命令

    1.通过uboot 下面的 Makefile 找到对应的芯片的配置

    2. 在 board/samsung/xxx  找到 链接器脚本 u-boot.lds

    可以看到代码段的入口文件 Start.o  --》 Strat.S

    3. Start.S 文件在 cpu/xxxx  里面

    4. 分析第一阶段(BL1)的bootloader 代码

    5.有一个中断向量表,向量表最前面是 reset

    6. 分析 reset 的内容

             (1) svc

             (2) I/D cache

             (3)  关闭 MMU

             (4)外侧基地址初始化 (6410独有)

               (5)OneNand

               (6) bl lowlevel_init (lowlevel_init.S 单独文件)     

                    board/samsung/xxx   

                       点亮LED,

                       disable watchdog 关闭所有中断 (为什么2440 没有做呢?2440 在 时钟初始化函数里面做了)

                       返回

            (7) copy from nand

            (8)堆栈初始化

             (9)清除bss段

          进入第二阶段 BL2

    210 分析过程

    svc

    跳转到 xxx

        关闭L1  

       disable MMU 和cache

    low level init

              检查 reset状态

               IO引脚初始化(恢复IO引脚为默认值)

               disable watchdog 

                SRam SRom 初始化

               时钟初始化 内存初始化

              串口初始化

              取消存储保护区

              简单初始化NandFlash 

              disable ADB

               返回

    设置堆栈

    判断当前是否在内存运行

    判断从哪种flash启动的

    进入 board_init_f_nand 函数

     跳转 到内存里执行 BL2

    BL2 在连接器脚本里面, u-boot.lds

    arch/arm/cpu/armv7

               

                       

               

  • 相关阅读:
    运行时动态的创建form的方法
    用X++代码来动态的改变表的属性
    使用WinAPI类来查找文件
    用循环得到表中所有的字段
    用X++建立和调用报表(Report)
    JAVA 保留字
    Cygwin使用
    系统程序员成长计划-算法与容器(三) (上)
    系统程序员成长计划工程管理(二)
    系统程序员成长计划-算法与容器(三) (下)
  • 原文地址:https://www.cnblogs.com/qifei-liu/p/10179241.html
Copyright © 2020-2023  润新知