我正在寻找一种方法来了解我的linux系统的cpu是否在64位模式下运行。我必须为大学编程。我的想法是创建类似于向我提供信息的功能。我不知道该如何开始。有人可以给我一个想法吗?我的大学给了我一个代码,但是我无法检查主要发送给funktion的参数的长度是64位。 我的代码是这样的:
int main()
{
uint32_t msr = assembleMSR( 0, 0, 0, 0 );
printf("assembled MSR is %#x, should be 0\n", msr);
printf("is64BitMode(&msr) should be 0, is %d\n", is64BitMode(&msr));
printf("is64BitMode(&msr) should my EXAMPLE, is %d\n", is64BitMode(&msr2));
enableInts( &msr);
printf("MSR with ints enabled is %#x, should be 0x8000\n", msr);
return 0;
}
int is64BitMode ( uint32_t *MSR ) {
int longi=sizeof(MSR);
printf("longi de size of%d\n", longi);
printf("%d\n", __WORDSIZE);// with this sentence i know that my cpu is running on 64 bits.
(void) MSR;
return 0;
/* TODO */
}
答案 0 :(得分:0)
如果您想确定CPU的可能性:
使用:
$ grep flags /proc/cpuinfo
然后你会观察结果:
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe nx lm constant_tsc pni monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr lahf_lm
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe nx lm constant_tsc pni monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr lahf_lm
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe nx lm constant_tsc pni monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr lahf_lm
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe nx lm constant_tsc pni monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr lahf_lm
如果存在标志lm
,则表示长模式CPU - 64位CPU。
或者您可以使用命令:
lshw
它会在32位内核上产生清晰的结果,例如:
# 32-bit Kernel
$ lshw -class cpu
*-cpu:0
description: CPU
product: Intel(R) Core(TM)2 CPU 4300 @ 1.80GHz
vendor: Intel Corp.
physical id: 400
bus info: cpu@0
version: 6.15.2
serial: 0000-06F2-0000-0000-0000-0000
slot: Microprocessor
size: 1800MHz
width: 64 bits
clock: 800MHz
capabilities: boot fpu fpu_exception wp vme de pse tsc msr pae mce cx8 apic mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe x86-64 constant_tsc pni monitor ds_cpl est tm2 ssse3 cx16 xtpr lahf_lm
configuration: id=1
*-logicalcpu:0
description: Logical CPU
physical id: 1.1
width: 64 bits
capabilities: logical
*-logicalcpu:1
description: Logical CPU
physical id: 1.2
width: 64 bits
capabilities: logical
在64位内核上,例如:
# 64-bit Kernel
*-cpu
description: CPU
product: Intel(R) Core(TM) i5 CPU M 560 @ 2.67GHz
vendor: Intel Corp.
physical id: 6
bus info: cpu@0
version: Intel(R) Core(TM) i5 CPU M 560 @ 2.67GHz
slot: None
size: 1199MHz
capacity: 1199MHz
width: 64 bits
clock: 133MHz
capabilities: fpu fpu_exception wp vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx rdtscp x86-64 constant_tsc arch_perfmon pebs bts rep_good xtopology nonstop_tsc aperfmperf pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 cx16 xtpr pdcm sse4_1 sse4_2 popcnt aes lahf_lm ida arat tpr_shadow vnmi flexpriority ept vpid cpufreq
configuration: cores=2 enabledcores=2 threads=4
如果要确定内核属性:
使用Maxime的solution并使用uname -m
或lscpu
。
答案 1 :(得分:0)
您可以使用uname
检查处理器是否为64位:
uname -m
我系统上的示例:
x86_64
使用选项-r
,您可以检查内核是32位还是64位:
% uname -r
3.2.0-4-amd64
您将能够知道支持的模式,但不知道使用的模式:
% lscpu
Architecture: x86_64
CPU op-mode(s): 32-bit, 64-bit
...
正如Zegar在his answer中建议的那样,您也可以使用grep flags /proc/cpuinfo
并查找lm
标记。或者使用lshw
。