在运行时检查 Linux 内核配置

标签 c linux linux-kernel

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

最佳答案

找了半天无果,自己开发了一个功能。这是代码:

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;

关于在运行时检查 Linux 内核配置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22240476/

相关文章:

应用程序能否以编程方式生成自己的堆栈跟踪?

c - 尝试更改指针会阻止程序执行

java - 替代 Fedora 上的机器人类

python - 从 Python 调用写入文件的程序 - 我可以避免 IO 吗?

c++ - C 中 ubuntu 上的性能计数器库

c - fseek 的性能开销是多少?

c - 如何有效地修补外部库并将其编译到 C 项目的 Makefile 中?

c - 如何使用 Windows 7 设置 Geany?

PHP 无法在 Linux 上运行

java - root 和其他帐户使用的文件描述多于 ulimit 配置的文件描述