0

私は学術プロジェクトに取り組んでおり、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」の出力を読み取ることができますが、システムを使用できません。おそらくコードに初歩的なバグがあることは知っていますが、それを個別化することはできません。助けてくれてありがとう。

4

1 に答える 1