如何查找正在使用的内核是否是实时的

时间:2014-02-26 04:04:14

标签: linux linux-kernel

我已经使用rt补丁修补了Linux内核3.2,然后安装了它。现在在GRUB菜单中,我可以选择内核,它还包含后缀-rt。但我仍然不确定它是否真的具有实时功能。有没有办法找出它是实时内核还是普通的vanilla内核? 进一步根据rtwiki中的示例,通知我们是使用vanilla还是rt preempt内核。

#include <string.h>
#include <stdio.h>
#include <sys/utsname.h>
int main(int argc, char **argv)
{
struct utsname u;
int crit1, crit2 = 0;
FILE *fd;
uname(&u);
crit1 = strcasestr (u.version, "PREEMPT RT");
if ((fd = fopen("/sys/kernel/realtime","r")) != NULL) {
int flag;
crit2 = ((fscanf(fd, "%d", &flag) == 1) && (flag == 1));
fclose(fd);
}
fprintf(stderr, "this is a %s kernel\n",
(crit1 && crit2) ? "PREEMPT RT" : "vanilla");
}

这段代码访问的是一个名为realtime的文件来自sys / kernel,但是当我用rt补丁修补我的内核时,没有创建这样的文件。

1 个答案:

答案 0 :(得分:1)

real time scheduler和各种其他依赖内核选项的存在是使内核实时的原因。如果这是在源中选择的默认调度程序,则它是实时的。您可以在源代码中放置一些printfs来检查代码是否正在执行,并使用dmesg进行检查。

您需要使用kgdb或其他调试工具调试内核,以了解您收到错误的原因。