• static inline extern等概念


    写驱动时碰到如下函数调用,涉及知识点 static inline extern

    include/of.h中有如下定义:

    extern struct device_node *of_find_node_by_name(struct device_node *from,
    const char *name);

    static inline struct device_node *of_find_node_by_name(struct device_node *from,
    const char *name)
    {
    return NULL;
    }

    drivers/of/base.c中定义如下:

    /**
    * of_find_node_by_name - Find a node by its "name" property
    * @from: The node to start searching from or NULL, the node
    * you pass will not be searched, only the next one
    * will; typically, you pass what the previous call
    * returned. of_node_put() will be called on it
    * @name: The name string to match against
    *
    * Returns a node pointer with refcount incremented, use
    * of_node_put() on it when done.
    */
    struct device_node *of_find_node_by_name(struct device_node *from,
    const char *name)
    {
    struct device_node *np;
    unsigned long flags;

    raw_spin_lock_irqsave(&devtree_lock, flags);
    for_each_of_allnodes_from(from, np)
    if (np->name && (of_node_cmp(np->name, name) == 0)
    && of_node_get(np))
    break;
    of_node_put(from);
    raw_spin_unlock_irqrestore(&devtree_lock, flags);
    return np;
    }
    EXPORT_SYMBOL(of_find_node_by_name);

    后来发觉是一场误会:

    #ifdef CONFIG_OF

    extern struct device_node *of_find_node_by_name(struct device_node *from,
    const char *name);

    #else /* CONFIG_OF */

    static inline struct device_node *of_find_node_by_name(struct device_node *from,
    const char *name)
    {
    return NULL;
    }

    #endif /* CONFIG_OF */

  • 相关阅读:
    java.lang.NoClassDefFoundError异常处理
    CMS之promotion failed&concurrent mode failure
    jvm 内存,线程,gc分析
    spring 参数校验
    常用的正则表达式
    《深入理解java虚拟机-高效并发》读书笔记
    ConcurrentHashMap源码分析
    web前端性能调优(二)
    由自动装箱和拆箱引发我看Integer源码
    阅读《effective java-第17条》遇到的问题解决与分享
  • 原文地址:https://www.cnblogs.com/idyllcheung/p/13186884.html
Copyright © 2020-2023  润新知