Chinaunix首页 | 论坛 | 博客
  • 博客访问: 47105
  • 博文数量: 19
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 147
  • 用 户 组: 普通用户
  • 注册时间: 2014-10-13 14:56
个人简介

待到山花烂漫时,依旧是那些经典在微笑 ~__~

文章分类
文章存档

2015年(17)

2014年(2)

我的朋友

分类: 嵌入式

2015-02-03 15:14:15

          ***********************目标***********************************
     1.分析uboot1.3.4如何引导内核
     2.uboot1.3.4和内核之间的参数传递
     3.uboot1.3.4的命令实现
     4.uboot1.3.4的环境变量
     ***********************目标***********************************
  
   从上篇文章:u-boot 1.3.4 cpu:s5pv210 架构体系armv7---Makefile概述 
     可知道bin文件从cpu/s5pc11x/start.o开始执行,以下是uboot第一阶段,汇编的流程总结,对汇编部分不是很熟悉,很多细节以后完善。

    cpu/s5pc11x/start.S
        首部信息:从S5PV210_iROM_ApplicationNote_Preliminary_20091126.pdf芯片手册可知,start.S会运行在iram中,其包含头部信息16字节

        异常向量跳转表

        进入svc32模式并且关中断

        关闭L2 Cache

        无效了L1 Cache

        关闭MMU(平板地址空间)

        读启动信息来知道启动类型

        把启动类型写到特殊功能寄存器

        设置sp堆栈指针让它指向iram的0xd0036000-12

**************调用了lowlevel_init**********************
{
board/samsung/smdkc110/lowlevel_init.S


初始化了电源管理芯片


初始化了系统时钟


初始化内存控制器


config.mk指定uboot的链接地址


TEXT_BASE = 0xc3e00000


mem_ctrl_asm_init的地址会比0xc3e00000大。


ldr pc, =mem_ctrl_asm_init会怎么样?跑飞!!!


bl mem_ctrl_asm_init会没问题呢??它是相对PC做一个跳转,可以跳到正确的位置。


初始化串口


初始化nand flash


通过出栈来返回


}
**************调用完lowlevel_init**********************


设置sp堆栈指针让它指向dram


从特殊功能寄存器读出启动类型


跳到nand_boot


cpu/s5pc11x/nand_cp.c的copy_uboot_to_ram函数(这里可以调用c语言了,有些是直接在start.S调用汇编版的代码)
{
把nand里面的u-boot拷贝到0x23e00000这个地址处,拷贝了512KB
}


使能了MMU,并且建立一个内存映射关系。把0x23e00000物理地址映射到0xc3e00000虚拟地址。


把bss段清零。


用ldr来做一个跳转,跳转到外部dram。
ldr pc, _start_armboot(lib_arm/board.c)

然后在board.c中,调用各个初始化函数,最后到达

点击(此处)折叠或打开

  1. /* main_loop() can return to retry autoboot, if so just run it again. */
  2.     for (;;) {
  3.         main_loop ();//common下的main.c
  4.     }














阅读(690) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~