u-boot启动过程源码分析之第一阶段(S3C24XX系列)

来源:互联网 发布:淘宝海外版叫什么 编辑:程序博客网 时间:2024/05/18 06:35

本文章以u-boot-2008-10为分析对象

1.bootloader两阶段功能

 bootloader启动可以分为单阶段,多阶段两种,通常多阶段能提供更复杂的功能以及更好的移植性,这里主要讨论两阶段的启动

  一般第一阶段使用汇编来实现,它完成一些依赖于CPU体系结构的初始化,并调用第二阶段的代码;

 第二阶段通常使用C语言来实现,实现更复杂的功能,更好的可读性和可移植性

(1)bootloader第一阶段的功能

  • 硬件设备初始化(如关闭watchdog,关中断,设置CPU时钟,RAM初始化等)
  • 为第二阶段代码准备RAM空间
  • 复制第二阶段到RAM空间
  • 设置栈stack
  • 跳转到第二阶段的C入口点

(2)bootloader第二阶段功能

  • 初始化本阶段要使用的硬件设备
  • 检测系统内训映射(内存大小,地址空间)
  • 将内核映像和根文件系统映像从flash读到RAM空间中
  • 设置内核启动参数
  • 调用内核

flash内核映像有可能经过压缩,在读到ram空间还需要进行解压缩,对于有自解压功能的内核,是不需要bootloader来解压

内核的交互是bootloader将参数放在某个指定地址,再启动内核,还规定了参数的结构为标记列表,标记列表以ATAG_CORE开始,以ATAG_NONE结束

标记的数据结构为tag,它有tag_header,union组成

2.连接脚本u-boot.lds

在分析源码前,先看连接脚本(\board\smdk2410\u-boot.lds

SECTIONS{. = 0x00000000;. = ALIGN(4);.text      :{  cpu/arm920t/start.o(.text)  *(.text)}. = ALIGN(4);.rodata : { *(.rodata) }. = ALIGN(4);.data : { *(.data) }. = ALIGN(4);.got : { *(.got) }. = .;__u_boot_cmd_start = .;.u_boot_cmd : { *(.u_boot_cmd) }__u_boot_cmd_end = .;. = ALIGN(4);__bss_start = .;.bss (NOLOAD) : { *(.bss) }_end = .;}

连接脚本指定运行地址为0,依次为代码段(text)、rodata段、数据段(data)、got段、命令段(u_boot_cmd)、bss段

先补习各段含义:

bss段:(bss segment)通常是指用来存放程序中未初始化的全局变量的一块内存区域。BSS是英文Block Started by Symbol的简称。BSS段属于静态内存分配。

数据段:(data segment)通常是指用来存放程序中已初始化的全局变量的一块内存区域。数据段属于静态内存分配。

代码段:(code segment/text segment)通常是指用来存放程序执行代码的一块内存区域。这部分区域的大小在程序运行前就已经确定,并且内存区域通常属于只读, 某些架构也允许代码段为可写,即允许修改程序。在代码段中,也有可能包含一些只读的常数变量,例如字符串常量等。

堆(heap):堆是用于存放进程运行中被动态分配的内存段,它的大小并不固定,可动态扩张或缩减。当进程调用malloc等函数分配内存时,新分配的内存就被动态添加到堆上(堆被扩张);当利用free等函数释放内存时,被释放的内存从堆中被剔除(堆被缩减)

栈(stack):栈又称堆栈, 是用户存放程序临时创建的局部变量,也就是说我们函数括弧“{}”中定义的变量(但不包括static声明的变量,static意味着在数据段中存放变量)。除此以外,在函数被调用时,其参数也会被压入发起调用的进程栈中,并且待到调用结束后,函数的返回值也会被存放回栈中。由于栈的先进先出特点,所以栈特别方便用来保存/恢复调用现场。从这个意义上讲,我们可以把堆栈看成一个寄存、交换临时数据的内存区。 

 总结如下:

  堆栈段在程序运行后才正式存在,是程序运行的基础
 .bss段存放的是未初始化的全局变量和静态变量
 .text段存放的是程序中的可执行代码
 .data段保存的是那些已经初始化了的全局变量和静态变量
 .rodata段存放程序中的常量值,如字符串常量

静态存储区通常指程序中的.bss和.data段
只读区通常指程序中的.rodata段
局部变量所占空间为栈上空间
动态空间为堆中的空间
程序可执行代码存放于.text段

原创粉丝点击