0

我从事 Linux 内核项目。在我的项目中,我修改了内核,以便copy_process从我的一个模块中调用它,该模块响应对 proc 文件条目的写入。本质上,事情看起来像:

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. IRQ 与写入 proc 文件条目有什么关系?
  3. 写入 proc 文件条目实际上与系统调用不同吗?我的意思是它的处理方式和调用的上下文?

谢谢!

更新:我将调用我的代码的方式从在处理写入 proc 文件时调用代码的方式转换为从系统调用调用的方式。没有改变。到达同一行时仍然挂起(即锁定 tasklist_lock)。现在,我的问题是为什么它挂在那里?以及如何解决这个问题?

4

0 回答 0