Chamada de função de interrupção do timer INIT_DELAYED_WORK
Defina variáveis globais:
#ifdef TPD_ESD_PROTECT
#define TPD_ESD_CHECK_CIRCLE 2000
static struct delayed_work gsl_esd_check_work;
static struct workqueue_struct *gsl_esd_check_workqueue = NULL;
#endif
Inicialize:
#ifdef TPD_ESD_PROTECT
INIT_DELAYED_WORK(&gsl_esd_check_work, gsl_esd_check_func);
gsl_esd_check_workqueue = create_workqueue("gsl_esd_check");
#endif
Ativar o tempo:
queue_delayed_work(gsl_esd_check_workqueue, &gsl_esd_check_work, TPD_ESD_CHECK_CIRCLE);
Tempo próximo:
cancel_delayed_work_sync(&gsl_esd_check_work);
Interromper a função:
static void gsl_esd_check_func(struct work *work)
{
*************************************************
}
Resumo e exemplos de temporizadores do kernel do Linux e filas de trabalho
https://www.jianshu.com/p/a3ad64ddbd89
é muito detalhado e completo