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.html
u-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源码里跟踪和学 ...
随机推荐
- Ubuntu 13.04开机亮度调节
终于把我的T430换成Ubuntu,本来还打算等几天13.10,想想反正能升级,趁着101长假就抓紧换了吧~` 总体来说遇到的问题不是很多,可能是Thinkpad在Linux或者ubuntu的方面做的 ...
- Android studio界面相关设置
用惯了emacs的操作方式,每当使用一款新的编辑器的时候,第一个想到的就是这个工具有没有emacs的快捷键,Android studio也是一样的. 1. Android studio设置emacs的 ...
- 有用的 Mongo命令行 db.currentOp() db.collection.find().explain() - 摘自网络
在Heyzap 和 Bugsnag 我已经使用MongoDB超过一年了,我发现它是一个非常强大的数据库.和其他的数据库一样,它有一些缺陷,但是这里有一些东西我希望有人可以早一点告诉我的. 即使建立索引 ...
- 【Unity】11.5 物理材质 (Physics Material)
分类:Unity.C#.VS2015 创建日期:2016-05-02 一.简介 物理材质 (Physics Material) 用于调整碰撞对象的摩擦力和反弹效果. 二.创建物理材质 要创建物理材质 ...
- Android 录音获取分贝值的办法
参考:http://blog.csdn.net/greatpresident/article/details/38402147 public class MediaRecorderDemo { pri ...
- HTML5学习笔记(二十三):DOM应用之动态加载脚本
同步加载和执行JS的情况 在HTML页面的</body>表情之前添加的所有<script>标签,无论是直接嵌入JS代码还是引入外部js代码都是同步执行的,这里的同步执行指的是在 ...
- Android各版本代号、版本号、API/NDK级别、发布时间及市场份额
Android各版本代号.版本号.API/NDK级别.发布时间及市场份额 代号 版本号 API/NDK级别 发布时间 - O 8.0 API level 26 2017-3-21 牛轧糖 Nougat ...
- angular-resource版本差异问题
在 AngularJS v1.3.0-beta.14 这个版本里,使用query方法,如果传递进来的数据不是数组,会报错. 在 AngularJS v1.2.18 这个版本里,使用query方法,如果 ...
- win10下安装redis 服务
Window 下安装 下载地址:https://github.com/MSOpenTech/redis/releases Redis 支持 32 位和 64 位.这个需要根据你系统平台的实际情况选择, ...
- SVN文件加锁
原文:SVN与TortoiseSVN实战:文件加锁详解 加锁与解锁的操作对于项目中的二进制文件,如图片.声音.动态库等不可合并文件是非常有用的,可以让这些文件防止产生恼人的冲突,但TortoiseSV ...