企业网站首页设计与制作,wordpress woz 下载,北京手机网站制作公司,上海建设人才网证书查询一. uboot 启动流程
_main 函数中会调用 board_init_f 函数#xff0c;本文继续简单分析一下 board_init_f 函数。
本文继续具体分析 board_init_f 函数。
本文继上一篇文章的学习#xff0c;地址如下#xff1a;
uboot启动流程-uboot内存分配_凌肖战的博客-CSDN博客 二…一. uboot 启动流程
_main 函数中会调用 board_init_f 函数本文继续简单分析一下 board_init_f 函数。
本文继续具体分析 board_init_f 函数。
本文继上一篇文章的学习地址如下
uboot启动流程-uboot内存分配_凌肖战的博客-CSDN博客 二. uboot 内存分配工作 本文继续分析完 board_init_f 函数的最后的代码
1 static init_fnc_t init_sequence_f[] {
2 setup_mon_len,
......
32 /*
33 * Now that we have DRAM mapped and working, we can
34 * relocate the code and continue running from DRAM.
35 *
36 * Reserve memory at end of RAM for (top down in that order):
37 * - area that wont get touched by U-Boot and Linux (optional)
38 * - kernel log buffer
39 * - protected RAM
40 * - LCD framebuffer
41 * - monitor code
42 * - board info struct
43 */
44 setup_dest_addr,
45 reserve_round_4k,
46 reserve_mmu,
47 reserve_trace,
48 reserve_uboot,
49 reserve_malloc,
50 reserve_board,
51 setup_machine,
52 reserve_global_data,
53 reserve_fdt,
54 reserve_arch,
55 reserve_stacks,
56 setup_dram_config,
57 show_dram_config,
58 display_new_sp,
59 INIT_FUNC_WATCHDOG_RESET
60 reloc_fdt,
61 setup_reloc,
62 NULL,
63 }; 第 56 行 setup_dram_config 函数设置 dram 信息就是设置 gd-bd-bi_dram[0].start 和 gd-bd-bi_dram[0].size 后面会传递给 linux 内核告诉 linux DRAM 的起始地址和大小。 第 57 行show_dram_config 函数用于显示 DRAM 的配置。 第 58 行display_new_sp 函数显示新的 sp 位置也就是 gd-start_addr_sp。这里的地址应该是最后内存分配工作完成后的地址即执行完 reserve_stacks 函数后的地址 0X8EF17E90。 可以打印验证打印如下 display_new_sp: gd-start_addr_sp: 0X8EF17E90第 60 行 reloc_fdt 函数用于重定位 fdt 没有用到。 第 61 行 setup_reloc 函数设置 gd 的其他一些成员变量供后面重定位的时候使用并且将以 前的 gd 拷贝到 gd-new_gd 处。需要使能 DEBUG 才能看到相应的信息输出打印如下 gd-reloc_off: 0X8738000
gd-relocaddr: 0X8FF38000
gd-new_gd: 0X8EF17EB8
gd-start_addr_sp: 0X8EF17E90 可以看出 uboot 重定位后的偏移为0X8738000 重定位后的新地址为 0X8FF38000 新的 gd 首地址为 0X8EF17EB8 最终的 sp 为 0X8EF17E90。 至此board_init_f 函数就执行完成了。 三. uboot内存分配图 以下是我所用的正点原子开发板 Nand-Flash版开发板所对应的 uboot内存分配图。这里所用的 开发板的芯片 DRAM 大小为 256MB 。 uboot 的内存分配图如下