2014-05-17 9 views
5

के साथ लिनक्स उबंटू 12.10 पर सीपीयू तापमान प्राप्त करें इस तरह के कई प्रश्न हैं लेकिन मुझे वहां समाधान नहीं मिला है।एएमडी एफएक्स 4100 क्वाड कोर

मैं लिनक्स उबंटू 12.10 पर सी या सी ++ में सीपीयू तापमान कैसे प्राप्त कर सकता हूंsensors पर कॉल किए बिना? मैं निश्चित रूप से इसे फ़ाइल से पढ़ सकता हूं, हालांकि मुझे यह नहीं पता कि यह कहां से 1210 में संग्रहीत है। और केवल पाठ फ़ाइल को पढ़ने की संभावना सरल है या शायद मैं सिस्टम कॉल या सिग्नल का उपयोग कर कर्नेल से पूछ सकता हूं?

मेरी फ़ोल्डर/proc/ACPI की सामग्री/बस

event wakeup 

वहाँ कोई THEMP0 या इस तरह कुछ भी नहीं है। sensors एप्लिकेशन हालांकि मेरी मशीन पर तापमान प्रदर्शित कर सकता है।

कोई /sys/class/thermal/thermal_zone0/ निर्देशिका

/sys/class/thermal में मैं

[email protected] [email protected] [email protected] [email protected] 

मैं यह कैसे तापमान अब तक प्राप्त करता है, कोई लाभ नहीं हुआ के लिए खोज में lm-sensors स्रोत कोड ब्राउज़ करने के लिए कोशिश कर रहा हूँ है, हालांकि मैं करीब हूँ। फ़ाइल

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) 
+0

'strace -f/usr/bin/सेंसर 2> और 1 | grep open' यह देखने के लिए कि 'सेंसर' खुलता है, आपको एक सुराग दे सकता है। – nos

उत्तर

3

sysfs documentation के अनुसार, सेंसर जानकारी प्रत्येक चिप के लिए अलग निर्देशिका के साथ /sys/class/hwmon के तहत संग्रहीत किया जाता है। जो मेरे उबंटू 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 मेरे CPU के लिए एक है:

$ 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 मेरे मामले में) अलग हो सकती है।

+0

धन्यवाद,/sys/class/hwmon/hwmon2/device/temp1_input जो मैं – 4pie0

1

एल एम-सेंसर और ब्लू मून का जवाब के आधार पर मैं इस कोड है कि AMD FX 4100 क्वाड कोर प्रोसेसर के साथ उबंटू 12.10 पर ठीक काम करता है लिखा है:

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; 
} 

एक कोड (यह सिर्फ उदाहरण है) हो सकता है here मिला, और here एक लॉगिंग उपकरण है।

+0

'/ sys/class/hwmon/hwmonX/device/name' के लिए देख रहा था, यह जांचने के लिए उपयोग किया जा सकता है कि यह हार्डवेयर है जिसमें आप रुचि रखते हैं (' सीपीयू के लिए कोरटेमप ') अधिक पोर्टेबल बनाने के लिए सीपीयू डायर ('hwmon2') सभी मशीनों पर समान ओएस का उपयोग भी नहीं हो सकता है। –

संबंधित मुद्दे