【问题标题】:how to find if the kernel being used is real time or not如何查找正在使用的内核是否是实时的
【发布时间】:2014-02-26 04:04:13
【问题描述】:

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

#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");
}

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

【问题讨论】:

  • uname -r 将显示内核版本。
  • @rakib ya 即使它在后缀中显示 rt,但这是我使用 enogh 实时安装的方法。现在有什么办法可以激活实时内核
  • 因为当我尝试运行实时程序时,我收到类似“sched_setscheduler failed: Operation not allowed”的错误。
  • @user3351066 我认为这就足够了,正如@rackib 所说,您可以使用uname -r 进行检查,这样您就会得到-rt** 后缀`,例如uname -a Linux krachkiste 2.6.18-rt5 #3 PREEMPT Thu Oct 06 14:28:47 CEST 2006 i686 GNU/Linux
  • @user3351066 另请注意,您必须启用CONFIG_PREEMPT_RT 并按照以下屏幕截图pengutronix.de/images/rt-wiki/menuconfig1.PNGpengutronix.de/images/rt-wiki/menuconfig1.PNGpengutronix.de/images/rt-wiki/menuconfig1.PNG 进行一些其他配置

标签: linux linux-kernel


【解决方案1】:

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

您需要使用kgdb 或其他调试工具来调试内核,看看为什么会出现错误。

【讨论】:

    猜你喜欢
    • 2012-07-31
    • 1970-01-01
    • 2013-04-09
    • 2015-06-24
    • 2013-05-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多