私は学術プロジェクトに取り組んでおり、Linux のワークキューの使用法を理解する必要があります。このため、1000 jiffies 後にカスタム ワークキューでの作業の実行を単純にスケジュールする小さなモジュールを開発しました。ただし、タイムアウトが期限切れになると、システムがブロックされ、VM を再起動する必要があり、デバッグ用の情報を収集できません。
これらは私が使用しているコードの一部です:
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」の出力を読み取ることができますが、システムを使用できません。おそらくコードに初歩的なバグがあることは知っていますが、それを個別化することはできません。助けてくれてありがとう。