LINUX.ORG.RU

различие между target девайсами

 ,


0

1

доброй ночи, ЛОР!

че-то на ночь глядя потянуло меня на всякие «эксперименты»:
вот приспичило в ран-тайме из ядра понимать, на какой машине загружен драйвер... пока что вариантов немного - спец.девайс и всё остальное (ноуты, десктопы, планшеты).

Конечно, нет ничего понятнее, проще и безкомпромиснее чем параметр модуля, но это я берегу на «принудительное указание».

пока что нашел, что можно с DMI.

#include <linux/init.h>
#include <linux/module.h>
#include <linux/list.h>
#include <linux/dmi.h>
#include <linux/mod_devicetable.h>

static int __init dmiscan_init(void)
{
        int i, n;

        for (i = 1; i < DMI_OEM_STRING - 1; i++)
                printk("%d. %s\n", i, dmi_get_system_info(i));
        return 0;
}

static void __exit dmiscan_exit(void)
{
}

MODULE_LICENSE("GPL");
MODULE_DESCRIPTION("sample dmi scan module.");
MODULE_VERSION("0.01");

module_init(dmiscan_init);
module_exit(dmiscan_exit);

а способа хитрее не существует? // без эвристики, если можно :)

★★★★★

Последнее исправление: metawishmaster (всего исправлений: 1)

Под x86 можно вызвать cpuid, потом по таблице проверить какой процессор, может там как-то хитрее поле есть ноутбук/не ноут.

ЗЫ это конечно же не учитывает случая, когда ноутбучный чип в корпус с десктопной картой собирают.

ac130kz ★★
()
Последнее исправление: ac130kz (всего исправлений: 1)

Если есть возможность, то надо из dts информацию доставать. Если его нет, то можно попытаться прочитать ACPI-таблицы (тот же DSDT), но тот уже начнется эвристика. В DSDT как минимум есть CPUID для идентификации CPU.

maxis11
()
Последнее исправление: maxis11 (всего исправлений: 1)