Может ли it87 драйвер Linux конфликтовать с BIOS или аппаратными устройствами (материнская плата ASUS M5A99FX PRO 2)? Например, в драйвере Linux есть функция (drivers/hwmon/it87.c):
/*
* Must be called with data->update_lock held, except during initialization.
* We ignore the IT87 BUSY flag at this moment - it could lead to deadlocks,
* would slow down the IT87 access and should not be necessary.
*/
static int it87_read_value(struct it87_data *data, u8 reg)
{
outb_p(reg, data->addr + IT87_ADDR_REG_OFFSET);
return inb_p(data->addr + IT87_DATA_REG_OFFSET);
}
Возможна ли следующая ситуация? Микропрограмма, работающая на ядре 0 в многоядерной системе, записывается в регистр «data-> addr + IT87_ADDR_REG_OFFSET». Затем драйвер Linux, работающий на ядре 1, выполняет it87_read_value и, таким образом, изменяет регистр «data-> addr + IT87_ADDR_REG_OFFSET». Затем прошивка пытается прочитать «data-> addr + IT87_DATA_REG_OFFSET» и получает неверные данные.
Также драйвер it87 поддерживает сигналы тревоги:«Если срабатывает сигнал тревоги, он будет срабатывать до тех пор, пока аппаратный регистр не будет прочитан хотя бы один раз. Это означает, что причина тревоги, возможно, уже исчезла! Обратите внимание, что в текущей реализации все аппаратные регистры читаются всякий раз, когда считываются какие-либо данные (если только это не менее 1,5 секунд с момента последнего обновления). Это означает, что вы можете легко пропустить однократные тревоги. "(Ядро Linux, Documentation/hwmon/it87). Возможно ли, что прошивка пропустит сигнал тревоги, если драйвер Linux считывает регистр сигналов тревоги?
Похоже, чипом аппаратного мониторинга является IT8721F.
Также материнская плата ASUS M5A99FX PRO 2 содержит TPU (процессор с турбонаддувом) и EPU (процессор с энергопотреблением). Эти микросхемы взаимодействуют с IT8721F и может ли возникнуть ситуация, аналогичная описанной?
Известно ли, как ASUS Ai Suite взаимодействует с оборудованием? Существует ли специальный интерфейс ACPI для считывания температуры, скорости вращения вентилятора и т.д., Который не реализован в Linux?
Вывод команды "датчики" (модуль it87 загружен вручную):
it8721-isa-0290
Adapter: ISA adapter
in0: +2.82 V (min = +1.96 V, max = +3.04 V)
in1: +2.84 V (min = +1.27 V, max = +2.78 V) ALARM
in2: +0.95 V (min = +3.02 V, max = +2.10 V) ALARM
+3.3V: +3.29 V (min = +2.71 V, max = +4.61 V)
in4: +1.02 V (min = +2.92 V, max = +2.41 V) ALARM
in5: +2.52 V (min = +3.04 V, max = +2.23 V) ALARM
in6: +1.92 V (min = +1.48 V, max = +1.75 V) ALARM
3VSB: +2.04 V (min = +1.94 V, max = +5.93 V)
Vbat: +3.29 V
fan1: 903 RPM (min = 22 RPM)
fan2: 0 RPM (min = 11 RPM) ALARM
fan3: 0 RPM (min = 10 RPM) ALARM
temp1: +33.0°C (low = -62.0°C, high = +109.0°C) sensor = thermistor
temp2: +32.0°C (low = -72.0°C, high = +60.0°C) sensor = thermistor
temp3: -128.0°C (low = -33.0°C, high = -125.0°C) sensor = disabled
intrusion0: OK
Fan2 и Fan3 отсутствуют, поэтому 0 об / мин является правильным.
Я не видел никаких реальных проблем, пока загружается модуль "it87" и считываются данные о температуре. Но я не уверен, что такой проблемы не возникнет.