ISA 어댑터에서 CPU 코어 온도를 가져오거나 고양이하는 방법은 무엇입니까?

ISA 어댑터에서 CPU 코어 온도를 가져오거나 고양이하는 방법은 무엇입니까?

활성 코어 온도를 모니터링하기 위해 Linux에서 스크립트를 작성 중입니다.

그런 다음 CORE 0 TEMP가 40도에 도달하면 ACPI 팬을 수동으로 활성화합니다.

작업을 단순하게 유지하기 위해 bash 터미널에 명령을 입력하여 fanon이라는 요청 시 작동하는 팬 스크립트를 만들었습니다.

하지만 이 CORE 0 임시 출력을 간격(예: 2초마다)으로 업데이트되는 gettemp라는 bash 스크립트의 변수로 CAT하는 방법을 알고 싶습니다.

시계 센서를 사용하면 터미널에 다음과 같은 출력이 표시됩니다.

acpitz-virtual-0
Adapter: Virtual device
temp1:        +45.0°C  (crit = +256.0°C)
temp2:        +36.0°C  (crit = +105.0°C)
temp3:        +32.0°C  (crit = +105.0°C)
temp4:        +24.1°C  (crit = +105.0°C)
temp5:       +100.0°C  (crit = +110.0°C)

coretemp-isa-0000
Adapter: ISA adapter
Core 0:       +41.0°C  (crit = +100.0°C) <--- This is the temp I need!
Core 1:       +38.0°C  (crit = +100.0°C) 

다음을 수행하려면 어떻게든 Core 0 Temp를 찾아야 합니다.

Core0Temp=$(cat /PATH/TO/ISA/TEMP/GOES/HERE)
Core1Temp=$(cat /PATH/TO/ISA/TEMP2/GOES/HERE)

그럼 난 할 수 있어

if [ $Core0Temp -gt "40" ]; then
echo "Exceeding Temp Value. Enabling Fan."
/var/tempmon/fanon
elif [ $Core0Temp -lt "40" ]; then
echo "Turning Fan Off."
/var/tempmon/fanoff
fi

나만의 냉각 메커니즘을 만들어야 하는 이유를 궁금해하는 사람이 있다면 이는 단순히 Compaq NX-6310 비즈니스 노트북을 사용하고 있기 때문입니다.

이 제품(제조업체)은 ACPI 열 이벤트를 제대로 처리하지 못하고 ACPI 팬과의 연결 상태가 매우 좋지 않습니다. Google의 많은 검색에서는 냉각 시스템을 수동으로 활성화하는 방법만 보여주었습니다. 다음과 같습니다.

echo "Enabling ACPI FAN... "
echo 1 > /sys/class/thermal/cooling_device2/cur_state
echo "Fan Enabled... "

팬을 비활성화하려면 sudo를 통해 다음 명령을 실행합니다.

echo "Disabling ACPI FAN..."
echo 0 > /sys/class/thermal/cooling_device2/cur_state
echo "Fan Disabled..."

따라서 표준 노트북에서 기대하는 것처럼 열 칩이 온도를 보고하고 이에 따라 팬을 활성화할 수 있도록 이 스크립트를 작성해야 합니다. 실제 중심 온도가 어디에 있는지 찾을 수 없습니다. 시계 센서에서는 찾을 수 있지만 저는 찾을 수 없습니다.

답변1

예, ACPI 온도는 이보다 낮지 /sys/class/thermallm_sensors하드웨어 모니터링 센서는 이보다 낮습니다 /sys/class/hwmon/.

내 시스템에는 , 및 아래 /sys/class/hwmon/에 세 개의 하위 디렉터리가 있습니다 . 내 경우 이 모듈은 다음과 같습니다 . 시스템에 따라 다를 수 있습니다. 간단히 실행하여 각 하위 디렉터리를 식별할 수 있습니다 . 여기서 N은 숫자입니다.hwmon0hwmon1hwmon2coretemphwmon1cat /sys/class/hwmon/hwmonN/name

coretemp내 시스템의 온도 값은 각각 /sys/class/hwmon/hwmon1/temp2_input및 입니다 /sys/class/hwmon/hwmon1/temp3_input. 특정 CPU 모델에 따라 이러한 파일 이름의 숫자가 tempN_input실제 숫자와 다를 수도 있습니다. 이 값은 섭씨 천분의 1도입니다. 즉, 41000은 섭씨 41.0도입니다.

