получить температуру процессора на Linux Ubuntu 12.10 с четырехъядерным процессором AMD FX 4100

Есть много подобных вопросов, но я не нашел решения там.

Как я могу получить температуру процессора в C или C ++ в Linux Ubuntu 12.10 без звонка sensors? Конечно, я могу просто прочитать его из файла, но не могу найти, где он хранится в 12.10. И возможно ли простое чтение текстового файла или я могу запросить ядро, используя системный вызов или сигнал?

Содержимое моей папки / proc / acpi / просто

event  wakeup

Нет там THEMP0 или чего-то подобного. sensors Однако приложение может отображать температуру на моей машине.

нет /sys/class/thermal/thermal_zone0/ каталог

в /sys/class/thermal я имею

cooling_device0@  cooling_device1@  cooling_device2@  cooling_device3@

Я пытаюсь просмотреть ле датчики Исходный код в поисках того, как он восстанавливает температуру, но пока безрезультатно, но я близко Файл

http://lm-sensors.org/browser/lm-sensors/trunk/lib/sysfs.c

особенно:

строка 846:

846 int sensors_read_sysfs_attr(const sensors_chip_name *name,
847                             const sensors_subfeature *subfeature,
848                             double *value)

5

Решение

Согласно документация по sysfs, информация датчиков хранится в /sys/class/hwmon с разным каталогом для каждого чипа. Что согласуется с результатами, которые я вижу на моем Ubuntu 13.10.

Файлы, используемые датчиками:

/sys/class/hwmon/hwmon*/device/temp*

В зависимости от количества чипов / виртуальных устройств, может быть много hwmon каталоги.

Вывод на мою двухъядерную систему:

$ pwd
/sys/class/hwmon
$ ls -l
total 0
lrwxrwxrwx 1 root root 0 May 17 14:29 hwmon0 -> ../../devices/virtual/hwmon/hwmon0
lrwxrwxrwx 1 root root 0 May 17 14:29 hwmon1 -> ../../devices/platform/coretemp.0/hwmon/hwmon1
lrwxrwxrwx 1 root root 0 May 17 14:29 hwmon2 -> ../../devices/pci0000:00/0000:00:01.0/0000:01:00.0/hwmon/hwmon2

куда hwmon1 это один для моих процессоров:

$ pwd
/sys/class/hwmon/hwmon1/device
$ ls -l
total 0
lrwxrwxrwx 1 root root    0 May 17 14:29 driver -> ../../../bus/platform/drivers/coretemp
drwxr-xr-x 3 root root    0 May 17 14:29 hwmon
-r--r--r-- 1 root root 4096 May 17 23:21 modalias
-r--r--r-- 1 root root 4096 May 17 14:29 name
drwxr-xr-x 2 root root    0 May 17 23:21 power
lrwxrwxrwx 1 root root    0 May 17 14:29 subsystem -> ../../../bus/platform
-r--r--r-- 1 root root 4096 May 17 14:29 temp2_crit
-r--r--r-- 1 root root 4096 May 17 14:29 temp2_crit_alarm
-r--r--r-- 1 root root 4096 May 17 14:29 temp2_input
-r--r--r-- 1 root root 4096 May 17 23:11 temp2_label
-r--r--r-- 1 root root 4096 May 17 14:29 temp2_max
-r--r--r-- 1 root root 4096 May 17 14:29 temp3_crit
-r--r--r-- 1 root root 4096 May 17 14:29 temp3_crit_alarm
-r--r--r-- 1 root root 4096 May 17 14:29 temp3_input
-r--r--r-- 1 root root 4096 May 17 23:11 temp3_label
-r--r--r-- 1 root root 4096 May 17 14:29 temp3_max
-rw-r--r-- 1 root root 4096 May 17 14:29 uevent

Значения от temp2* а также temp3* соответствовать core 0 а также core 1 соответственно. В основном это файлы sensors читать данные из. В зависимости от ваших аппаратных устройств, ваш каталог ЦП (hwmon1 в моем случае) с температурой информация может отличаться.

3

Другие решения

На основе lm-сенсоров и ответа Blue Moon я написал этот код, который отлично работает на Ubuntu 12.10 с четырехъядерным процессором AMD FX 4100:

int main(void) {

double value;
int TEMP_IDX_MAX = 3;
FILE *f;
const char* n[] = {"/sys/class/hwmon/hwmon0/device/temp1_input",
"/sys/class/hwmon/hwmon0/device/temp2_input",
"/sys/class/hwmon/hwmon0/device/temp3_input"};

for ( int i = 0; i < TEMP_IDX_MAX; ++i) {
if ( ( f = fopen( n[i], "r"))) {

int res, err = 0;
errno = 0;
res = fscanf( f, "%lf", &value);
if ( res == EOF && errno == EIO)
err = -SENSORS_ERR_IO;
else if ( res != 1)
err = -SENSORS_ERR_ACCESS_R;
res = fclose( f);
if ( err)
return err;

if ( res == EOF) {
if ( errno == EIO)
return -SENSORS_ERR_IO;
else
return -SENSORS_ERR_ACCESS_R;
}
value /= get_type_scaling( SENSORS_SUBFEATURE_TEMP_INPUT);
} else
return -SENSORS_ERR_KERNEL;

printf( "%lf\n", value);
}

return 0;
}

Код (это всего лишь пример) можно найти Вот, а также Вот это инструмент регистрации

1

По вопросам рекламы [email protected]