u-boot2011.09 u-boot.img 的流程跟踪
- 一、主要是start.S 里面的 board_init_f 以及 board_init_r 函数分析,MLO与 u-boot.omg 的区别就在这里
* ### 二、 MLO 加载完毕,他会重新回到 start.S 重新开始
* ### 三、 board_init_f 函数的实现在  arch/arm/lib/board.c 里面
```c
    264 void board_init_f(ulong bootflag)
    265 {
    266     bd_t *bd;
    267     init_fnc_t **init_fnc_ptr;
    268     gd_t *id;
    269     ulong addr, addr_sp;
    270
    271
    272     /* Pointer is writable since we allocated a register for it */
    273     gd = (gd_t *) ((CONFIG_SYS_INIT_SP_ADDR) & ~0x07);
    274     /* compiler optimization barrier needed for GCC >= 3.4 */
    275     __asm__ __volatile__("": : :"memory");
    276
    277     memset((void *)gd, 0, sizeof(gd_t));
    278
    279     gd->mon_len = _bss_end_ofs;
    280     // 这里有一个函数指针数组,里面包含很多初始化
    281     for (init_fnc_ptr = init_sequence; *init_fnc_ptr; ++init_fnc_ptr) {
    282         if ((*init_fnc_ptr)() != 0) {
    283             hang ();
    284         }
    285     }
               // ... ...
    412     gd->bd->bi_baudrate = gd->baudrate;
    413     /* Ram ist board specific, so move it to board code ... */
    414     dram_init_banksize();
    415     display_dram_config();  /* and display it */
    416
    417     gd->relocaddr = addr;
    418     gd->start_addr_sp = addr_sp;
    419     gd->reloc_off = addr - _TEXT_BASE;
    420     debug("relocation Offset is: %08lx\n", gd->reloc_off);
    421     memcpy(id, (void *)gd, sizeof(gd_t));
    422
    423     relocate_code(addr_sp, id, addr);   // 最后回到 start.S  然后又到了 board_init_r
    424
    425     /* NOTREACHED - relocate_code() does not return */
    426 }
```
* ### 接上函数指针数组  init_sequence
```c
    235 init_fnc_t *init_sequence[] = {
    236 #if defined(CONFIG_ARCH_CPU_INIT)
    237     arch_cpu_init,      /* basic arch cpu dependent setup */
    238 #endif
    239 #if defined(CONFIG_BOARD_EARLY_INIT_F)
    240     board_early_init_f,
    241 #endif
    242     timer_init,     /* initialize timer */
    243 #ifdef CONFIG_FSL_ESDHC
    244     get_clocks,
    245 #endif
    246     env_init,       /* initialize environment */
    247     init_baudrate,      /* initialze baudrate settings */
    248     serial_init,        /* serial communications setup */
    249     console_init_f,     /* stage 1 init of console */
    250     display_banner,     /* say that we are here */
    251 #if defined(CONFIG_DISPLAY_CPUINFO)
    252     print_cpuinfo,      /* display cpu info (and speed) */
    253 #endif
    254 #if defined(CONFIG_DISPLAY_BOARDINFO)
    255     checkboard,     /* display board info */
    256 #endif
    257 #if defined(CONFIG_HARD_I2C) || defined(CONFIG_SOFT_I2C)
    258     init_func_i2c,
    259 #endif
    260     dram_init,      /* configure available RAM banks */
    261     NULL,
    262 };
```
* ### 三、board_init_r 也在 arch/arm/lib/board.c
```c
    443 void board_init_r(gd_t *id, ulong dest_addr)
    444 {
    445     char *s;
    446     bd_t *bd;
    447     ulong malloc_start;
    448 #if !defined(CONFIG_SYS_NO_FLASH)
    449     ulong flash_size;
    450 #endif
    451
    452
    453     gd = id;
    454     bd = gd->bd;
    455
    456     gd->flags |= GD_FLG_RELOC;  /* tell others: relocation done */
    457
    458     monitor_flash_len = _end_ofs;
    459
    460     /* Enable caches */
    461     enable_caches();
    462
    463     debug("monitor flash len: %08lX\n", monitor_flash_len);
    464     board_init();   /* Setup chipselects */
    465
    466 #ifdef CONFIG_SERIAL_MULTI
    467     serial_initialize();
    468
    469 #endif
    81     /* The Malloc area is immediately below the monitor copy in DRAM */
    482     malloc_start = dest_addr - TOTAL_MALLOC_LEN;
    483     mem_malloc_init (malloc_start, TOTAL_MALLOC_LEN);
    484
    485     stdio_init();   /* get the devices list going. */
    486
    487     puts("zengjf :\n");
    523 #if defined(CONFIG_CMD_NAND)
    524     puts("NAND :  ");
    525     nand_init();        /* go init the NAND */
    526 #endif
    // ... ...
    531
    532 #ifdef CONFIG_GENERIC_MMC
    533        puts("MMC:   ");
    534        mmc_initialize(bd);
    535 #endif
    // .. ...
    559
    560     console_init_r();   /* fully init console as a device */
    561
    566 #if defined(CONFIG_MISC_INIT_R)
    567     /* miscellaneous platform dependent initialisations */
    568     misc_init_r();
    569 #endif
// ... ...
649     for (;;) {
650         main_loop();
651     }
652
653     /* NOTREACHED - no way out of command loop except booting */
654 }
* ### u-boot 加载 kernel 参考:
    http://www.cnblogs.com/chenfulin5/p/6937334.html
* ### MLO 的流程参考:
    http://www.cnblogs.com/chenfulin5/p/8398399.htmlu-boot2011.09 u-boot.img 的流程跟踪的更多相关文章
- Spring Boot 自动装配流程
		Spring Boot 自动装配流程 本文以 mybatis-spring-boot-starter 为例简单分析 Spring Boot 的自动装配流程. Spring Boot 发现自动配置类 这 ... 
- I.MX6 Linux Qt 启动流程跟踪
		/************************************************************************** * I.MX6 Linux Qt 启动流程跟踪 ... 
- activiti流程跟踪图算法
		流程跟踪图-推导算法 工作中使用activiti实现流程图相关业务,但是上线后遇到问题,偶尔流程图出不来.查阅了一下画流程图的实现,基本上是参见:activiti-流程图颜色变化之一篇. 核心类,参见 ... 
- Buildroot 打包文件系统流程跟踪
		/********************************************************************************* * Buildroot 打包文件系 ... 
- am335x u-boot2011.09 SPL 流程跟踪
		跟踪一下 u-boot 2011.09 MLO在 nandflash 下运行的流程 首先,直接进入 start.S // arch/arm/cpu/armv7/start.S 36 .globl _s ... 
- 头秃了,二十三张图带你从源码了解Spring Boot 的启动流程~
		持续原创输出,点击上方蓝字关注我 目录 前言 源码版本 从哪入手? 源码如何切分? 如何创建SpringApplication? 设置应用类型 设置初始化器(Initializer) 设置监听器(Li ... 
- Spring Boot :Request请求处理流程
		技术交流群:233513714 
- 2018.09.07 最新cocoapods安装流程
		这篇写在简书了,就不费力气搬了,给简书留一篇. https://www.jianshu.com/p/13bbbf804b71 
- show create table底层流程跟踪
		GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源. 导语 SHOW CREATE TABLE语句用于为指定表/视图显示创建的语句,本文将简要描述如何在MySQL源码里跟踪和学 ... 
随机推荐
- SharePoint 2013 实现多级审批工作流
			上一篇介绍了安装和配置SharePoint 2013 Workflow,这一篇将用SharePoint 2013 Designer Workflow来实现一个多级审批工作流. 审批工作流介绍 这个De ... 
- Groovy 学习手册(1)
			1. 需要安装的软件 Java / Groovy 对应 Java 和 Groovy,你需要安装以下软件: Java JDK,例如 JDK 8 IDE,例如 Eclipse,NetBeans 8 Gro ... 
- IAR注释的快捷键
			1.注释的快捷键:Ctrl+K;取消注释:Ctrl+Shfit+K ... IAR注释代码的时候和MDK有很大的不同,以下简要说之:在注释代码的时候,你需如此操作: 注释一行,直接使用双斜杠”//“即 ... 
- [转]springSecurity源码分析—DelegatingFilterProxy类的作用
			使用过springSecurity的朋友都知道,首先需要在web.xml进行以下配置, <filter> <filter-name>springSecurityFilterC ... 
- shell curl 下载图片并另存为(重命名)
			curl -o fuck.png http://img30.360buyimg.com/imgzone/jfs/t19711/232/1837927836/150222/e4cd87bb/5ad990 ... 
- Echarts 如何与 百度地图结合?
			官方demo:http://echarts.baidu.com/examples/editor.html?c=map-polygon 需要按顺序加载以下几个资源,然后就可以在echarts配置中使用 ... 
- 冒泡,setinterval,背景图的div绑定事件,匿名函数问题探究
			1.会冒泡到兄弟元素么? $(function(){ $("#a").click(function(){alert("a")}) $("#b" ... 
- 正则和xpath在网页中匹配字段的效率比较
			1. 测试页面是 https://www.hao123.com/,这个是百度的导航 2. 为了避免网络请求带来的差异,我们把网页下载下来,命名为html,不粘贴其代码. 3.测试办法: 我们在页面中 ... 
- 清理kafka zookeeper
			; ; /; rm -rf /app/zookeeper/logs/*; rm -rf /app/pet_kafka_emds2_cluster/kafka-logs/*; rm -rf /app/p ... 
- stun服务器搭建(coTurn)
			0. 前言 好久之前写过一篇搭建WebRTC的文章,里面有简单的说到怎么搭建一个stun服务.但那时只是一笔带过.正好,这两天搭建stun服务,这篇博客就再复习一遍,并把搭建过程整理一下. 1. 安装 ... 
