1. incluede头文件,声明定义一个线程
#include <linux/sched.h> //wake_up_process()
#include <linux/kthread.h> //kthread_create()、kthread_run()
static struct task_struct *charge_led_task;
2. 创建线程处理函数
int charge_led_threadfunc(void *data)
{
while(1){
set_current_state(TASK_UNINTERRUPTIBLE);
if(kthread_should_stop()) break;
if(chargeLedData->is_battery_pullout){
gpio_set_value(chargeLedData->charge_gpio_led_data->gpio, GPIO_HIGH);
mdelay(100);
gpio_set_value(chargeLedData->charge_gpio_led_data->gpio, GPIO_LOW);
mdelay(100);
}else{
schedule_timeout(HZ);
}
msleep(10);
}
return 0;
}
3. 创建线程、绑定处理函数,并唤醒线程
charge_led_task = kthread_create(charge_led_threadfunc, NULL, "cahrge_led_thread");
if(IS_ERR(charge_led_task)){
pr_err("charge-led>>>%s: Unable to start kernel thread\n", __func__);
err = PTR_ERR(charge_led_task);
charge_led_task = NULL;
return err;
}
wake_up_process(charge_led_task);