Я работаю над проектом accademi c, и я должен понимать использование рабочей очереди linux. По этой причине я разработал небольшой модуль, который просто планирует выполнение работы над пользовательской задачей после 1000 циклов. Однако по истечении времени ожидания система блокируется, мне нужно перезапустить виртуальную машину, и я не могу собрать какую-либо информацию для отладки.
Это части кода, которые я использую:
static void enqueue_message(struct work_struct *work){
printk("%s: Step 2\n", MODULE_NAME);
return;
}
int init_module(void){
struct workqueue_struct *workqueue;
struct delayed_work deferred_write;
workqueue = alloc_workqueue("pending_writes",WQ_MEM_RECLAIM, 0);
INIT_DELAYED_WORK(&deferred_write, enqueue_message);
queue_delayed_work(workqueue, &deferred_write, 1000);
printk("%s: Step 1\n", MODULE_NAME);
return 0;
}
Если я быстро (до истечения срока действия таймера) запрашиваю «dmesg» на оболочке, я могу прочитать распечатку «Шаг 1», но затем я не могу использовать систему. Я знаю, что, возможно, в коде есть ошибка новичка, но я не могу ее индивидуализировать. Спасибо всем за помощь.