답변2

sysfs가 설치되어 있는 경우(기본적으로 설치되어 있어야 함) 에서 임시 판독값을 찾을 수 있습니다 /sys/class/thermal/thermal_zoneX/temp.

내 컴퓨터에서는 다음 방법이 성공했습니다.

$ cat /sys/class/thermal/thermal_zone0/temp
27800
$ cat /sys/class/thermal/thermal_zone1/temp
29800
$ sensors
acpitz-virtual-0
Adapter: Virtual device
temp1:        +27.8°C  (crit = +105.0°C)
temp2:        +29.8°C  (crit = +105.0°C)

답변3

11시간이 지났는데..아직 살아있어요!

——ACPI Thermal CPU 위첨자의 탄생.


이름을 지어줬어요, 템몬!


나는 그것을 모두 이해합니다.

  • 임시값을 구하는 방법을 알아냈습니다...
  • 내가 찾은 내용을 위 첨자로 바꾸었습니다…

이 스크립트를 작성하는 데는 엄청난 코딩 세션이 소요되었습니다...

몇 시간 동안 디버깅하고 테스트했지만 꿈처럼 작동했습니다.

아직 완전히 완성된 것은 아니며 여기저기서 약간의 수정이 이루어졌지만 작동하고 지속적입니다!

  • 온도를 확인하고,
  • 코어 0 온도 판독값을 기반으로 ACPI 팬을 켜고 끕니다.

다시 저온으로 돌아가면..

  • 동일한 프로세스 내에서 자동으로 다시 실행됩니다!
  • tput 및 setaf인 $($tput $setaf $xwhite)의 경우 색상으로 구분되어 있지만 해당 태그를 제거하고 기본으로 유지할 수 있습니다.

SUDO/ROOT로 실행해야 합니다.


전체 완성된 스크립트를 아래에 넣겠습니다. 여기에는 명령이 너무 많기 때문에 몇 시간 전에 제가 질문한 내용을 완전하게 완성하지 않고서는 만족시킬 수 없으며, 완전히 답변하고 스스로 해결하지 못할 것입니다. 문제는 완전한 코드가 없다는 것입니다!

또한 이 수정 사항은 실제로 HP 커뮤니티의 Compaq NX-6310 비즈니스 노트북에 대한 심각한 버그 수정 사항입니다! 및 기타 - 어쩌면 이러한 유형의 노트북을 사용하는 다른 사용자가 이 기능이 유용하다고 생각할 수도 있고, 다른 사용자도 비슷한 ACPI 열 문제를 겪고 있을 수도 있습니다. Linux Debian 9에서는 ACPI가 ACPI 팬 자체를 트리거하지 않습니다... 그런 다음 붐, 과열 = 노트북이 정지됩니다.

