linux内核模块中的每任务数据结构

时间:2013-08-28 01:44:30

标签: c linux data-structures linux-kernel

我正在为Linux编写可加载的内核模块。我需要为Linux内核中的每个任务存储一些数据(这些数据将用于调度程序回调)。

我知道我可以修改struct task_struct并插入我自己的字段。但由于我愿意编写一个相对干净的内核模块,我无法修改原始Linux源代码树中的任何代码。

还可以在哈希表中维护从struct task_struct到我的数据的某种映射。但它似乎有点太重了。

我在Thread local data in linux kernel module中读到了答案。它提到在private_data中使用struct file。但它需要每个线程打开它才能获得struct file。并且无法使用struct task_struct查询每任务数据。 (因为我需要在调度程序回调中使用数据)

我的问题是:有没有简单而干净的方法允许我在Linux内核中注册每个任务数据结构而不修改struct task_struct

非常感谢!

1 个答案:

答案 0 :(得分:3)

允许您注册每任务数据结构的唯一简单而干净的方法是修改struct task_struct

模块是为内核的可选部分设计的;它们只能使用从基本内核显式导出的函数。 如果你必须更改基本内核,则不能再使用模块。