initf_dm,

static int initf_dm(void)
{
#if defined(CONFIG_DM) && CONFIG_VAL(SYS_MALLOC_F_LEN)

//CONFIG_DM和CONFIG_SYS_MALLOC_F_LEN都有定义
    int ret;

bootstage_start(BOOTSTATE_ID_ACCUM_DM_F, "dm_f");

uint32_t bootstage_start(enum bootstage_id id, const char *name)
    {
        struct bootstage_data *data = gd->bootstage;                 //data指向gd->bootstage
        struct bootstage_record *rec = ensure_id(data, id);

struct bootstage_record *ensure_id(struct bootstage_data *data,enum bootstage_id id)
         {
             struct bootstage_record *rec;

rec = find_id(data, id);

//去gd->bootstage->record的查找有没有匹配BOOTSTATE_ID_ACCUM_DM_F的记录

//有上篇博客可知目前record中只有BOOTSTAGE_ID_AWAKE和BOOTSTAGE_ID_START_UBOOT_F两个记录
             if (!rec && data->rec_count < RECORD_COUNT) {
                 rec = &data->record[data->rec_count++];                    //rec指向gd->bootstage->record[2]
                 rec->id = id;                                                                  //rec->id初始化为BOOTSTATE_ID_ACCUM_DM_F
                 return rec;
             }

return rec;
         }

ulong start_us = timer_get_boot_us();                                 //获取当前的boot时间

if (rec) {
            rec->start_us = start_us;
            rec->name = name;
        }

return start_us;
    }

//bootstage_start的主要功能是向gd->bootstage->record[2]中增加名字为dm_f的记录

ret = dm_init_and_scan(true);

这里参考函数说明:该函数初始化驱动树和uclass树,然后从平台数据和FDT中扫描和绑定可用的设备。当输入参数为true时,仅绑定含有DM_FLAG_PRE_RELOC标志位和特殊设备树特性的节点。

bootstage_accum(BOOTSTATE_ID_ACCUM_DM_F);

在先前的bootstage_start标记一项活动为开始状态后,调用bootstage_accum标记该任务为结束状态
    if (ret)
        return ret;
#endif
#ifdef CONFIG_TIMER_EARLY                 //未定义,不执行
    ret = dm_timer_init();
    if (ret)
        return ret;
#endif

return 0;
}

本文主要分析了initf_dm的功能,主要是初始化驱动树和uclass树,并绑定含有DM_FLAG_PRE_RELOC标志位和特殊设备树特性的节点。下篇博客将继续分析init_sequence_f 中的函数。
————————————————
版权声明:本文为CSDN博主「yanggx0929」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/yanggx0929/article/details/88860236

uboot initf_dm函数分析的更多相关文章

  1. uboot main_loop函数分析

    一.概述    main_loop()函数做的都是与具体平台无关的工作.主要包括的工作如下: (1)初始化启动次数限制机制 (2)Modem功能 (3)设置软件版本号 (4)启动延迟 (5)读取命令, ...

  2. u-boot initf_bootstage函数分析

    这篇博客主要分析 init_sequence_f 函数指针数组中的initf_bootstage函数: static int initf_bootstage(void){    bool from_s ...

  3. u-boot log_init函数分析

    log_init, int log_init(void){    struct log_driver *drv = ll_entry_start(struct log_driver, log_driv ...

  4. uboot的jumptable_init函数分析

    一.函数说明 函数功能:安装系统函数指针 函数位置:common/exports.c 二.函数分析 void jumptable_init (void) { int i; gd->jt = (v ...

  5. u-boot启动流程分析(2)_板级(board)部分

    转自:http://www.wowotech.net/u-boot/boot_flow_2.html 目录: 1. 前言 2. Generic Board 3. _main 4. global dat ...

  6. 基于335X的UBOOT网口驱动分析

    基于335X的UBOOT网口驱动分析 一.软硬件平台资料 1.  开发板:创龙AM3359核心板,网口采用RMII形式 2.  UBOOT版本:U-Boot-2016.05,采用FDT和DM. 参考链 ...

  7. Uboot启动流程分析(三)

    1.前言 在前面的文章Uboot启动流程分析(二)中,链接如下: https://www.cnblogs.com/Cqlismy/p/12002764.html 已经对_main函数的整个大体调用流程 ...

  8. u-boot源码分析之C语言段

    题外话: 最近一直在学习u-boot的源代码,从代码量到代码风格,都让我认识到什么才是真正的程序.以往我所学到的C语言知识和u-boot的源代码相比,实在不值一提.说到底,机器都是0和1控制的.感觉这 ...

  9. U-Boot GOT表分析和u-boot.lds解读

    转自:http://blog.sina.com.cn/s/blog_70dd16910100zab6.html u-boot-2010.09/arch/powerpc/cpu/mpc86xx/star ...

随机推荐

  1. 十五:jinja2过滤器之实现自定义过滤器

    过滤器的本质就是函数,如果在模板中调用这个过滤器,那么就会将这个变量的值作为第一个参数传给过滤器函数,然后将函数的返回值作为滤器的返回值 1.在python文件中写好过滤的函数和逻辑2.将将函数注册到 ...

  2. MySQL 树形结构 根据指定节点 获取其下属的所有子节点(包含路径上的枝干节点和叶子节点)

    背景说明 需求:MySQL树形结构, 根据指定的节点,获取其下属的所有子节点(包含路径上的枝干节点和叶子节点) 枝干节点:如果一个节点下还有子节点,则为枝干节点. 叶子节点:如果一个节点下不再有子节点 ...

  3. qrcode-reader——二维码识别

    JavaScript QRCode reader for HTML5 enabled browser 参考资料1:[https://www.npmjs.com/package/qrcode-reade ...

  4. js在页面中添加一个元素 —— 添加弹幕

    参考地址 [往下拉 —— 使用HTML DOM appendChild() 方法实现元素的添加 ] 一.创建 HTML <div class="right_liuyan"&g ...

  5. 关于Anaconda3 (64-bit)的一些体验

    最近因为在学习数据分析,所以安装了Anaconda3 (64-bit),最新版,支持py3.7 优点:自带了720个库(官方宣布),自带notebook,spyder.不用自己再去pip各种库了(基本 ...

  6. 【ABAP系列】SAP ABAP7.40新语法简介第一篇

    公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[ABAP系列]SAP ABAP7.40新语法简 ...

  7. Unity Shader 基础

    推荐: https://www.cnblogs.com/nanwei/p/7277417.html 上面链接作者的整个系列都写的不错 https://www.cnblogs.com/nanwei/ca ...

  8. vs2015中将复制过来的文件夹显示目录文件

    先将文件夹和文件复制到VS程序所在的位置,点击解决方案资源管理器上的“显示所有文件”按纽,展开这个文件夹,这样你就可以看到这个文件或者文件夹了,这时,这个文件或者文件夹是虚线构成的.你右击这个文件或者 ...

  9. XSS绕过WAF的姿势

    初始测试 1.使用无害的payload,类似<b>,<i>,<u> 观察响应,判断应用程序是否被HTML编码,是否标签被过滤,是否过滤<>等等: 2.如 ...

  10. Go语言的变量和常量(三)

    我想吐槽下网上的很多所谓的“零基础教程”,因为那根本不算零基础.就拿语言教程来说,一上来就说怎么定义变量的怎么算零基础呢?零基础应该是先告诉你啥叫变量. 所以我从不起零基础的标题.我这也不是教程,只是 ...