http://forum.notebookreview.com/threads/acpi-issues-overheating-badly-due-to-fan-not-coming-on-hp-nx6325.113746/


  # HP COMPAQ NX6310 - Reported Issue over@http://forum.notebookreview.com/threads/acpi-issues-overheating-badly-due-to-fan-not-coming-on-hp-nx6325.113746/
  #!/bin/bash
  # TEMPMON - THE CPU/ACPI THERMAL MONITORING MECHANISM 
  #FOR THE COMPAQ NX6310 ACPI-CPU-THERMAL FAN ISSUE
  #######################
  # STACK EXCHANGE QUESTION: BY SHAUN SHORTY CASSIDY.
  # https://unix.stackexchange.com/questions/418919/how-to-obtain-cat-cpu-core-temp-from-isa-adapter-debian/418935#418935
  # How to obtain/cat CPU Core Temp from ISA Adapter? - Debian
  # STATUS: SOLVED BY THIS SCRIPT.
  ######################
  # Clear the Terminal
  #-------------------------------------------------------------------------------------------------
  clear
  # Enter into script directory
  cd /var/tempmon/
  # Include Terminal Color Sheet.
  . ./style/colors
  ## Using Sed from:
  ## https://stackoverflow.com/questions/16623835/remove-a-fixed-prefix-
  suffix-from-a-string-in-bash
  ## CREATE PREFIX AND SUFFIX FOR STRING MANIPULATION.
  tempSuffix=".0°C"
  tempPrefix="+"
  ## SET UP GUI INTERFACE
  echo "$($tput $setaf $xwhite)----------------------------------------------------"
  echo "$($tput $setaf $xcyan)       tempmon | The CPU/ACPI Thermal Monitoring Script!"
  echo "$($tput $setaf $xred)----------------------------------------------------"
  ## GET THE CORE TEMPS AT SCRIPT STARTUP.
  echo "$($tput $setaf $xwhite)Getting Core 0 temp from Sensors."
  echo "$($tput $setaf $xwhite)Getting Core 1 temp from Sensors."
  echo "$($tput $setaf $xmagenta)Getting ACPI Fan Status from Sensors."
  sleep 0.1
  #-------------------------------------------------------------------------------------------------
  ## READ THE SENSORS
  Core0Temp=$(sensors | grep -i "Core 0:" | awk '{print $3}')
  Core1Temp=$(sensors | grep -i "Core 1:" | awk '{print $3}')
  ## SETUP THE ACPI FAN SENSOR
  # FAN SENSOR FILE                     
  Fan0_File="/sys/class/thermal/cooling_device2/cur_state"  
  # FAN SENSOR STATUS                       
  Fan0_Status=$(cat $Fan0_File)         
  # FAN MODULE ON                           
  Fan0_On="1"                                   
  # FAN MODULE OFF                      
  Fan0_Off="0"                          
  #-------------------------------------------------------------------------------------------------
  echo "$($tput $setaf $xred)----------------------------------------------------"                          
  echo "$($tput $setaf $xcyan)Configuring Core 0 temp into Readable Format."                                
  echo "$($tput $setaf $xwhite)Configuring Core 1 temp into Readable Format."                               
  ## CONFIGURE THE TEMPS FOR THE SCRIPTS USE.                   
  sleep 0.1                         
  Core0Temp1=$(echo "$Core0Temp" | sed -e "s/^$tempPrefix//" -e "s/$tempSuffix$//")             
  Core1Temp1=$(echo "$Core1Temp" | sed -e "s/^$tempPrefix//" -e "s/$tempSuffix$//")             
  echo "$($tput $setaf $xred)----------------------------------------------------"                          
  echo "$($tput $setaf $xcyan)Starting CPU Monitor: Core Temp 0: "$Core0Temp1""$tempSuffix                      
  echo "$($tput $setaf $xwhite)Starting CPU Monitor: Core Temp 1: "$Core1Temp1""$tempSuffix                     
  ## SET THE TEMP MARKER - STARTING TEMP                    
  ## SET THE TEMP START -  THRESHOLD TEMP               
  #-------------------------------------------------------------------------------------------------
  tempMarker="35"
  tempIDLE=$(echo $tempMarker)                                      
  tempStart="35"
  sleep 0.1
  echo "$($tput $setaf $xred)----------------------------------------------------"                          
  echo "$($tput $setaf $xwhite)Setting Initial Temp Marker @ "$tempMarker$tempSuffix                            
  echo "$($tput $setaf $xwhite)Setting Initial Temp Threshold @ "$tempStart$tempSuffix                          
  sleep 0.1                                                 
  echo "$($tput $setaf $xred)----------------------------------------------------"                          
  ## IF CPU CORE 0 TEMP IS GREATER THAN IDLE TEMP OF 35;THEN RUN LOOP..                         
  ## (HAS TO BE LOW TO TRIGGER THE LOOP)        
  #-------------------------------------------------------------------------------------------------                                #
  while true; do
  if [ $Core0Temp1 -gt $tempMarker ]; then                                  
      ## THEN NOTIFY TERMINAL THAT TEMP HAS EXCEEDED THRESHOLD TEMP                         
      echo "$($tput $setaf $xyellow)###################################################"    
      echo "$($tput $setaf $xwhite)        Exceeding Temp of: $($tput $setaf $xcyan)"$tempStart$tempSuffix                                  
      echo "$($tput $setaf $xyellow)###################################################"
      ## NOTIFY USER THAT MACHINE IS ENABLING THE ACPI FAN... (REQUIRES SUDO TO DO)                 
      echo "$($tput $setaf $xred)======================================================="   
      echo "$($tput $setaf $xcyan)--------------            Checking the ACPI Fan."                                         
      echo "$($tput $setaf $xwhite)====================================================="   
      ## THEN ENABLE THE FAN UNTIL;                                         
      ## but before enabling the fan... we must check to see if it is already active... 
      ## no point turning on a lightbulb when its already on...
      if [ $Fan0_Status -eq $Fan0_On  ]; then
        echo "$($tput $setaf $xyellow)/////////////////////////////////////////////"        
        echo "$($tput $setaf $xwhite)              ERROR! --- ACPI Fan 0: Already Enabled!"
        echo "$($tput $setaf $xyellow)/////////////////////////////////////////////"            
            elif [ $Fan0_Status -eq $Fan0_Off ]; then
                echo $Fan0_On > $Fan0_File      
                echo "$($tput $setaf $xyellow)/////////////////////////////////////////////"                                    
                echo "$($tput $setaf $xwhite)             ACPI Fan 0: Enabling..."                                          
                echo "$($tput $setaf $xyellow)/////////////////////////////////////////////"
    fi
