​Linux kernel 驱动中,有不少驱动会引用到 EPROBE_DEFER 这个错误号。比如下面这个例子,对 devm_gpiod_get 的返回值进行判断,如果有错误且错误号不是 -EPRBOE_DEFER ,才输出error log。

那么 EPRBOE_DEFER 有什么特别之处吗,需要驱动程序这样特意处理?这个与 kernel 设计的 driver-deferred-probe 机制有关。

kernel 下有多个独立的驱动,每个驱动或多或少地会引用到其他驱动提供的资源,比如某个外设驱动需要使用 gpio 资源,就会通过 gpio 驱动提供的函数接口去申请 gpio;但是当A驱动引用B驱动提供的资源时,B驱动可能还没有工作起来, 为了解决驱动之间的这种依赖关系,kernel 设计了 driver-deferred-probe 机制:某个驱动在 probe 过程中,如果遇到依赖的资源还没有准备好,那么就返回 -EPRBOE_DEFER,kernel 检测到该驱动返回的是  -EPRBOE_DEFER,就会在过一段时间后让该驱动再次 probe。

driver-deferred-probe 流程如下图所示,有三条可能的路径

  • 生成新的 device 时

  • 注册新的 driver 时

  • later_initcall 主动再次触发

driver-deferred-probe 机制的核心数据结构与函数是:

  • deferred_probe_pending_list,用来记录哪些驱动被 deferred probe,并提供函数接口 driver_deferred_probe_add。

  • deferred_probe_work,用来调度相应的 work func 来执行 deferred probe 动作,并提供函数接口 driver_deferred_probe_trigger。

有了 driver-deferred-probe 机制后,编写驱动程序时,除了某些驱动有严格的执行次序,需要特意去定义 initcall 等级之外,一般的驱动则无需太过关心驱动间的依赖,从而在一定程度上简化了驱动开发。

以上就是对 EPRBOE_DEFER 的简要介绍。

作者:bigfish99

博客:https://www.cnblogs.com/bigfish0506/

公众号:大鱼嵌入式

​Linux kernel 驱动中,有不少驱动会引用到 EPROBE_DEFER 这个错误号。比如下面这个例子,对 devm_gpiod_get 的返回值进行判断,如果有错误且错误号不是-EPRBOE_DEFER,才输出error log。那么 EPRBOE_DEFER 有什么特别之处吗,需要驱动程序这样特意处理?这个与 kernel 设计的 driver-deferred-probe 机制有关。kernel 下有多个独立的驱动,每个驱动或多或少地会引用到其他驱动提供的资源,比如某个外设驱动需...
形象的描述了async与 def er 的区别,简单易懂的理解 async是异步执行,异步下载完毕后就会执行,不确保执行顺序,一定在 onload前,但不确定在 DOMContentLoaded事件的前或后 def er 是延迟执行,在浏览器看起来的效果像是将脚本放在了 body后面一样(虽然按规范应该是在 DOMContentLoaded事件前,但实际上不同浏览器的优化效果不一样,也有可能在它后面)
那么 EPRBOE_ DEF ER 有什么特别之处吗,需要 驱动 程序这样特意处理?这个与 k er nel 设计的 driv er - def er red- pro be 机制有关。 k er nel 下有多个独立的 驱动 ,每个 驱动 或多或少地会引用到其他 驱动 提供的资源,比如某个外设驱.
Hive内置函数一 Hive函数分类二 字符函数二 类型转换函数和数学函数三 日期函数四 集合函数五 条件函数六 聚合函数和表生成函数6.1 聚合函数6.2 表生成函数:输出可以作为表使用 一 Hive函数分类 从输入输出角度分类 标准函数:一行数据 的一列或多列为输入,结果为单一值 聚合函数:多行的零列到多列为输入,结果为单一值 表生成函数:零个或多个输入,结果为多列或多行 从实现方式分类 自定义函数 UDF:自定义标准函数 UDAF:自定义聚合函数 UDTF:自定义表生成函数
def er 和async都是script标签 的属性,用于控制脚本的加载和执行。 def er 属性表示延迟执行脚本,即在HTML文档解析完成后再执行脚本。 def er 属性只对外部脚本有效,内部脚本会忽略该属性。如果有多个 def er 脚本,它们会按照在HTML文档 的顺序依次执行。 async属性表示异步执行脚本,即在HTML文档解析过程 ,脚本会被异步加载并执行,不会阻塞HTML文档的解析。如果有多个async脚本,它们会在加载完成后立即执行,执行顺序不确定。 总的来说, def er 适用于需要按照顺序执行的脚本,而async适用于不需要按照顺序执行的脚本。