Linux“jiffies”变量的物理地址

时间:2011-04-09 12:43:38

标签: linux linux-kernel

我想得到Linux“jiffies”变量的物理地址,这样我就可以通过读取这个内存地址的内容来读取它。

6 个答案:

答案 0 :(得分:4)

从内核模式代码(例如可加载的内核模块),您需要包含<linux/jiffies.h>头文件。它包含jiffies变量的定义:

extern unsigned long volatile __jiffy_data jiffies;

但是,它也包含此警告:

/*
 * The 64-bit value is not atomic - you MUST NOT read it
 * without sampling the sequence number in xtime_lock.
 * get_jiffies_64() will do this for you as appropriate.
 */

即。你不应该直接访问这个变量。它是一个64位变量,对它的访问在32位系统上不是原子的,因此来自同一头文件的get_jiffies_64()函数。在64位系统上,函数是一个非常简单的内联函数,它返回jiffies变量的值。

另一方面,从用户空间代码中,根本无法访问内核内存。

答案 1 :(得分:2)

对于内核代码,请使用include/linux/jiffies.h中定义的函数。 (例如get_jiffies_64)。

Kernel command using Linux system calls说明了Linux中的syscall处理,其中包含读取jiffies的用户空间系统调用。可能是你想要的。

超级用户的

Linux obtain current of jiffies since reboot也有一些您可能感兴趣的信息。

Converting jiffies to milli seconds也值得记住。

答案 2 :(得分:2)

这不是直接与您的问题相关,但可能仍然相关。 我在这里维护一个小项目(devmem-rw): http://code.google.com/p/device-memory-readwrite/

对驱动程序/内核开发人员/测试人员非常有用;它允许一个设置能够读/写任何有效的内存位置 - 这可能是RAM(用户/内核空间),内存映射寄存器位置,共享内存区域等。

Pl查看项目的wiki区域(具体来说,http://code.google.com/p/device-memory-readwrite/wiki/UsageWithExamples)。

与您的问题更相关,我使用此项目演示了一些用例,其中一个是重复读取'jiffies'值。看到它的变化证明了这一点......

来自http://code.google.com/p/device-memory-readwrite/wiki/UsageWithExamples

” ... 例如。 2:在x86 PC上读取'jiffies'的值 前面提到的'vm_img'内核模块,也向我们展示了'jiffies_64'内核全局变量的位置(它保存了当前的jiffies值);在上面的运行中,它的内核位置结果是0xc07c7a40。所以:

# ./rdmem 0xc07c7a40 ; sleep 1; ./rdmem 0xc07c7a40 ; sleep 1; ./rdmem 0xc07c7a40
        +0          +4          +8          +c            0   4   8   c   
+0000   00 1a bc 20                                       ...             
        +0          +4          +8          +c            0   4   8   c   
+0000   00 1a bd 23                                       ...#            
        +0          +4          +8          +c            0   4   8   c   
+0000   00 1a be 1f                                       ....            
# 

我们可以看到它是如何更新的......(实际上,这个系统上的CONFIG_HZ = 250,并且预计还会有一些+因子......)。 ... “

Pl查看项目页面了解详细信息。 它被发现对驱动程序开发人员非常有用 - 例如,他们可以探测/更改寄存器值而无需编写代码:) 请给它一个旋转!

答案 3 :(得分:0)

如果安装了源,

locate jiffies

schould显示.c和.h文件,如:

/usr/src/linux-headers-$(uname -r)/include/linux/jiffies.h

答案 4 :(得分:0)

当你从内核代码中引用jiffies时,就会发生这种情况。您认为在正常使用中需要改进什么?如果您需要地址,只需使用&jiffies

答案 5 :(得分:0)

我认为你想要的是从用户空间访问jiffies值。

您可以编写一个小模块,将jiffies变量公开给proc文件。