Как получить информацию о процессоре в модуле ядра Linux?

Я посмотрел в исходный код своего ядра и нашел следующие определения в kerneldir / arch / x86 / include / asm / processor.h:

extern void cpu_detect(struct cpuinfo_x86 *c);

Я попытался использовать это в моем модуле ядра из дерева, используя этот код:

#include <asm/processor.h>
struct cpuinfo_x86 cpu;
cpu_detect(&cpu);
if(cpu.x86_model == 28) // Intel Atom
{
    // do stuff
}

Когда я строю свой исходный код, я получаю следующие предупреждения:

Building modules, stage 2.
MODPOST 1 modules
WARNING: "cpu_detect" [<my-kernel-module-path>.ko] undefined!

Есть ли лучший способ получить информацию о процессоре из пространства ядра в моем модуле? Если способ, которым я делаю это правильно, есть ли какие-либо специальные опции связывания, которые мне нужно передать, чтобы я мог получить объектный код?

1 ответ

static int cpu_info_print(void){
    unsigned int cpu = 0;
    struct cpuinfo_x86 *c;
    for_each_online_cpu(cpu)
    {
        const char *vendor = NULL;
        c = &cpu_data(cpu);
        if (c->x86_vendor < X86_VENDOR_NUM) {
            vendor = "Unknown";
        } else {
            if (c->cpuid_level >= 0)
                vendor = c->x86_vendor_id;
        }

        if (vendor && !strstr(c->x86_model_id, vendor))
            pr_cont("%s ", vendor);

        if (c->x86_model_id[0])
            pr_cont("%s", c->x86_model_id);
        else
            pr_cont("%d86", c->x86);

        pr_cont(" (family: 0x%x, model: 0x%x", c->x86, c->x86_model);

        if (c->x86_stepping || c->cpuid_level >= 0)
            pr_cont(", stepping: 0x%x)\n", c->x86_stepping);
        else
            pr_cont(")\n");
    }
    return 0;
}

Я не нашел никакой информации о cpu_detect, но поиск print_cpu_info (также присутствующий в этом заголовке) нашел вопрос stackru, который имеет решение:

Используйте указатель на функцию kallsyms_lookup_name("print_cpu_info"), поскольку функция не экспортируется для модулей (используется только ядро ​​ядра)

Как мой пользовательский модуль в linux 3.2.28 может сделать вызов print_cpu_info?

Другие вопросы по тегам