我已经使用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补丁修补我的内核时,没有创建这样的文件。
答案 0 :(得分:1)
real time scheduler
和各种其他依赖内核选项的存在是使内核实时的原因。如果这是在源中选择的默认调度程序,则它是实时的。您可以在源代码中放置一些printfs
来检查代码是否正在执行,并使用dmesg
进行检查。
您需要使用kgdb
或其他调试工具调试内核,以了解您收到错误的原因。