CoreMod
From Wiki.cyring.fr
(Difference between revisions)
| Line 1: | Line 1: | ||
| - | ===== | + | === How To === |
| + | ==== Requirements ==== | ||
| + | Mandatory, | ||
| + | * The GNU/Linux x86_64 3.x : [http://www.kernel.org/ linux]<br /> | ||
| + | * The GNU Compiler Collection: [http://gcc.gnu.org gcc] - or - The C language family frontend for LLVM: [http://clang.llvm.org/ clang]<br /> | ||
| + | * Being root ! | ||
| + | * The Intel(R) Core(TM) i7, i5 Processors<br /> | ||
| + | <br /> | ||
| + | Optionally, | ||
| + | * The GNU Debugger: [http://www.gnu.org/software/gdb/ gdb]<br /> | ||
| + | * and a graphical front-end for gdb: [http://www.gnu.org/software/ddd/ ddd]<br /> | ||
| + | * The [http://www.intel.com/content/www/us/en/architecture-and-technology/64-ia-32-architectures-software-developer-vol-3a-3b-system-programming-manual.html Intel 64 and IA-32 Architectures Software Developer’s Manual] Volume 3<br /> | ||
| + | * The [http://www.dmtf.org/standards/smbios SMBIOS Reference Specification] (C) Distributed Management Task Force<br /> | ||
| + | <br /> | ||
| + | ==== Compiling ==== | ||
| + | <syntaxhighlight lang="c"> | ||
| + | $ gcc coremod.c -o coremod | ||
| + | </syntaxhighlight> | ||
| + | - or - | ||
| + | <syntaxhighlight lang="c"> | ||
| + | $ clang coremod.c -o coremod | ||
| + | </syntaxhighlight> | ||
| + | <br /> | ||
| + | ==== Debugging ==== | ||
| + | First of all, compile sources with the -g switch then launch the debugger<br /> | ||
| + | <syntaxhighlight lang="c"> | ||
| + | $ kdesu ddd ./coremod | ||
| + | </syntaxhighlight> | ||
| + | <br /> | ||
| + | ==== Usage ==== | ||
| + | Two kernel modules must be loaded | ||
| + | # msr | ||
| + | # dmi-sysfs | ||
| + | <br /> | ||
| + | Execute CoreMod as root | ||
| + | <syntaxhighlight lang="bash"> | ||
| + | # ./coremod | ||
| + | </syntaxhighlight> | ||
| + | <br /> | ||
| + | Usage is straightforward. Just enter the corresponding initial character to the function you want to execute. | ||
| + | Thus to show the core temperature, press the following keys:<br /> | ||
| + | * [s] | ||
| + | * [Enter] | ||
| + | * [c] | ||
| + | * [Enter] | ||
| + | And for instance to go back to previous menu level:<br /> | ||
| + | * [<] | ||
| + | * [Enter] | ||
| + | <br /> | ||
| + | Discover the other functions to dump your components ! | ||
| + | <br /> | ||
| + | ==== Contact ==== | ||
| + | === Releases === | ||
| + | ==== Release 2012-0.1.2 ==== | ||
| + | ===== coremod.h ===== | ||
| + | ===== coremod.c ===== | ||
| + | ==== Release 2012-0.1.1 ==== | ||
| + | ===== coremod.c ===== | ||
<syntaxhighlight lang="c" line start="1"> | <syntaxhighlight lang="c" line start="1"> | ||
// coremod.c - CyrIng 2012 | // coremod.c - CyrIng 2012 | ||
| Line 88: | Line 145: | ||
return(rc); | return(rc); | ||
} | } | ||
| - | |||
| - | |||
| - | |||
| - | |||
| - | |||
| - | |||
</syntaxhighlight> | </syntaxhighlight> | ||
Revision as of 20:51, 9 July 2012
Contents |
How To
Requirements
Mandatory,
- The GNU/Linux x86_64 3.x : linux
- The GNU Compiler Collection: gcc - or - The C language family frontend for LLVM: clang
- Being root !
- The Intel(R) Core(TM) i7, i5 Processors
Optionally,
- The GNU Debugger: gdb
- and a graphical front-end for gdb: ddd
- The Intel 64 and IA-32 Architectures Software Developer’s Manual Volume 3
- The SMBIOS Reference Specification (C) Distributed Management Task Force
Compiling
$ gcc coremod.c -o coremod
- or -
$ clang coremod.c -o coremod
Debugging
First of all, compile sources with the -g switch then launch the debugger
$ kdesu ddd ./coremod
Usage
Two kernel modules must be loaded
- msr
- dmi-sysfs
Execute CoreMod as root
# ./coremod
Usage is straightforward. Just enter the corresponding initial character to the function you want to execute.
Thus to show the core temperature, press the following keys:
- [s]
- [Enter]
- [c]
- [Enter]
And for instance to go back to previous menu level:
- [<]
- [Enter]
Discover the other functions to dump your components !
Contact
Releases
Release 2012-0.1.2
coremod.h
coremod.c
Release 2012-0.1.1
coremod.c
// coremod.c - CyrIng 2012#include <stdio.h>#include <stdlib.h>#include <unistd.h>#include <sys/stat.h>#include <fcntl.h>// Intel® 64 and IA-32 Architectures Software Developer’s Manual// Vol. 3C § 34-1// Table 34-2. IA-32 Architectural MSRs#define IA32_PERF_STATUS 0x198// System Management BIOS (SMBIOS) Reference Specification// Version: 2.7.1 § 7.5// Table 20 – Processor Information (Type 4) Structure#define SMBIOS_PROCINFO_STRUCTURE 4#define SMBIOS_PROCINFO_INSTANCE 0#define SMBIOS_PROCINFO_EXTCLK 0x12int Read_MSR(int cpu, off_t offset, unsigned long long *msr) {
ssize_t retval=0;
char pathname[32]="";
int fd=0, rc=-1;
sprintf(pathname, "/dev/cpu/%d/msr", cpu);
if( (fd=open(pathname, O_RDONLY)) != -1 ) {
retval=pread(fd, msr, sizeof *msr, offset);
close(fd);
rc=(retval != sizeof *msr) ? -1 : 0;
}return(rc);
}int Read_SMBIOS(int structure, int instance, off_t offset, void *buf, size_t nbyte) {
ssize_t retval=0;
char pathname[]="/sys/firmware/dmi/entries/999-99/raw";
int fd=0, rc=-1;
sprintf(pathname, "/sys/firmware/dmi/entries/%d-%d/raw", structure, instance);
if( (fd=open(pathname, O_RDONLY)) != -1 ) {
retval=pread(fd, buf, nbyte, offset);
close(fd);
rc=(retval != nbyte) ? -1 : 0;
}return(rc);
}int Get_Ratio(int target) {
unsigned long long msr=0;
if( Read_MSR(target, IA32_PERF_STATUS, &msr) != -1)
return((int) msr);
elsereturn(0);
}int External_Clock() {
int clock=0;
if( Read_SMBIOS(SMBIOS_PROCINFO_STRUCTURE, SMBIOS_PROCINFO_INSTANCE, SMBIOS_PROCINFO_EXTCLK, &clock, 1) != -1)
return(clock);
elsereturn(0);
}int main(int argc, char *argv[]) {
int target=0, first=0, last=0, clock=0, ratio=0, rc=0;
switch(argc) {
case 2: first = atoi(argv[1]);
last = first;
break;
case 3: first = atoi(argv[1]);
last = atoi(argv[2]);
break;
}if((clock=External_Clock())!=0)
for(target=first; target<=last && (ratio=Get_Ratio(target)) != 0; target++)
printf("Processor#%d : Ratio[%d] x Clock[%d] = %d Mhz\n", target, ratio, clock, ratio*clock);
elserc=-1;
return(rc);
}