0

Linux カーネル プロジェクトに取り組んでいます。私のプロジェクトでは、カーネルを変更しcopy_processて、proc ファイル エントリへの書き込みに応答するモジュールの 1 つから呼び出されるようにしました。本質的に、物事は次のように見えます。

int procfile_write(struct file *file, const char *buffer, unsigned long count,
           void *data)
{
    //...more code
    copy_process(...);
    //...more code
}

int init_module()
{
    /* create the /proc file */
    Our_Proc_File = create_proc_entry(PROCFS_NAME, 0644, NULL);
    // more code
    Our_Proc_File->write_proc = procfile_write;
    return 0;   /* everything is ok */
}

copy_process私の問題は、次の行に到達したときにカーネルが内部でハングすることです。

write_lock_irq(&tasklist_lock);

これで、この関数が から常に呼び出されていることがわかりましたdo_fork。これはシステムコール内で発生します。

私の質問:

  1. これは、procファイルエントリとシステムコールへの書き込みに関係していると考えていますか?
  2. proc ファイルのエントリへの書き込みに関係する IRQ は何ですか?
  3. procファイルエントリへの書き込みは、実際にはシステムコールとは異なりますか? つまり、それが処理される方法と、それが呼び出されるコンテキストでですか?

ありがとうございました!

更新: コードの呼び出し方法を、proc ファイルへの書き込み処理中に呼び出される方法から、システム コールから呼び出される方法に変更しました。何も変わっていません。同じ行に到達すると、まだハングします (つまり、tasklist_lock をロックします)。さて、私の問題は、なぜそこにぶら下がっているのですか?この問題を解決するにはどうすればよいですか?

4

0 に答える 0