【问题标题】:Can we write to jiffies variable我们可以写入 jiffies 变量吗
【发布时间】:2020-02-04 13:38:35
【问题描述】:

来自http://www.makelinux.net/ldd3/chp-7-sect-1.shtml

不用说,jiffiesjiffies_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);

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

【问题讨论】:

  • 我不认为这句话意味着你不能修改jiffies,只是你不应该修改它,因为这样做会导致其他内核代码意外失败。
  • 我错过了什么吗?borked 系统你必须恢复,因为你在内核模式下做了一些你不应该做的事情。仅仅因为你可以在内核代码中做事通常不是一个好主意。

标签: c linux timer linux-kernel linux-device-driver


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-06-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-25
    • 2021-12-25
    • 2019-04-24
    相关资源
    最近更新 更多