C 我们可以写到jiffies变量吗

C 我们可以写到jiffies变量吗,c,linux,timer,linux-kernel,linux-device-driver,C,Linux,Timer,Linux Kernel,Linux Device Driver,从 不用说,必须同时考虑jiffies和jiffies_64 只读 我编写了一个程序来验证,它成功地更新了jiffies值 #include <linux/kernel.h> #include <linux/module.h> #include <linux/jiffies.h> static int __init test_hello_init(void) { jiffies = 0; pr_info("jiffies:%lu\n", ji

不用说,必须同时考虑
jiffies
jiffies_64
只读

我编写了一个程序来验证,它成功地更新了
jiffies

#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/jiffies.h>

static int __init test_hello_init(void)
{
    jiffies = 0;
    pr_info("jiffies:%lu\n", jiffies);
    return 0;
}

static void __exit test_hello_exit(void)
{
}

MODULE_LICENSE("GPL");

module_init(test_hello_init);
module_exit(test_hello_exit);
#包括
#包括
#包括
静态int\uuu init test\u hello\u init(void)
{
jiffies=0;
pr_信息(“jiffies:%lu\n”,jiffies);
返回0;
}
静态无效\退出测试\你好\退出(无效)
{
}
模块许可证(“GPL”);
模块初始化(测试初始化);
模块退出(测试退出);

此模块成功地将
jiffies
设置为零。我遗漏了什么吗?

你读的只是一个警告。这是您(内核模块开发人员)和内核之间的一份不成文合同。您不应该修改
jiffies
的值,因为这不是您自己的事,而是由内核根据一组您不必担心的复杂规则进行更新的。调度程序在内部使用
jiffies
值,因此修改它时可能会发生不好的事情。您在模块中看到的变量很可能只是实际变量的线程本地副本,因此修改可能没有效果。无论如何,你不应该这样做。它仅作为模块实现某些逻辑可能需要知道的附加信息提供给您


当然,因为您使用的是C语言,所以对于变量没有“权限”的概念。任何映射到可读写内存区域的内容都可以修改,您甚至可以通过先更改权限来修改只读内存中的数据。如果你愿意,你可以做各种坏事。有很多事情你不应该改变,即使你有能力这样做。

你所读的只是一个警告。这是您(内核模块开发人员)和内核之间的一份不成文合同。您不应该修改
jiffies
的值,因为这不是您自己的事,而是由内核根据一组您不必担心的复杂规则进行更新的。调度程序在内部使用
jiffies
值,因此修改它时可能会发生不好的事情。您在模块中看到的变量很可能只是实际变量的线程本地副本,因此修改可能没有效果。无论如何,你不应该这样做。它仅作为模块实现某些逻辑可能需要知道的附加信息提供给您


当然,因为您使用的是C语言,所以对于变量没有“权限”的概念。任何映射到可读写内存区域的内容都可以修改,您甚至可以通过先更改权限来修改只读内存中的数据。如果你愿意,你可以做各种坏事。有很多东西你不应该修改,即使你有能力这样做。

我不认为这句话意味着你不能修改
jiffies
,只是你不应该修改它,因为这样做会导致其他内核代码意外失败。我遗漏了什么吗?您必须恢复的系统,因为您在内核模式下做了不应该做的事情。仅仅因为可以在内核代码中进行操作通常不是一个好主意。我不会将这句话解释为您不能修改
jiffies
,只是您不应该修改它,因为这样做会导致其他内核代码无法预测地失败。我遗漏了什么吗?您必须恢复的系统,因为您在内核模式下做了不应该做的事情。仅仅因为可以在内核代码中使用而进行操作通常不是一个好主意。