一款比较常用的bootloader:uboot代码介绍
三、内核启动流程概述
1. 内核启动流程 概述
uboot启动流程
如上图所示:
设备上电之后,先执行iROM中的出厂代码,先进行必要硬件的初始化去执行uboot,通常把kernel、设备树文件放到flash中程序启动之后,往往先从flash启动,运行uboot第一步:先进行硬件的初始化(svc模式栈、clock、内存、串口)第二步:自搬移:把uboot从flash中拷贝到RAM中,跳转到RAM中执行剩下的uboot代码
第三步:把内核拷贝到RAM中,执行内核,把控制权交给内核。2. 内核启动详细流程
开发板从上电到启动内核的过程
四、uboot启动流程代码详解
1. lds文件
要想了解uboot整个项目的代码流程,必须首先了解链接脚本【链接脚本参考《7. 从0开始学ARM-GNU伪指令,lds使用》】。
该文件决定了uboot最终生成的镜像文件,各个段的布局。
uboot链接脚本如下:
u-boot-2013.01/arch/arm/cpu/u-boot.lds
文件内容:
26 OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm")
27 OUTPUT_ARCH(arm)
28 ENTRY(_start)
29 SECTIONS
30 {
31 . = 0x00000000;
32
33 . = ALIGN(4);
34 .text :
35 {
36 __image_copy_start = .;
37 CPUDIR/start.o (.text*)
38 *(.text*)
39 }
40
41 . = ALIGN(4);
42 .rodata : { *(SORT_BY_ALIGNMENT(SORT_BY_NAME(.rodata*))) }
43
44 . = ALIGN(4);
45 .data : {
46 *(.data*)
47 }
48
49 . = ALIGN(4);
50
51 . = .;
52
53 . = ALIGN(4);
54 .u_boot_list : {
55 #include <u-boot.lst>
56 }
57
58 . = ALIGN(4);
59
60 __image_copy_end = .;
61
62 .rel.dyn : {
63 __rel_dyn_start = .;
64 *(.rel*)
65 __rel_dyn_end = .;
66 }
67
68 .dynsym : {
69 __dynsym_start = .;
70 *(.dynsym)
71 }
72
73 _end = .;
74
75
76 * Deprecated: this MMU section is used by pxa at present but
77 * should not be used by new boards/CPUs.
78
79 . = ALIGN(4096);
80 .mmutable : {
81 *(.mmutable)
82 }
83
84 .bss __rel_dyn_start (OVERLAY) : {
85 __bss_start = .;
86 *(.bss*)
87 . = ALIGN(4);
88 __bss_end__ = .;
89 }
90
91 /DISCARD/ : { *(.dynstr*) }
92 /DISCARD/ : { *(.dynamic*) }
93 /DISCARD/ : { *(.plt*) }
94 /DISCARD/ : { *(.interp*) }
95 /DISCARD/ : { *(.gnu*) }
96 }
97
图片新闻
最新活动更多
-
即日-11.13立即报名>>> 【在线会议】多物理场仿真助跑新能源汽车
-
11月28日立即报名>>> 2024工程师系列—工业电子技术在线会议
-
11月29日立即预约>> 【上海线下】设计,易如反掌—Creo 11发布巡展
-
11月30日立即试用>> 【有奖试用】爱德克IDEC-九大王牌安全产品
-
12月19日立即报名>> 【线下会议】OFweek 2024(第九届)物联网产业大会
-
即日-12.26火热报名中>> OFweek2024中国智造CIO在线峰会
发表评论
请输入评论内容...
请输入评论/评论长度6~500个字
暂无评论
暂无评论