我想得到Linux“jiffies”变量的物理地址,这样我就可以通过读取这个内存地址的内容来读取它。
答案 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也有一些您可能感兴趣的信息。
答案 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文件。