1 / 28
文档名称:

基于S3C6410的U-boot启动代码分析.doc

格式:doc   页数:28页
下载后只包含 1 个 DOC 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

基于S3C6410的U-boot启动代码分析.doc

上传人:6188 2016/4/21 文件大小:0 KB

下载得到文件列表

基于S3C6410的U-boot启动代码分析.doc

文档介绍

文档介绍:预备知识可执行文件由许多链接在一起的对象文件组成。对象文件有许多节,如文本、数据、 init 数据、 bss 等。这些对象文件都是由一个称为链接器脚本( *lds )的文件链接并装入的。这个链接器脚本的功能是将输入对象文件的各节映射到输出文件中;换句话说,它将所有输入对象文件都链接到单一的可执行文件中,将该可执行文件的各节装入到指定地址处。因此在分析 u-boot 代码是,首先应关注的是 u- 文件,它位于$(U-BOOT_SRC_ROOT)/board/$(BOARD_NAME) 目录下。 U-Boot 启动过程分析 U-Boot 的启动过程可以分为两个阶段,两个阶段分别完成如下功能: ( 1)第一阶段的功能??硬件设备初始化??加载 U-Boot 第二阶段代码到 RAM 空间??设置好栈??跳转到第二阶段代码入口(2)第二阶段的功能??初始化本阶段使用的硬件设备??检测系统内存映射??将内核从 Flash 读取到 RAM 中??????为内核设置启动参数第一阶段对应的文件是 和 。 U-Boot 启动第一阶段流程如下: 首先分析 u- 文件/** OUTPUT_FORMAT(default, big, little) ,在链接的时候,如果使用了-EB 的命令行参数,则使用这里的 big * 参数指定的字节序,如果使用了-EL; 的命令行参数,则使用这里的 little 参数指定的字节序,如果没有使用* 任何命令行参数,则使用这里的 default 参数指定的字节序。*由$(SRC_ROOT)/board/samsung/smdk6410/u- 中的定义可见, 不管在链接的时候使用了何种命令行参数, * 输出的目标文件都是使用 elf32-littlearm 方式的字节序。*/ OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm") /*OUTPUT_FORMAT("elf32-arm", "elf32-arm", "elf32-arm")*/ /* 以上语句是指定输出可执行文件是 elf 格式,32 位 ARM 指令, 小端*/ /* 指定输出可执行文件的平台为 ARM*/ OUTPUT_ARCH(arm) /* 指定输出可执行文件的起始代码段为_start.*/ ENTRY(_start) SECTIONS { /* 定位当前地址为 0x0 地址*/ .= 0x00000000; /* 指定代码以 4 字节对齐*/ .= ALIGN(4); /* 指定代码段*/ .text :{ cpu/s3c64xx/ (.text) /* 代码的第一个代码部分*/ cpu/s3c64xx/s3c6410/ (.text) cpu/s3c64xx/ (.text) cpu/s3c64xx/ (.text) cpu/s3c64xx/ (.text) *(.text) lib_arm/ }.= ALIGN(4); .rodata :{ *(.rodata) } /* 指定只读数据段*/ .= ALIGN(4); .data :{ *(.data) } /* 指定读写数据段*/ .= ALIGN(4); .got :{ *(.got) } /* 指定 got 段, got 段式是 uboot 自定义的一个段, 非标准段*/ __u_boot_cmd_start = .; /*把__u_boot_cmd_start 赋值为当前位置, 即起始位置*/ .u_boot_cmd :{ *(.u_boot_cmd) } /* 指定 u_boot_cmd 段, uboot 把所有的 uboot 命令放在该段.*/ __u_boot_cmd_end = .; /*把__u_boot_cmd_end 赋值为当前位置, 即结束位置*/ .= ALIGN(4); .mmudata :{ *(.mmudata) }.= ALIGN(4); __bss_start = .; /*把__bss_start 赋值为当前位置,即 bss 段的开始位置*/ .bss :{ *(.bss) } /* 指定 bss 段*/ _end = .; /*把_end 赋值为当前位置,即 bss 段的结束位置*/ }由 u- 文件可知: 第一个链接的是 文件,因此 u- n 的入口代码在 start. o中, 其源代码为 , u- n