#!/bin/bash do { #//////////////////////////////////// # DietPi CPU Info Script # #//////////////////////////////////// # Created by Daniel Knight / daniel.knight@dietpi.com / dietpi.com # #//////////////////////////////////// # # Info: # - Prints CPU information # # Usage: # - /DietPi/dietpi/dietpi-cpuinfo Obtain stats and print # - /DietPi/dietpi/dietpi-cpuinfo 2 Generates file of available, ordered scaling freq's "$FP_CPU_SCALINGAVAILABLE_FREQ" #//////////////////////////////////// #Grab Input setglobal INPUT = '0' if [[ $1 =~ ^-?[0-9]+$ ]] { setglobal INPUT = $1 } #Import DietPi-Globals --------------------------------------------------------------- source /DietPi/dietpi/func/dietpi-globals G_CHECK_ROOT_USER export G_PROGRAM_NAME='DietPi-CPU_info' #Import DietPi-Globals --------------------------------------------------------------- #Exit path for VM if sh-expr ' $G_HW_MODEL == 20 ' { echo -e "\nNotice: CPU information is not available for VM.\n" exit } #Funcs setglobal CPU_GOV_CURRENT = ''Unknown'' setglobal aCPU_CURRENT_FREQ = '0' setglobal aCPU_MIN_FREQ = '0' setglobal aCPU_MAX_FREQ = '0' setglobal aCPU_SCALINGAVAILABLE_FREQ = '0' setglobal CPU_SCALINGSUPPORTED = '1' setglobal FP_CPU_SCALINGAVAILABLE_FREQ = ''/tmp/dietpi-available_cpu_freqs'' proc Obtain_Cpu_Freq{ for ((i=0; i<$(nproc --all); i++)) do if [ -f /sys/devices/system/cpu/cpu$i/cpufreq/scaling_cur_freq ]; then aCPU_CURRENT_FREQ[$i]=$(cat /sys/devices/system/cpu/cpu$i/cpufreq/scaling_cur_freq) fi if [ -f /sys/devices/system/cpu/cpu$i/cpufreq/scaling_min_freq ]; then aCPU_MIN_FREQ[$i]=$(cat /sys/devices/system/cpu/cpu$i/cpufreq/scaling_min_freq) fi if [ -f /sys/devices/system/cpu/cpu$i/cpufreq/scaling_max_freq ]; then aCPU_MAX_FREQ[$i]=$(cat /sys/devices/system/cpu/cpu$i/cpufreq/scaling_max_freq) fi done #Obtain available scaling freqs: # - Standard if test -f /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_frequencies { for ((i=0; i<$(nproc --all); i++)) do aCPU_SCALINGAVAILABLE_FREQ[$i]=$(cat /sys/devices/system/cpu/cpu$i/cpufreq/scaling_available_frequencies | tr ' ' '\n' | sed -e 's/[^0-9]//g' | sed '/^$/d') done # - XU4 3.x } elif test -f /sys/devices/system/cpu/cpufreq/mp-cpufreq/cpu_freq_table { compat array-assign aCPU_SCALINGAVAILABLE_FREQ '0' $[cat /sys/devices/system/cpu/cpufreq/mp-cpufreq/cpu_freq_table | tr ' ' '\n' | sed -e 's/[^0-9]//g' | sed '/^$/d] } else { setglobal CPU_SCALINGSUPPORTED = '0' } } setglobal CPU_TEMP_CURRENT = ''Unknown'' setglobal CPU_TEMP_PRINT = ''Unknown'' proc Obtain_Cpu_Temp{ setglobal CPU_TEMP_CURRENT = $[G_OBTAIN_CPU_TEMP] local cpu_temp_current_f='Unknown' if [[ $CPU_TEMP_CURRENT =~ ^-?[0-9]+$ ]] { setglobal cpu_temp_current_f = $shExpr(' ( $CPU_TEMP_CURRENT * 9 / 5 ) + 32 ') if sh-expr ' $CPU_TEMP_CURRENT >= 70 ' { setglobal CPU_TEMP_PRINT = ""\e[91mWarning: $CPU_TEMP_CURRENT'c : $cpu_temp_current_f'f | Reducing the life of your device.\e[0m"" } elif sh-expr ' $CPU_TEMP_CURRENT >= 60 ' { setglobal CPU_TEMP_PRINT = ""\e[38;5;202m$CPU_TEMP_CURRENT'c : $cpu_temp_current_f'f\e[90m | Running hot, not recommended.\e[0m"" } elif sh-expr ' $CPU_TEMP_CURRENT >= 50 ' { setglobal CPU_TEMP_PRINT = ""\e[93m$CPU_TEMP_CURRENT'c : $cpu_temp_current_f'f\e[0m \e[90m | Running warm, but safe.\e[0m"" } elif sh-expr ' $CPU_TEMP_CURRENT >= 40 ' { setglobal CPU_TEMP_PRINT = ""\e[92m$CPU_TEMP_CURRENT'c : $cpu_temp_current_f'f\e[0m\e[90m | Optimal temperature.\e[0m"" } elif sh-expr ' $CPU_TEMP_CURRENT >= 30 ' { setglobal CPU_TEMP_PRINT = ""\e[96m$CPU_TEMP_CURRENT'c : $cpu_temp_current_f'f\e[0m\e[90m | Cool runnings.\e[0m"" } else { setglobal CPU_TEMP_PRINT = ""\e[96m$CPU_TEMP_CURRENT'c : $cpu_temp_current_f'f \e[0m \e[90m| Who put me in the freezer!\e[0m"" } } else { setglobal CPU_TEMP_PRINT = ""\e[91mKERNELERR: $CPU_TEMP_CURRENT'c\e[0m"" } } proc Obtain_Cpu_Gov{ if test -f /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor { setglobal CPU_GOV_CURRENT = $[cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor] } } proc Print_Stats{ echo -e "" echo -e " \e[38;5;154m─────────────────────────────────────────────────────\e[0m\n \e[1mDietPi CPU Info\e[0m\n\e[90m Use dietpi-config to change CPU / performance options\e[0m\n \e[38;5;154m─────────────────────────────────────────────────────\e[0m" #Processor Type echo -e " Architecture \e[90m|\e[0m $[uname -m]" #Current Temp echo -e " Temp \e[90m|\e[0m $CPU_TEMP_PRINT" #Current Gov echo -e " Governor \e[90m|\e[0m $CPU_GOV_CURRENT" if test $CPU_GOV_CURRENT = "ondemand" || test $CPU_GOV_CURRENT = "conservative" { echo -e " Throttle up \e[90m|\e[0m $[cat /DietPi/dietpi.txt | grep -m1 '^CONFIG_CPU_USAGE_THROTTLE_UP=' | sed 's/.*=//]% CPU usage" } #Current Frequency echo -e "" echo -e " \e[90m Current Freq Min Freq Max Freq\e[0m" for ((i=0; i<${#aCPU_CURRENT_FREQ[@]}; i++)) do echo -e " \e[90mCPU$i\e[0m \e[90m|\e[0m $(( ${aCPU_CURRENT_FREQ[$i]} / 1000 )) MHz \e[90m$(( ${aCPU_MIN_FREQ[$i]} / 1000 )) MHz $(( ${aCPU_MAX_FREQ[$i]} / 1000 )) MHz\e[0m" done echo -e "" #CPU scaling may bump up with script G_DIETPI-NOTIFY 2 'CPU current frequency, may be affected by this script, due to the processing required to run it.\n' } #///////////////////////////////////////////////////////////////////////////////////// # Main Loop #///////////////////////////////////////////////////////////////////////////////////// #----------------------------------------------------------------------------------- #Return mode if sh-expr ' $INPUT == 2 ' { Obtain_Cpu_Freq # Export to file rm $FP_CPU_SCALINGAVAILABLE_FREQ &> /dev/null if sh-expr ' $CPU_SCALINGSUPPORTED ' { for ((i=0; i<${#aCPU_SCALINGAVAILABLE_FREQ[@]}; i++)) do echo -e "${aCPU_SCALINGAVAILABLE_FREQ[$i]}" >> "$FP_CPU_SCALINGAVAILABLE_FREQ" done # Order, remove dupes sort -u -n $FP_CPU_SCALINGAVAILABLE_FREQ -o $FP_CPU_SCALINGAVAILABLE_FREQ } #Print all stats } else { Obtain_Cpu_Freq # Obtain_Cpu_Usage Obtain_Cpu_Temp Obtain_Cpu_Gov Print_Stats } #----------------------------------------------------------------------------------- #Delete[] array unset aCPU_CURRENT_FREQ unset aCPU_MIN_FREQ unset aCPU_MAX_FREQ unset aCPU_SCALINGAVAILABLE_FREQ unset afp_temperature #----------------------------------------------------------------------------------- exit #----------------------------------------------------------------------------------- }