Uboot是嵌入式系统中最常用的bootloader,这里我们以s3c2410为例分析一下uboot的启动流程。首先通过uboot的链接文件,我们可以看到uboot运行是执行的第一段代码在start.S中。
ENTRY(_start)
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 : { *(.bss) }
_end = .;
}
我们找到这个文件,以这个文件为起点看uboot的启动流程。这里我们通过一个图来说明这个过程。
![](https://i-blog.csdnimg.cn/blog_migrate/a529e3d5967d99188b30b255b93c4047.jpeg)
最后我们把整个uboot在执行过程中,代码的搬移籍内存的使用情况通过一个图,来说明一下。
![](https://i-blog.csdnimg.cn/blog_migrate/394ba938bb825735d7ccf91c285d4be9.jpeg)