u-boot简单学习笔记(二)——AR9331 uboot.lds分析
最开始系统上电后 从uboot.lds开始引导
OUTPUT_FORMAT("elf32-tradbigmips", "elf32-tradbigmips", "elf32-tradbigmips") /* 这里是生成格式为elf。大端,mips */
OUTPUT_ARCH(mips) /* mips架构 */
ENTRY(_start) /* 入口点为_start ,在cpu/mips/start.S中定义*/
SECTIONS
{
/*指定可执行image文件的全局入口点,通常这个地址都放在ROM(flash)0x0位置。必须使编译器知道这个地址,通常都是修改此处来完成*/
. = 0x00000000; /* 从0x0位置开始 */
. = ALIGN(4); /* 代码4字节对齐 */
.text: /* 这个是程序存放的地方 ,代码段 */
{
*(.text*)
}
. = ALIGN(4); /* 表示以4字节对齐 */
.rodata : { *(SORT_BY_ALIGNMENT(SORT_BY_NAME(.rodata*))) } /* 指定只读数据段 */
. = ALIGN(4);
.data : { *(.data*) } /* 指定读/写数据段 */
. = .;
_gp = ALIGN(16);
.got : { /* 指定got段, got段式是uboot自定义的一个段, 非标准段 */
__got_start = .;
*(.got)
__got_end = .;
}
. = ALIGN(4);
.sdata : { *(.sdata*) } /* 指定静态读/写数据段 */
__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赋值为当前位置,即结束位置 */
uboot_end_data = .; /* 把uboot_end_data赋值为当前位置,即作为data段结束位置 */
num_got_entries = (__got_end - __got_start) >> 2; /* 指定 num_got_entries 地址 */
. = ALIGN(4);
.sbss : { *(.sbss*) }
.bss : { *(.bss*) . = ALIGN(4); } /*指定bss段,告诉加载器不要加载这个段*/
uboot_end = .; /*把_end赋值为当前位置,即bss段的结束位置*/
}