Установка поля ACPI в Linux
У меня есть нетбук, который работает вентилятор немного раньше, на мой вкус. Я нашел решение только для Windows, чтобы уменьшить шум вентилятора, но я использую Ubuntu на этом компьютере.
В решении для Windows парень использует программу под названием Notebook Hardware Control (NHC), которая, насколько я могу судить, считывает и устанавливает значения ACPI. ( http://hpmini110c.siteboard.eu/f3t31-lueftersteuerung-fuer-den-mini.html, соответствующий источник в 7z-файле, в.cs-файле есть C#-файл с логикой для настройки вентилятора на)
Часть, которую я хотел бы найти способ воспроизвести в среде Linux:
# Where the value is being set
write = ACPI.FIELD.Write("_SP.PCIO.SBRG.ECO.CTPM", 40);
# Reading the temperature
int temp1 = 0;
bool _tmp = APCI.FIELD.Read("_SB.PCIO.SBRG.ECO.TPM1", ref temp1)
Я буду честен, потому что у меня над головой это, но если бы кто-то мог подтолкнуть меня в правильном направлении, я был бы очень благодарен!
3 ответа
Михал Котман создал модуль ядра, который позволяет вам выполнять такие команды ACPI. Он был разработан для вызова команд для переключения видеокарт, но может использоваться и для других целей. Это доступно от Github, инструкции по установке ниже:
- Установите заголовки ядра, соответствующие текущему ядру
Получить источник и построить его
git clone git://github.com/mkottman/acpi_call.git cd acpi_call make
Загрузите модуль:
/sbin/insmod acpi_call.ko
Если все прошло хорошо, вы должны иметь
/proc/acpi/call
"файл".Чтобы выполнить команду, напишите ее
/proc/acpi/call
, Я думаю, что вы сделали опечатку с_SP
и поэтому заменил его на\_SB
:echo '\_SB.PCIO.SBRG.ECO.CTPM' > /proc/acpi/call
Чтобы получить результат этой команды, проверьте ваш журнал ядра (
dmesg
) или прочитайте результат:cat /proc/acpi/call
После прочтения его значение будет очищено, поэтому обязательно сохраните вывод где-нибудь, если вы захотите использовать его позже.
Не уверен, что это именно то, что вы хотите, но вы смотрели в lm_sensors? Они поддерживают мониторинг hw с драйверами ядра, но предоставляют библиотеку пользовательского пространства.
Reflector говорит, что NHC.exe является управляемой сборкой и содержит классы, которые предоставляют ACPI.FIELD.Write()
а также ACPI.FIELD.Read()
и так далее. Автор NHC описал в файле chm, как создавать свои собственные классы, которые включают в себя вызовы этих вещей, для определенных типов оборудования, что-то вроде модели плагинов.
Однако вместо того, чтобы добавить.DLL, вы помещаете фактический код C# в специальную папку; очевидно, nhc.exe динамически компилирует и запускает этот код при запуске nhc.exe. Если все это правда, вы сможете написать свое собственное приложение, которое использует ACPI.FIELD.Read
а также Write
звонки, скомпилируйте его в exe, указав nhc.exe в качестве ссылки.
Однако, главное, что nhc.exe запутан, и все эти классы не видны. Так что вы не можете просто бежать csc.exe
и ссылка nhc.exe. Я не знаю наверняка, но мне кажется, что этот код можно запустить только в контексте nhc.exe, который выполняет специальную компиляцию для его обработки.
Другая плохая новость заключается в том, что развитие NHC, похоже, прекратилось; сайт форума мертв, а последнее обновление было с 2007 года.