如何在多个驱动程序中使用功能?

时间:2018-09-09 09:51:38

标签: c function prototype

我想在另一个驱动程序中调用do_input_boost函数,但是找不到调用该函数的方法。

static void do_input_boost(struct kthread_work *work)
{
    unsigned int i, ret;
    struct cpu_sync *i_sync_info;

    /* Set the input_boost_min for all CPUs in the system */
    pr_debug("Setting input boost min for all CPUs\n");
    for_each_possible_cpu(i) {
        i_sync_info = &per_cpu(sync_info, i);
        i_sync_info->input_boost_min = i_sync_info->input_boost_freq;
    }

    queue_delayed_work(system_power_efficient_wq,
        &input_boost_rem, msecs_to_jiffies(input_boost_ms));
}

我还添加了EXPORT_SYMBOL(do_input_boost),但是找不到用于调用此函数的正确原型定义,例如

do_input_boost();

编辑: 我添加了一个目标链接并链接到目标驱动程序中

#ifdef CONFIG_CPU_BOOST
extern void do_input_boost(void);
#else
extern void do_input_boost(void)
{
}
#endif

1 个答案:

答案 0 :(得分:1)

IMO,您必须删除static,因为它将此功能的可见性限制在当前翻译单位(前提是其他 driver 不在同一.c中)文件)。

删除static将使该函数成为全局函数,并且可以从其他.c文件中使用extern声明对其进行访问。

让我们说我们的do_input_boost函数在a.c文件中定义,而驱动程序在b.c文件(您要调用该函数的位置)中,然后:

b.c中,您将声明该功能:extern void do_input_boost(struct kthread_work*);,然后可以调用它。