我正在编写一个带有 netfilter 挂钩的 Linux 内核 (6.1.0-23-amd64) 模块。模块通过 insmod 加载。不与任何用户空间应用程序交互。 我发现我的模块中的全局变量值(即用于网络数据处理的内存缓冲区)偶尔会被错误的数据重写。 所以问题是——这是什么意思?如何保护全局变量不被同时重写? 谢谢。
局部变量工作完美——所以数据本身绝对没有问题。
这是我现在所理解的(只是无法提出正确的问题)。 来自[本文][1]
...不要顺序执行——内核模块使用其初始化函数注册自身以处理请求,该函数运行然后终止。它可以处理的请求类型在模块代码中定义。这与图形用户界面 (GUI) 应用程序中常用的事件驱动编程模型非常相似...
...可以被中断——内核模块在概念上的一个困难方面是它们可以同时被多个不同的程序/进程使用。我们必须仔细构建我们的模块,以便它们在被中断时具有一致且有效的行为...... [1]:https://labs.dese.iisc.ac.in/embeddedlab/the-hello-world-linux-loadable-kernel-module-2/
再次感谢您的评论。