echo "----------------------------------------------------"                         
      ## Until Loop: https://stackoverflow.com/questions/29692893/read-variable-until-output-is-greater-than-a-certain-value-in-bash
  #-------------------------------------------------------------------------------------------------------------
  until [ ${Core0Temp1} -lt $tempStart ]; do                                    
      sleep 1                                                       
      ## CORE 0 TEMP RETURNS TO LESS THAN THE THRESHOLD TEMP;                               
      ## RUN EVERY SECOND                                               
      ## ON EVERY SECOND GET UPDATED TEMP VALUES                                    
      ## AND ON EVERY SECOND GET THE ACPI FAN CURRENT STATUS (SUDO NEEDED!)                     
Fan0_Status=$(cat $Fan0_File) 
    if [ $Fan0_Status -eq $Fan0_On ]; then                                      
        sleep 1
        echo "$($tput $setaf $xyellow)/////////////////////////////////////////////"
        echo "$($tput $setaf $xwhite)                               ACPI_FAN0 IS ENABLED"                                       
        echo "$($tput $setaf $xyellow)/////////////////////////////////////////////"
    elif [ $Fan0_Status -eq $Fan0_Off ]; then
        sleep 1
        echo "$($tput $setaf $xyellow)/////////////////////////////////////////////"
        echo "$($tput $setaf $xwhite)                               ACPI_FAN0 IS DISABLED"
        echo "$($tput $setaf $xyellow)/////////////////////////////////////////////"
    fi
Core0Temp=$(sensors | grep -i "Core 0:" | awk '{print $3}')                         
Core0Temp1=$(echo "$Core0Temp" | sed -e "s/^$tempPrefix//" -e "s/$tempSuffix$//")               
## DISPLAY THE UPDATED TEMP VALUES TO THE TERMINAL                              
echo "Core 0 Temp IS: "$Core0Temp1""$tempSuffix                                 
## THEN ALSO EVERY SECOND, RUN A CHECK TO SEE IF THE TEMP                           
## HAS RETURNED TO LESS THAN THE THRESHOLD TEMP                                 
    if [ $Core0Temp1 -lt $tempStart ]; then                                     
        ## IF THE TEMP HAS RETURNED TO LESS THAN THE THRESHOLD TEMP                         
        ## THEN DISABLE THE FAN AND NOTIFY TERMINAL                                 
        ## but again, run a check to first see if it is active.
        ## you cant turn of a light thats already off right? ;)
        ## if active then disable. if not, then dont. cause its off.
        if [ $Fan0_Status -eq $Fan0_Off  ]; then
            echo "$($tput $setaf $xyellow)/////////////////////////////////////////////"                
            echo "$($tput $setaf $xwhite)/                   ERROR!                   /"
            echo "$($tput $setaf $xyellow)/////////////////////////////////////////////"
            echo "$($tput $setaf $xwhite)/        ACPI Fan 0: Already Disabled!       /"
            echo "$($tput $setaf $xyellow)/////////////////////////////////////////////"
        elif [ $Fan0_Status -eq $Fan0_On ]; then
            echo $Fan0_Off > $Fan0_File
            echo "$($tput $setaf $xcyan)###################################################"                                                                                     #
            echo "$($tput $setaf $xyellow)------------ACPI Fan 0: Disabled ./"
            echo "$($tput $setaf $xcyan)###################################################"                                                                                    #
        fi
        echo "$($tput $setaf $xwhite)###################################################"
        echo "$($tput $setaf $xcyan)--------- Core Temp Returned to: @"$tempStart""$tempSuffix
        echo "$($tput $setaf $xwhite)###################################################"
    fi
  done
  #-------------------------------------------------------------------------------------------------
  #fi   # this fi gets moved down under the return block.
  #-------------------------------------------------------------------------------------------------
  ## So what do we do if the temp is less than the predefined temp?
  ## We repeat the until function but, in a reverse order.
  ## this is so that the script runs in a kind of (>---<>---<) see saw effect...
  ## back and fourth, to and fro right.
  until [ ${Core0Temp1} -gt $tempStart ]; do                                    
   sleep 1                                                      
