Helps to understand lm-sensors in Altera Cyclone V SoC as full-stack task: implement it in schematics, configure device-tree, detect it on i2c bus, attach hwmon driver to it and perform end-user configuration of sensors app.
lm-sensors in embedded systems: from schematics to management from linux
1. Павел Курочкин General R&D, 2017
lm-sensors в embedded
От схемотехники до управления в linux
LM -- Linux Monitoring
2. Павел Курочкин General R&D, 2017
О чём пойдёт речь?
● Какую проблему решаем
● Схема, архитектура
● Чип сенсора в device-tree
● Детектим чип сенсора в linux
● hwmon userspace-интерфейс
● Конфигурируем sensors
● Конфигурируем управление вентиляторами
● Демо на живом устройстве
2
3. Павел Курочкин General R&D, 2017
Какую задачу решаем?
● Мониторинг напряжений на плате (3.3 В, 2.5 В, 5 В)
● Мониторинг напряжений БП (12 В)
● Мониторинг температуры (процессор, БП, среднее)
● Автоматическое управление вентиляторами
Нужен контроль подсистемы из linux!
3
5. Павел Курочкин General R&D, 2017
Компоненты схемы
● adt7463 -- аналог National lm85
● ads7830 -- многоканальный АЦП
● Температурные сенсоры: 2N3906 и NTC-термистор
● AC/DC -- адаптер ~220V в 12V
● Power supply -- источники питания
5
6. Павел Курочкин General R&D, 2017
adt7463
Схемотехника:
● Мониторинг напряжений и температуры
● Автономное управление вентиляторами
● https://www.onsemi.com/pub/Collateral/ADT7463-D.PDF
Linux:
● https://www.kernel.org/doc/Documentation/hwmon/lm85
● modprobe lm85
6
13. Павел Курочкин General R&D, 2017
hwmon
● Documentation/hwmon
/sys/class/hwmon
Documentation/hwmon/sysfs-interface
13
14. Павел Курочкин General R&D, 2017
hwmon sysfs interface
● Напряжение
● Ток
● Мощность
● Температура
● Вторжение
● Обороты вентиляторов
● PWM
● Можно использовать без sensors
● Documentation/hwmon/sysfs-interface
Наш случай
14
16. Павел Курочкин General R&D, 2017
ads7830 sysfs interface
# ls /sys/class/hwmon/hwmon2/
device in1_input in3_input in5_input in7_input subsystem
in0_input in2_input in4_input in6_input name uevent
16
17. Павел Курочкин General R&D, 2017
Checkpoint 1
Имеем:
● Возможность настраивать и измерять
● Полный доступ к чипам по i2c
Ещё нужно:
● Дать мнемонические названия
● Конвертировать попугаев в Вольты и градусы
● Настроить пределы
● Настроить автоматическое управление вентиляторами
17
18. Павел Курочкин General R&D, 2017
sensors без конфига
# sensors
adt7463-i2c-0-2d
Adapter: Synopsys DesignWare I2C adapter
in0: +0.00 V (min = +0.00 V, max = +3.32 V) ALARM
in1: +0.01 V (min = +0.00 V, max = +2.99 V) ALARM
in2: +3.30 V (min = +2.97 V, max = +3.63 V)
in3: +0.00 V (min = +4.50 V, max = +5.50 V) ALARM
in4: +0.00 V (min = +0.00 V, max = +15.94 V) ALARM
fan1: 15000 RPM (min = 0 RPM)
fan2: 15000 RPM (min = 0 RPM)
fan3: 0 RPM (min = 0 RPM)
fan4: 15000 RPM (min = 0 RPM)
temp1: +32.0 C (low = +5.0 C, high = +50.0 C)
temp2: +34.5 C (low = +5.0 C, high = +50.0 C)
temp3: +63.0 C (low = +5.0 C, high = +85.0 C)
cpu0_vid: +0.000 V
18
19. Павел Курочкин General R&D, 2017
Конфигурируем sensors
● Каталог для конфигов /etc/sensors.d/
● Можно:
○ Назначить alias
○ Настроить min/max
○ Математические операции
○ Игнорировать поля
● ‘sensors -s’ применяет настройки
19
20. Павел Курочкин General R&D, 2017
sensors c конфигурацией
# sensors
adt7463-i2c-0-2d
Adapter: Synopsys DesignWare I2C adapter
3.3V: +3.30 V (min = +2.97 V, max = +3.63 V)
PSB1FAN: 15000 RPM (min = 0 RPM)
PSB0FAN: 15000 RPM (min = 0 RPM)
CHTEMP: +32.0 C (low = +5.0 C, high = +50.0 C)
INTTEMP: +34.5 C (low = +5.0 C, high = +50.0 C)
SOMTEMP: +62.0 C (low = +5.0 C, high = +85.0 C)
ads7830-i2c-0-48
Adapter: Synopsys DesignWare I2C adapter
PSB0TEMP: -1.87 V
PSB1TEMP: +39.69 V
3V3: +3.32 V
5V: +4.98 V
PSB0VIN: +5.74 V
PSB1VIN: +12.19 V
SYS12V: +12.07 V
20
21. Павел Курочкин General R&D, 2017
А кто будет управлять вентиляторами?
# export DEVPATH=/sys/class/hwmon/hwmon1
# echo 1 > $DEVPATH/pwm1_auto_channels
# echo 0 > $DEVPATH/pwm1_auto_pwm_min
# echo 20000 > $DEVPATH/temp1_auto_temp_min
# echo 19000 > $DEVPATH/temp1_auto_temp_off
# echo 35000 > $DEVPATH/temp1_auto_temp_max
pwm1 работает от первого канала
измерения температуры
При низкой температуре вентиляторы
не крутятся
Настраиваем границы
температурного диапазона
21
22. Павел Курочкин General R&D, 2017
Нюансы (грабли)
● При двухпроводном подключении вентиляторов PID-регулятор работать
не будет
● Требуется ручная настройка (i2cget/i2cset)
● Точность измерения низкая
22
23. Павел Курочкин General R&D, 2017
Итого
● Выбираем чип
● Находим его в Documentation/hwmon
● Прописываем в device-tree
● Находим на шине i2c
● Загружаем модуль
● Конфигурируем sensors
● Настраиваем через sysfs управление вентиляторами
23
24. Павел Курочкин General R&D, 2017
Ссылки
● https://www.kernel.org/doc/Documentation/hwmon/
● https://www.onsemi.com/pub/Collateral/ADT7463-D.PDF
● http://www.ti.com/lit/ds/symlink/ads7830.pdf
24