mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/chenhuacai/linux-loongson
synced 2025-09-01 15:14:52 +00:00

Improve the installation procedure for the systemd service unit
'cpupower.service', to be more distro-agnostic. Do not install the
service unit configuration file to /etc/default/ (a directory that
is used by Debian and Debian-derivatives and only rarely by other
distros).
Also, clarify the role of the configuration file in its own comments.
Link: https://lore.kernel.org/linux-pm/20250509002206.bd2519ba52035d47c3c32aa6@paranoici.org/T/#ma8a3fa80acc4036af6c754e8ecabacc55b288ad1
Link: https://lore.kernel.org/r/20250513163937.61062-5-invernomuto@paranoici.org
Fixes: 9c70b779ad
("cpupower: add a systemd service to run cpupower")
Signed-off-by: Francesco Poli (wintermute) <invernomuto@paranoici.org>
Signed-off-by: Shuah Khan <skhan@linuxfoundation.org>
216 lines
7.2 KiB
Plaintext
216 lines
7.2 KiB
Plaintext
The cpupower package consists of the following elements:
|
|
|
|
requirements
|
|
------------
|
|
|
|
On x86 pciutils is needed at runtime (-lpci).
|
|
For compilation pciutils-devel (pci/pci.h) and a gcc version
|
|
providing cpuid.h is needed.
|
|
For both it's not explicitly checked for (yet).
|
|
|
|
|
|
libcpupower
|
|
----------
|
|
|
|
"libcpupower" is a library which offers a unified access method for userspace
|
|
tools and programs to the cpufreq core and drivers in the Linux kernel. This
|
|
allows for code reduction in userspace tools, a clean implementation of
|
|
the interaction to the cpufreq core, and support for both the sysfs and proc
|
|
interfaces [depending on configuration, see below].
|
|
|
|
|
|
compilation and installation
|
|
----------------------------
|
|
|
|
There are 2 output directories - one for the build output and another for
|
|
the installation of the build results, that is the utility, library,
|
|
man pages, etc...
|
|
|
|
default directory
|
|
-----------------
|
|
|
|
In the case of default directory, build and install process requires no
|
|
additional parameters:
|
|
|
|
build
|
|
-----
|
|
|
|
$ make
|
|
|
|
The output directory for the 'make' command is the current directory and
|
|
its subdirs in the kernel tree:
|
|
tools/power/cpupower
|
|
|
|
install
|
|
-------
|
|
|
|
$ sudo make install
|
|
|
|
'make install' command puts targets to default system dirs:
|
|
|
|
-----------------------------------------------------------------------
|
|
| Installing file | System dir |
|
|
-----------------------------------------------------------------------
|
|
| libcpupower | /usr/lib |
|
|
-----------------------------------------------------------------------
|
|
| cpupower | /usr/bin |
|
|
-----------------------------------------------------------------------
|
|
| cpufreq-bench_plot.sh | /usr/bin |
|
|
-----------------------------------------------------------------------
|
|
| man pages | /usr/man |
|
|
-----------------------------------------------------------------------
|
|
| systemd service | /usr/lib/systemd/system |
|
|
-----------------------------------------------------------------------
|
|
| systemd support script | /usr/libexec |
|
|
-----------------------------------------------------------------------
|
|
|
|
To put it in other words it makes build results available system-wide,
|
|
enabling any user to simply start using it without any additional steps
|
|
|
|
custom directory
|
|
----------------
|
|
|
|
There are 2 make's command-line variables 'O' and 'DESTDIR' that setup
|
|
appropriate dirs:
|
|
'O' - build directory
|
|
'DESTDIR' - installation directory. This variable could also be setup in
|
|
the 'CONFIGURATION' block of the "Makefile"
|
|
|
|
build
|
|
-----
|
|
|
|
$ make O=<your_custom_build_catalog>
|
|
|
|
Example:
|
|
$ make O=/home/hedin/prj/cpupower/build
|
|
|
|
install
|
|
-------
|
|
|
|
$ make O=<your_custom_build_catalog> DESTDIR=<your_custom_install_catalog>
|
|
|
|
Example:
|
|
$ make O=/home/hedin/prj/cpupower/build DESTDIR=/home/hedin/prj/cpupower \
|
|
> install
|
|
|
|
Notice that both variables 'O' and 'DESTDIR' have been provided. The reason
|
|
is that the build results are saved in the custom output dir defined by 'O'
|
|
variable. So, this dir is the source for the installation step. If only
|
|
'DESTDIR' were provided then the 'install' target would assume that the
|
|
build directory is the current one, build everything there and install
|
|
from the current dir.
|
|
|
|
The files will be installed to the following dirs:
|
|
|
|
-----------------------------------------------------------------------
|
|
| Installing file | System dir |
|
|
-----------------------------------------------------------------------
|
|
| libcpupower | ${DESTDIR}/usr/lib |
|
|
-----------------------------------------------------------------------
|
|
| cpupower | ${DESTDIR}/usr/bin |
|
|
-----------------------------------------------------------------------
|
|
| cpufreq-bench_plot.sh | ${DESTDIR}/usr/bin |
|
|
-----------------------------------------------------------------------
|
|
| man pages | ${DESTDIR}/usr/man |
|
|
-----------------------------------------------------------------------
|
|
| systemd service | ${DESTDIR}/usr/lib/systemd/system |
|
|
-----------------------------------------------------------------------
|
|
| systemd support script | ${DESTDIR}/usr/libexec |
|
|
-----------------------------------------------------------------------
|
|
|
|
If you look at the table for the default 'make' output dirs you will
|
|
notice that the only difference with the non-default case is the
|
|
${DESTDIR} prefix. So, the structure of the output dirs remains the same
|
|
regardles of the root output directory.
|
|
|
|
|
|
clean and uninstall
|
|
-------------------
|
|
|
|
'clean' target is intended for cleanup the build catalog from build results
|
|
'uninstall' target is intended for removing installed files from the
|
|
installation directory
|
|
|
|
default directory
|
|
-----------------
|
|
|
|
This case is a straightforward one:
|
|
$ make clean
|
|
$ make uninstall
|
|
|
|
custom directory
|
|
----------------
|
|
|
|
Use 'O' command line variable to remove previously built files from the
|
|
build dir:
|
|
$ make O=<your_custom_build_catalog> clean
|
|
|
|
Example:
|
|
$ make O=/home/hedin/prj/cpupower/build clean
|
|
|
|
Use 'DESTDIR' command line variable to uninstall previously installed files
|
|
from the given dir:
|
|
$ make DESTDIR=<your_custom_install_catalog>
|
|
|
|
Example:
|
|
make DESTDIR=/home/hedin/prj/cpupower uninstall
|
|
|
|
|
|
running the tool
|
|
----------------
|
|
|
|
default directory
|
|
-----------------
|
|
|
|
$ sudo cpupower
|
|
|
|
custom directory
|
|
----------------
|
|
|
|
When it comes to run the utility from the custom build catalog things
|
|
become a little bit complicated as 'just run' approach doesn't work.
|
|
Assuming that the current dir is '<your_custom_install_catalog>/usr',
|
|
issuing the following command:
|
|
|
|
$ sudo ./bin/cpupower
|
|
will produce the following error output:
|
|
./bin/cpupower: error while loading shared libraries: libcpupower.so.1:
|
|
cannot open shared object file: No such file or directory
|
|
|
|
The issue is that binary cannot find the 'libcpupower' library. So, we
|
|
shall point to the lib dir:
|
|
sudo LD_LIBRARY_PATH=lib64/ ./bin/cpupower
|
|
|
|
systemd service
|
|
---------------
|
|
|
|
A systemd service is also provided to run the cpupower utility at boot with
|
|
settings read from a configuration file.
|
|
|
|
If you want systemd to find the new service after the installation, the service
|
|
unit must have been installed in one of the system unit search path directories
|
|
(such as '/usr/lib/systemd/system/', which is the default location) and (unless
|
|
you are willing to wait for the next reboot) you need to issue the following
|
|
command:
|
|
|
|
$ sudo systemctl daemon-reload
|
|
|
|
If you want to enable this systemd service, edit '/etc/cpupower-service.conf'
|
|
(uncommenting at least one of the options, depending on your preferences)
|
|
and then issue the following command:
|
|
|
|
$ sudo systemctl enable --now cpupower.service
|
|
|
|
|
|
THANKS
|
|
------
|
|
Many thanks to Mattia Dongili who wrote the autotoolization and
|
|
libtoolization, the manpages and the italian language file for cpupower;
|
|
to Dave Jones for his feedback and his dump_psb tool; to Bruno Ducrot for his
|
|
powernow-k8-decode and intel_gsic tools as well as the french language file;
|
|
and to various others commenting on the previous (pre-)releases of
|
|
cpupower.
|
|
|
|
|
|
Dominik Brodowski
|