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