红联Linux门户
Linux帮助

探测linux是否运行xen

发布时间:2016-03-04 10:43:41来源:linux网站作者:chenyulancn

检测linux主机是否运行  xen,其原理是读取 CPUID 来判断,Xen 源代码下面有一段检测是否是 Xen 的 C 语言代码 tools/misc/xen-detect.c,这段代码提供了一个很好的例子,重写了代码,用宏替代了函数。xentest.c


#include <stdio.h> 
#include <string.h> 

#define HYPERVISOR_INFO 0x40000000 

#define CPUID(idx, eax, ebx, ecx, edx)\ 
asm volatile (\ 
"test %1,%1;jz 1f; ud2a; .ascii \"xen\"; 1: cpuid"\ 
:"=b" (*ebx), "=a" (*eax),"=c" (*ecx), "=d" (*edx)\ 
:"0"(idx) ); 

void main() 

unsigned int eax,ebx,ecx,edx; 
char string[13]; 

CPUID(HYPERVISOR_INFO, &eax, &ebx, &ecx, &edx); 
*(unsigned int *)(string+0) = ebx; 
*(unsigned int *)(string+4) = ecx; 
*(unsigned int *)(string+8) = edx;
string[12] = 0; 
if (strncmp(string, "XenVMMXenVMM",12) == 0) { 
printf("xen hvm\n"); 
} else 
printf("bare hardware\n"); 
 


此程序在ubuntu xen4.12 环境下测试通过,如果在没有安装xen的环境下运行则会出现 “Illegal instruction (core dumped)” 错误,检测 kvm功能有待进一步研究完善,与xen有区别不能通用。


本文永久更新地址:http://www.linuxdiyf.com/linux/18608.html