添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

如何在kthread_run中使用一个函数指针?

2 人关注

我在Linux中编写一个系统调用,为此我想用 kthread_run 创建几个线程。然而,当我传递函数指针时,我得到了。

error: passing argument 1 of ‘kthread_create_on_node’ from incompatible pointer type

以下是相关代码。

//method to do nothing for 100 milliseconds
int exist()
   mdelay(100);
   return 0;
//function pointer to exist
int (*exist_ptr)(void) = ∃
//create processes and delta queues 
for (i = PROC_NUM - 1; i >= 0; i--)
    char name[6] = {'d', 'e', 'l', 't', 'a', i2};
    delta_entry de = {
        .task = kthread_run(exist_ptr, NULL, name);
        .list = linked_list;
        .delta_time =  PROC_NUM * MILSEC_GAP;
        .position = i2;
    enqueue(&linked_list, &de, i2 - 1);
    i2++;

这显然不是所有的代码,因为我不想让帖子太长。谢谢你!"。

3 个评论
顺便说一句。替换代码0】看起来不对。它应该是一个空尾的printf风格的格式字符串。你也许应该这样创建一个线程。 .task = kthread_run(exist, NULL, "delta%d", i) (在你纠正了 entry 函数的原型之后)。另外,你发布的代码充满了语法错误,例如,在 delta_entry de 的初始化器中存在分号,在初始化器后缺少分号。也有其他可怕的错误。你确定你已经准备好编写内核代码了吗?
谢谢你指出初始化器的问题!我已经修复了它们。你能告诉我我犯的其他错误吗?不,我还没有准备好写内核代码,但我想学习的最好方法是从经验中来。谢谢你的帮助!
其他错误。如果不知道你的 enqueue 函数到底是做什么的,就很难确定,但我的猜测是,它将期望 de 的内容在它返回后仍然有效。
c
linux
linux-kernel
Ramsey Alsheikh
Ramsey Alsheikh
发布于 2019-06-26
1 个回答
PSkocik
PSkocik
发布于 2019-06-26
已采纳
0 人赞同

通过查看linux的源代码, kthread_run 是一个调用 kthread_create_on_node 的宏,它期待 int (*threadfn)(void *data)