- Ryzen/Threadripper temperature sensors: Which senors are related to which kernel modules and how to enable them
- 1. Example results looking in /sys
- 2. I found the module name, now.
- Мониторинг температуры AMD Ryzen в Linux с помощью новейших модулей ядра
- Распределения
- Требования
- Сложность
- Условные обозначения
- Вступление
- Установите зависимости сборки
- Определите свой модуль
- Получить и построить
- Сборка lm_sensors
- Попробуй это
- Сделайте это постоянным
- Заключительные мысли
- Как найти установленную версию Redhat Linux
- Как вывести список всех или определенных пакетов, установленных в системе Debian / Ubuntu Linux
- Настройка Gitlab в Ubuntu Linux
Ryzen/Threadripper temperature sensors: Which senors are related to which kernel modules and how to enable them
[deleted answer by OP:] I would still like to know: what exactly is making nct6775 available now?
There are a lot of attempts at answering the general question in the following link. Unfortunately none of them are comprehensive, so I will try to improve on them. Linux: How to find the device driver used for a device?
In your case, the sensor device can be found as one of the links shown in ls -l /sys/class/hwmon/* . You could try to extend that command, and find your kernel module immediately:
ls -l /sys/class/hwmon/*/device/driver/module
However, this command makes some assumptions. It will not work in every case. If the command does not work, narrow it down by checking each individual link in the chain. There are three possible cases.
- You have a driver link, but no module link. This means the driver is built in to the kernel! Which would kind of answer your question :-). It is equally possible to ls -l on the driver link. I.e. to see the name of the driver, change the above command to remove the /module part. Often the driver name is the same as the name of the loadable module, but sometimes they are different.
- The driver link is not immediately under device , but. If the above command does not work, you might need to replace device with device/device , or so on. The device link takes you to the parent device. But sometimes the driver is on the grandparent device instead, or even further :-).
- None of the parent device (s) have a driver link, or there is no parent device link at all. The device link takes you to the parent device. For example, you might have a network device /sys/class/wlan0 , and /sys/class/wlan0/device might point to a PCI card which provides wlan0 . In your case, I can imagine it not having anything like a device on the standard pci bus. In this case the driver is supposed to define its own custom device, in /sys/devices/platform/ . This is exactly what the coretemp driver for my Intel CPU does. But if your driver got this wrong, it would create a device with no parent, and hence no device link. Sensors ( hwmon devices) are one of the more obscure child devices; I’ve seen this happen several times before. Looking in ls /sys/devices/virtual/* , I seem to have three devices that get this wrong, and all of them are hwmon devices. If there is no «physical» / parent device — then there can be no driver . This is expected behaviour for genuinely virtual devices, like loopback ( lo ) or bridge networking devices. It reflects the device model of the Linux kernel. On a physical device, you can remove the driver that is bound to a it, and potentially bind a different driver. It wouldn’t make sense to support this without having a physical device. It’s just unfortunate because there is no equivalent method like this, to find the module that implements a virtual device.
1. Example results looking in /sys
$ cd /sys/class/hwmon/ $ ls -l * total 0 lrwxrwxrwx. 1 root root 0 Dec 2 17:50 hwmon0 -> ../../devices/virtual/thermal/thermal_zone0/hwmon0 lrwxrwxrwx. 1 root root 0 Dec 2 17:50 hwmon1 -> ../../devices/virtual/hwmon/hwmon1 lrwxrwxrwx. 1 root root 0 Dec 2 17:50 hwmon2 -> ../../devices/virtual/thermal/thermal_zone8/hwmon2 lrwxrwxrwx. 1 root root 0 Dec 2 17:50 hwmon3 -> ../../devices/platform/coretemp.0/hwmon/hwmon3 $ ls -l hwmon3/device/driver/module lrwxrwxrwx. 1 root root 0 Dec 2 18:32 /sys/class/hwmon/hwmon3/device/driver/module -> ../../../../module/coretemp
But the other results did not look so helpful :-). What is virtual/thermal/thermal_zone0/hwmon0 ?
hwmon devices (and some other types) also have a name . E.g. the iwlwifi sensor, which is really provided by my Intel Wi-Fi card. But the driver is buggy and declared it as a virtual device.
$ head */name ==> hwmon0/name hwmon1/name hwmon2/name hwmon3/name
Here's a different device, where the driver is on the "grandparent":
$ ls -l */device/device/driver lrwxrwxrwx. 1 root root 0 Dec 2 18:33 /sys/class/hwmon/hwmon0/device/device/driver -> ../../../../bus/acpi/drivers/thermal
Also there is no module for this driver, because this one is built-in to the kernel. You can confirm this if you can find the corresponding option in the kernel build configuration. This is not necessarily named the same as the module though.
$ ls -l */device/device/driver/module ls: cannot access '*/device/device/driver/module': No such file or directory $ grep CORETEMP= /boot/config-$(uname -r) CONFIG_SENSORS_CORETEMP=m $ grep ACPI_THERMAL= /boot/config-$(uname -r) CONFIG_ACPI_THERMAL=y
2. I found the module name, now.
You said you're not 100% sure what you've done. If you've found the module name, but you were worried because you can't remember if you installed it from an unknown website, here are some things you could look at.
You can reload a module and check the path your module was reloaded from:
$ modprobe --remove coretemp $ modprobe -v coretemp insmod /lib/modules/4.19.4-200.fc28.x86_64/kernel/drivers/hwmon/coretemp.ko.xz
Then you can query your package manager to confirm the module file came from the distribution kernel package. E.g. for RPM:
$ rpm -q --whatprovides /lib/modules/4.19.4-200.fc28.x86_64/kernel/drivers/hwmon/coretemp.ko.xz kernel-core-4.19.4-200.fc28.x86_64 $ rpm -q --whatprovides /boot/vmlinuz-$(uname -r) kernel-core-4.19.4-200.fc28.x86_64
Your package manager should also let you verify the installed package files have not been modified.
It's not so simple to confirm where the package came from :-). Usually you look at the package name and guess :-). You can get a list of available packages and where they come from e.g. with dnf info kernel , but I don't think dnf can show the checksum of the RPM file that was installed or of the available RPMs.
Мониторинг температуры AMD Ryzen в Linux с помощью новейших модулей ядра
Следите за температурой и напряжением системы в системе AMD Ryzen под управлением Linux.
Распределения
Все дистрибутивы с ядром 4.11 или выше.
Требования
Рабочая установка Linux с ядром 4.11 или выше и привилегиями root.
Сложность
Условные обозначения
- # - требует данных команды linux для выполнения с привилегиями root либо непосредственно как пользователь root, либо с использованием судо команда
- $ - требует данных команды linux будет выполняться как обычный непривилегированный пользователь
Вступление
Процессоры AMD Ryzen отсутствуют уже несколько месяцев, но AMD до сих пор не выпустила никаких спецификаций или кода для поддержки мониторинга температуры для датчиков ЦП в Linux.
К счастью, на материнских платах Ryzen есть довольно точные датчики, и они доступны через Linux. Вы можете полностью использовать их преимущества, только используя новейшие модули ядра и, в некоторых случаях, сам lm_sensors.
Установите зависимости сборки
Во-первых, вам нужно будет согласовать зависимости сборки для компиляции последних версий сенсорных модулей из Git.
Предполагая, что вы используете дистрибутив на основе Debian, установите следующее.
$ sudo apt install build-essential bison flex linux-headers. $ sudo apt build-dep linux. $ sudo apt build-dep lm-сенсоры.
Определите свой модуль
На платах Ryzen вы встретите два модуля. Они есть it87 и nct6775 . Практически на каждой доске есть то или иное. it87 встречается чаще.
Есть несколько способов проверить, какой на вашей доске. Проще всего выполнить поиск в Интернете. Это может ничего не сделать, поэтому вам придется использовать modprobe
Если вы скомпилировали собственное ядро, убедитесь, что вы собрали оба модуля. Ядра распространения должны иметь их в наличии. Затем попробуйте загрузить каждый из модулей. Если вы получаете сообщение об ошибке, что у вас нет этого оборудования, значит, у вас его нет. Попробуйте другой. Какой из них будет успешным, тот и нужно построить.
Получить и построить
Следующий раздел будет относиться к it87 модуль, но процесс одинаков для обоих. Просто замените на nct6775 , если он у вас есть.
Перейдите в каталог, который вы хотите создать, и клонируйте репозиторий из Git.
$ cd Загрузки. $ git clone https://github.com/groeck/it87.git.
Воспоминание: Заменять nct6775 здесь тоже.
Теперь перейдите в клонированный каталог.
В зависимости от вашего дистрибутива вам может потребоваться изменить Makefile . Он должен указывать на фактическое расположение исходного кода или заголовков вашего ядра. Если вы получите сообщение об ошибке делать не можете найти заголовки ядра, вам нужно изменить файл.
Откройте Makefile и найдите следующую строку.
KERNEL_BUILD: = / usr / src / linux-headers - $ (TARGET)
Измените его так, чтобы он указывал на фактическое расположение ваших заголовков или источника. Пример ниже работает для Gentoo.
KERNEL_BUILD: = / usr / src / linux
Как только это будет решено, вы сможете создать свой модуль.
Исходников не так много, поэтому сборка не займет много времени.
Перед установкой убедитесь, что ваш /boot перегородка смонтирована. Для установки нужен ваш System.map файл.
$ sudo mount / dev / sda1 / boot. $ sudo make install.
Сборка lm_sensors
Возможно, вам придется выполнять эту часть, а может и нет, но на самом деле это не повредит. Так что, если вы не уверены, сделайте это.
компакт диск сделайте резервную копию на один уровень и получите самые свежие исходники с помощью Git.
$ cd.. $ git clone https://github.com/groeck/lm-sensors.git.
Перейдите в новую папку и создайте ее.
$ cd lm-сенсоры. $ make -j5 все.
Не волнуйтесь, если увидите ошибки. Однако убедитесь, что компиляция действительно завершена.
Когда все будет готово, установите.
Попробуй это
Теперь вы можете загрузить модули. Использовать modprobe сделать это.
Возможно, вам потребуется принудительно задать идентификатор модуля.
$ sudo modprobe it87 force_id = 0x8622
Некоторые общие идентификаторы силы для it87: 0x8622 , 0x8628 , 0x8728 , 0x8732 . Для nct6775 попробуйте 0xd120 или 0xd352 .
Запустите демон lm_sensors (если он еще не запущен) и попытайтесь обнаружить свои датчики.
$ sudo systemctl start lm_sensors. $ sudo sensor-detect.
Вот где это может получиться странно. Он может ничего не обнаружить при сканировании. Не принимайте это за чистую монету. Беги по равнине датчики команду, чтобы убедиться. Во многих случаях вы увидите выходные данные датчиков материнской платы.
Некоторым людям может не повезти. Релиз Райзена был крайне нестабильным. Незначительные различия здесь и там были огромный влияние. Если это не помогло, регулярно проверяйте наличие обновлений и обновляйте BIOS. В конце концов, вы должны увидеть поддержку.
Сделайте это постоянным
Поздравляю! Вы зашли так далеко. Пришло время сохранить ваш прогресс, чтобы ваш компьютер использовал его при каждой загрузке.
$ sudo touch /etc/modules-load.d/it87.conf. $ sudo touch /etc/modprobe.d/it87.conf.
В /etc/modules-load.d/it87.conf , разместите строку ниже.
Затем поместите эту строку в /etc/modprobe.d/it87.conf .
параметры it87 force_id = 0x8622
Очевидно, убедитесь, что вы используете фактический модуль и принудительный идентификатор, который заставил ваши датчики работать.
Заключительные мысли
Выпуск Ryzen получился запутанным, особенно в Linux. Это не значит, что это плохая платформа. Собственно, Ryzen - отличный вариант для многопоточной рабочей станции Linux. Просто помните о потенциальных проблемах.
В этом случае эти модули ядра заставят ваши датчики температуры работать по мере необходимости. Со временем необходимость в этом отпадет, поскольку поддержка будет включена в ядро.
Подпишитесь на новостную рассылку Linux Career Newsletter, чтобы получать последние новости, вакансии, советы по карьере и рекомендуемые руководства по настройке.
LinuxConfig ищет технических писателей, специализирующихся на технологиях GNU / Linux и FLOSS. В ваших статьях будут представлены различные руководства по настройке GNU / Linux и технологии FLOSS, используемые в сочетании с операционной системой GNU / Linux.
Ожидается, что при написании статей вы сможете идти в ногу с технологическим прогрессом в вышеупомянутой технической области. Вы будете работать самостоятельно и сможете выпускать как минимум 2 технических статьи в месяц.
Как найти установленную версию Redhat Linux
С использованием systemd команда hostnamectl это самый удобный способ найти установленную версию Redhat Linux. Пользователи Red Hat Enterprise Linux Workstation также могут получить Redhat Linux из графического пользовательского интерфейса. Для по.
Как вывести список всех или определенных пакетов, установленных в системе Debian / Ubuntu Linux
Существует несколько способов определить, установлен ли уже конкретный пакет в вашей системе. Первый dpkg команда выведет список всех установленных пакетов в вашей системе:# dpkg -l. Отсюда мы можем искать конкретный пакет, указав имя пакета в кач.
Настройка Gitlab в Ubuntu Linux
Git стал системой контроля версий по умолчанию для большей части мира с открытым исходным кодом. Хотя услуги хостинга Git, такие как Github и Bitbucket, хороши и работают хорошо, они оставляют вас в зависимости от этих сервисов во всем, включая та.