## CORE 0 TEMP RETURNS TO LESS THAN THE THRESHOLD TEMP;                             
## RUN EVERY SECOND                                             
## ON EVERY SECOND GET UPDATED TEMP VALUES                                  
## AND ON EVERY SECOND GET THE ACPI FAN CURRENT STATUS (SUDO NEEDED!)                       
Fan0_Status=$(cat $Fan0_File) 
    if [ $Fan0_Status -eq $Fan0_Off ]; then                                     
        sleep 1
        echo "$($tput $setaf $xwhite)/////////////////////////////////////////////"             
        echo "$($tput $setaf $xwhite)--------------------ACPI_FAN0 IS DISABLED./"
        echo "$($tput $setaf $xwhite)/////////////////////////////////////////////"             
    elif [ $Fan0_Status -eq $Fan0_On ]; then
        sleep 1
        echo "$($tput $setaf $xwhite)/////////////////////////////////////////////"             
        echo "$($tput $setaf $xwhite)--------------------ACPI_FAN0 IS ENABLED/./"
        echo "$($tput $setaf $xwhite)/////////////////////////////////////////////"             
    fi
      Core0Temp=$(sensors | grep -i "Core 0:" | awk '{print $3}')                           
      Core0Temp1=$(echo "$Core0Temp" | sed -e "s/^$tempPrefix//" -e "s/$tempSuffix$//")             
## DISPLAY THE UPDATED TEMP VALUES TO THE TERMINAL
echo "$($tput $setaf $xwhite)==============================================="                               
echo "$($tput $setaf $xwhite)           Core 0 Temp IS: "$Core0Temp1""$tempSuffix           
echo "$($tput $setaf $xwhite)==============================================="                       
## THEN ALSO EVERY SECOND, RUN A CHECK TO SEE IF THE TEMP                           
## HAS RETURNED TO LESS THAN THE THRESHOLD TEMP                                 
    if [ $Core0Temp1 -gt $tempStart ]; then                                     
        ## IF THE TEMP HAS RETURNED TO greater THAN THE THRESHOLD TEMP                          
        ## THEN ENABLE THE FAN AND NOTIFY TERMINAL                                  
        ## but again, run a check to first see if it is active.
        ## you cant turn ON a light thats already ON right? ;)
        ## if active then disable. if not, then dont. cause its off.
        if [ $Fan0_Status -eq $Fan0_On  ]; then
            echo "$($tput $setaf $xyellow)/////////////////////////////////////////////"                
            echo "$($tput $setaf $xwhite)                  ERROR!                   /"
            echo "$($tput $setaf $xyellow)/////////////////////////////////////////////"
            echo "$($tput $setaf $xwhite)        ACPI Fan 0: Already Enabled!       /"
            echo "$($tput $setaf $xyellow)/////////////////////////////////////////////"
        elif [ $Fan0_Status -eq $Fan0_Off ]; then
            echo $Fan0_On > $Fan0_File
            echo "$($tput $setaf $xred)-------------------------------------------"                                                                                      #
            echo "$($tput $setaf $xwhite)................ACPI Fan 0: Enabled.."
            echo "$($tput $setaf $xred)-------------------------------------------"                                                                                     #
        fi
        echo "$($tput $setaf $xred)###################################################"
        echo "$($tput $setaf $xwhite)............Core Temp dropping below: @"$tempStart""$tempSuffix
        echo "$($tput $setaf $xred)###################################################"
        echo "$($tput $reset)"
    fi
  done
  #-------------------------------------------------------------------------------------------------
  fi
done
#END OF SUPERSCRIPT.

관련 정보