Как я могу использовать функцию в нескольких драйверах? - PullRequest
0 голосов
/ 09 сентября 2018

Я хочу вызвать функцию 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();

EDIT: я добавил слух и связал в целевом драйвере

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

1 Ответ

0 голосов
/ 09 сентября 2018

IMO вам придется удалить static, так как он ограничивает видимость этой функции для текущей единицы перевода (при условии, что другой драйвер не находится в том же файле .c).

Удаление static сделает эту функцию глобальной, а из других .c файлов она будет доступна с помощью объявления extern.

допустим, что наша наша do_input_boost определена в файле a.c, а ваш драйвер находится в файле b.c (где вы хотите вызвать эту функцию), затем:

в b.c вы объявите эту функцию: extern void do_input_boost(struct kthread_work*);, а затем сможете ее вызвать.

...