以下内容源于朱有鹏嵌入式的学习与整理,如有侵权,请告知删除。
uboot的链接脚本u-boot.lds,位于uboot根目录下的/board/samsung/x210目录。
脚本内容与分析如下:
/** (C) Copyright 2002* Gary Jennejohn, DENX Software Engineering, <gj@denx.de>** See file CREDITS for list of people who contributed to this* project.** This program is free software; you can redistribute it and/or* modify it under the terms of the GNU General Public License as* published by the Free Software Foundation; either version 2 of* the License, or (at your option) any later version.** This program is distributed in the hope that it will be useful,* but WITHOUT ANY WARRANTY; without even the implied warranty of* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the* GNU General Public License for more details.** You should have received a copy of the GNU General Public License* along with this program; if not, write to the Free Software* Foundation, Inc., 59 Temple Place, Suite 330, Boston,* MA 02111-1307 USA*/
//指定输出的可执行文件是32位的ARM指令,小端模式,ELF格式。
OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm")
/*OUTPUT_FORMAT("elf32-arm", "elf32-arm", "elf32-arm")*/
OUTPUT_ARCH(arm) //指定可执行平台是ARM平台
ENTRY(_start) //指定程序入口是标号_start
SECTIONS
{//这里指定程序链接地址是0x0,但是会被Makefile文件中的-Ttext $(TEXT_BASE)覆盖掉,
//所以实际的链接地址是$(TEXT_BASE);. = 0x00000000;. = ALIGN(4);//.text段中将某些文件靠前排列,因为这些文件都是和BL1相关的,负责启动的第一阶段。.text :{cpu/s5pc11x/start.o (.text)cpu/s5pc11x/s5pc110/cpu_init.o (.text)board/samsung/x210/lowlevel_init.o (.text)cpu/s5pc11x/onenand_cp.o (.text) cpu/s5pc11x/nand_cp.o (.text) cpu/s5pc11x/movi.o (.text) common/secure_boot.o (.text) common/ace_sha1.o (.text)cpu/s5pc11x/pmic.o (.text)*(.text)}. = ALIGN(4);.rodata : { *(.rodata) }. = ALIGN(4);.data : { *(.data) }. = ALIGN(4);.got : { *(.got) }//.u_boot_cmd段是自定义段,将来uboot的命令结构体都会被赋予这个段属性,集中被链接在一起。
//__u_boot_cmd_start就是命令集合的起始地址,__u_boot_cmd_end是命令集合的结束地址。__u_boot_cmd_start = .;.u_boot_cmd : { *(.u_boot_cmd) }__u_boot_cmd_end = .;. = ALIGN(4);.mmudata : { *(.mmudata) }. = ALIGN(4);__bss_start = .;.bss : { *(.bss) }_end = .;
}