First, remove the init.d script registration: sudo update-rc.d performance_governors.sh remove
Create a systemd service file: sudo nano /etc/systemd/system/performance_governors.service
Add this content:
[Unit]
Description=Set CPU and GPU governor to performance
After=multi-user.target
[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/etc/init.d/performance_governors.sh start
ExecStop=/etc/init.d/performance_governors.sh stop
[Install]
WantedBy=multi-user.target
Reload systemd to recognize the new service:
sudo systemctl daemon-reload
Reload systemd to recognize the new service: sudo systemctl daemon-reload
Enable and start the service:
sudo systemctl enable performance_governors
sudo systemctl start performance_governors
Check the status: sudo systemctl status performance_governors
#!/bin/bash
### BEGIN INIT INFO
# Provides: performance_governors
# Required-Start: $remote_fs $syslog
# Required-Stop: $remote_fs $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: CPU Performance Governors
# Description: Script to manage CPU performance governor settings for RK3588
### END INIT INFO
# Source function library
. /lib/lsb/init-functions
# Path to the log file
LOG="/var/log/performance_governors.log"
# Function to write to log
log_message() {
echo "$(date '+%Y-%m-%d %H:%M:%S') $1" >> "$LOG"
}
# Function to set governor
set_governor() {
local path="$1"
if [ -f "$path" ]; then
echo performance > "$path" 2>/dev/null
if [ $? -eq 0 ]; then
log_message "Successfully set performance governor for $path"
return 0
else
log_message "Failed to set performance governor for $path"
return 1
fi
else
log_message "Path does not exist: $path"
return 1
fi
}
# Function to start the service
do_start() {
log_message "Starting performance governors"
local governors=(
"/sys/class/devfreq/fb000000.gpu/governor"
"/sys/devices/system/cpu/cpufreq/policy0/scaling_governor"
"/sys/devices/system/cpu/cpufreq/policy4/scaling_governor"
"/sys/devices/system/cpu/cpufreq/policy6/scaling_governor"
"/sys/class/devfreq/dmc/governor"
"/sys/class/devfreq/fdab0000.npu/governor"
)
local failed=0
for governor in "${governors[@]}"; do
set_governor "$governor" || failed=1
done
if [ $failed -eq 0 ]; then
log_message "All performance governors set successfully"
return 0
else
log_message "Some governors failed to set"
return 1
fi
}
# Function to stop the service (reset to default)
do_stop() {
log_message "Stopping performance governors (resetting to default)"
return 0
}
# Function to check status
do_status() {
local failed=0
for governor in /sys/devices/system/cpu/cpufreq/policy*/scaling_governor; do
if [ -f "$governor" ]; then
current=$(cat "$governor")
echo "Current governor for $governor: $current"
[ "$current" != "performance" ] && failed=1
fi
done
return $failed
}
# Main script logic
case "$1" in
start)
do_start
;;
stop)
do_stop
;;
restart)
do_stop
do_start
;;
status)
do_status
;;
*)
echo "Usage: $0 {start|stop|restart|status}"
exit 1
;;
esac
exit $?
Reference: First, remove the init.d script registration: sudo update-rc.d performance_governors.sh remove Create a systemd service file: sudo nano /etc/systemd/system/performance_governors.service Add this content: [Unit] Description=Set CPU and GPU governor to performance After=multi-user.target [Service] Type=oneshot RemainAfterExit=yes ExecStart=/etc/init.d/performance_governors.sh start ExecStop=/etc/init.d/performance_governors.sh stop [Install] WantedBy=multi-user.target Reload systemd to recognize the new service: sudo systemctl daemon-reload Reload systemd to recognize the new service: sudo systemctl daemon-reload Enable and start the service: sudo systemctl enable performance_governors sudo systemctl start performance_governors Check the status: sudo systemctl status performance_governors #!/bin/bash ### BEGIN INIT INFO # Provides: performance_governors # Required-Start: $remote_fs $syslog # Required-Stop: $remote_fs $syslog # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: CPU Performance Governors # Description: Script to manage CPU performance governor settings for RK3588 ### END INIT INFO # Source function library . /lib/lsb/init-functions # Path to the log file LOG="/var/log/performance_governors.log" # Function to write to log log_message() { echo "$(date '+%Y-%m-%d %H:%M:%S') $1" >> "$LOG" } # Function to set governor set_governor() { local path="$1" if [ -f "$path" ]; then echo performance > "$path" 2>/dev/null if [ $? -eq 0 ]; then log_message "Successfully set performance governor for $path" return 0 else log_message "Failed to set performance governor for $path" return 1 fi else log_message "Path does not exist: $path" return 1 fi } # Function to start the service do_start() { log_message "Starting performance governors" local governors=( "/sys/class/devfreq/fb000000.gpu/governor" "/sys/devices/system/cpu/cpufreq/policy0/scaling_governor" "/sys/devices/system/cpu/cpufreq/policy4/scaling_governor" "/sys/devices/system/cpu/cpufreq/policy6/scaling_governor" "/sys/class/devfreq/dmc/governor" "/sys/class/devfreq/fdab0000.npu/governor" ) local failed=0 for governor in "${governors[@]}"; do set_governor "$governor" || failed=1 done if [ $failed -eq 0 ]; then log_message "All performance governors set successfully" return 0 else log_message "Some governors failed to set" return 1 fi } # Function to stop the service (reset to default) do_stop() { log_message "Stopping performance governors (resetting to default)" return 0 } # Function to check status do_status() { local failed=0 for governor in /sys/devices/system/cpu/cpufreq/policy*/scaling_governor; do if [ -f "$governor" ]; then current=$(cat "$governor") echo "Current governor for $governor: $current" [ "$current" != "performance" ] && failed=1 fi done return $failed } # Main script logic case "$1" in start) do_start ;; stop) do_stop ;; restart) do_stop do_start ;; status) do_status ;; *) echo "Usage: $0 {start|stop|restart|status}" exit 1 ;; esac exit $?