在运行时检查Linux内核配置

时间:2014-03-07 02:47:42

标签: c linux linux-kernel

是否有任何C函数可以检查是否设置了Linux内核配置选项(CONFIG_AAAA文件中的/boot/config-选项)? 或者我必须自己开发它。

2 个答案:

答案 0 :(得分:1)

经过长时间的搜索没有结果,我自己开发了一个功能。这是代码:

static int is_kconfig_set(const char *config) {
    int ret = 0;
    struct utsname utsname;
    char pattern[BUFSIZ], buf[BUFSIZ];
    FILE *fp = NULL;

    if (uname(&utsname) == -1)
        return 0;

    memset(pattern, 0, sizeof(pattern));
    memset(buf, 0, sizeof(buf));
    sprintf(pattern, "%s=y", config);
    sprintf(buf, "/boot/config-%s", utsname.release);

    fp = fopen(buf, "r");
    if (fp == NULL)
        return 0;

    while(fgets(buf, sizeof(buf), fp) != NULL) {
        if (strncmp(buf, pattern, strlen(pattern)) == 0) {
            ret = 1;
            break;
        }
    }

    fclose(fp);
    return ret;
}

检查是否设置了CONFIG_CPU_FREQ:

if (is_kconfig_set("CONFIG_CPU_FREQ"))
    return 1;
return 0;

答案 1 :(得分:0)

我能想到的唯一方法是按照kernel/configs.c中的方法创建自己的方法(这是创建/proc/config.gz的代码)。