加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

x-loader启动过程分析

发布时间:2020-12-15 06:49:37 所属栏目:百科 来源:网络整理
导读:平台:omap zoom2 1: 从连接文件开始分析: board/omap3430labrador/x-load.lds OUTPUT_FORMAT("elf32-littlearm","elf32-littlearm","elf32-littlearm") OUTPUT_ARCH(arm) ENTRY(_start) SECTIONS { . = 0x00000000; . = ALIGN(4); .text : { cpu/omap3/star
平台:omap zoom2 1: 从连接文件开始分析: board/omap3430labrador/x-load.lds OUTPUT_FORMAT("elf32-littlearm","elf32-littlearm","elf32-littlearm") OUTPUT_ARCH(arm) ENTRY(_start) SECTIONS { . = 0x00000000; . = ALIGN(4); .text : { cpu/omap3/start.o (.text) *(.text) } . = ALIGN(4); .rodata : { *(.rodata) } . = ALIGN(4); .data : { *(.data) } . = ALIGN(4); .got : { *(.got) } . = ALIGN(4); __bss_start = .; .bss : { *(.bss) } _end = .; } 可以看到入口地址是_start,在start.s文件中。 2:进入start.s文件: 里面对CPU进行适当的初始化。 最后跳到C代码中。 ldr pc,_start_armboot /* jump to C code */ 文件中频繁出现的TEXT_BASE,_start是目标文件的入口地址。 TEXT_BASE通过 config.mk 中的 -Ttext $(TEXT_BASE) 来指定链接选项,从而更新链接脚本中的入口地址。 //_start : 这是 u-boot 的第一条指令入口地址,如果从 flash 启动,就是 0x0,如果直接下载到 SDRAM 中执行,则是 TEXT_BASE 3:进入start_armboot函数(lib/board.c) 执行一系列的初始化函数 for (init_fnc_ptr = init_sequence; *init_fnc_ptr; ++init_fnc_ptr) { if ((*init_fnc_ptr)() != 0) { hang (); } } 4:判断从mmc,nand,onenand,uart等加载uboot文件。 unsigned long offset = CFG_LOADADDR; size = file_fat_read("u-boot.bin",(unsigned char *)offset,0); 最后执行之 ((init_fnc_t *)CFG_LOADADDR)(); 5:进入uboot.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读