mirror of
https://github.com/reactos/reactos.git
synced 2025-08-04 05:55:45 +00:00
add EMU_TYPE_XEN and initial Xen detection (including hvm support)
svn path=/trunk/; revision=32898
This commit is contained in:
parent
06e11512f9
commit
1dcd1dfce4
2 changed files with 72 additions and 11 deletions
|
@ -53,6 +53,7 @@ namespace Sysreg_
|
||||||
string RosBootTest::ROS_EMU_TYPE= "ROS_EMU_TYPE";
|
string RosBootTest::ROS_EMU_TYPE= "ROS_EMU_TYPE";
|
||||||
string RosBootTest::EMU_TYPE_QEMU = "qemu";
|
string RosBootTest::EMU_TYPE_QEMU = "qemu";
|
||||||
string RosBootTest::EMU_TYPE_VMWARE = "vmware";
|
string RosBootTest::EMU_TYPE_VMWARE = "vmware";
|
||||||
|
string RosBootTest::EMU_TYPE_XEN = "xen";
|
||||||
string RosBootTest::ROS_HDD_IMAGE= "ROS_HDD_IMAGE";
|
string RosBootTest::ROS_HDD_IMAGE= "ROS_HDD_IMAGE";
|
||||||
string RosBootTest::ROS_CD_IMAGE = "ROS_CD_IMAGE";
|
string RosBootTest::ROS_CD_IMAGE = "ROS_CD_IMAGE";
|
||||||
string RosBootTest::ROS_MAX_TIME = "ROS_MAX_TIME";
|
string RosBootTest::ROS_MAX_TIME = "ROS_MAX_TIME";
|
||||||
|
@ -64,6 +65,7 @@ namespace Sysreg_
|
||||||
string RosBootTest::ROS_EMU_KILL = "ROS_EMU_KILL";
|
string RosBootTest::ROS_EMU_KILL = "ROS_EMU_KILL";
|
||||||
string RosBootTest::ROS_EMU_MEM = "ROS_EMU_MEM";
|
string RosBootTest::ROS_EMU_MEM = "ROS_EMU_MEM";
|
||||||
string RosBootTest::ROS_BOOT_CMD = "ROS_BOOT_CMD";
|
string RosBootTest::ROS_BOOT_CMD = "ROS_BOOT_CMD";
|
||||||
|
string RosBootTest::XEN_CONFIG_FILE = "XEN_CONFIG_FILE";
|
||||||
|
|
||||||
#ifdef __LINUX__
|
#ifdef __LINUX__
|
||||||
string RosBootTest::ROS_EMU_PATH = "ROS_EMU_PATH_LIN";
|
string RosBootTest::ROS_EMU_PATH = "ROS_EMU_PATH_LIN";
|
||||||
|
@ -621,6 +623,7 @@ namespace Sysreg_
|
||||||
m_DataSource = new NamedPipeReader();
|
m_DataSource = new NamedPipeReader();
|
||||||
if (!executeBootCmd())
|
if (!executeBootCmd())
|
||||||
{
|
{
|
||||||
|
|
||||||
cerr << "Error: failed to launch emulator with: " << m_BootCmd << endl;
|
cerr << "Error: failed to launch emulator with: " << m_BootCmd << endl;
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -628,6 +631,50 @@ namespace Sysreg_
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//---------------------------------------------------------------------------------------
|
||||||
|
bool RosBootTest::xenGetCaps()
|
||||||
|
{
|
||||||
|
FILE *fp;
|
||||||
|
int ch, i;
|
||||||
|
char buffer[2048];
|
||||||
|
|
||||||
|
fp = popen("xm info", "r");
|
||||||
|
if (!fp)
|
||||||
|
{
|
||||||
|
cerr << "Error getting Xen caps." << endl;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
for (i=0;(i<2049)&&(feof(fp) == 0 && ((ch = fgetc(fp)) != -1)); i++)
|
||||||
|
{
|
||||||
|
buffer[i] = (char) ch;
|
||||||
|
}
|
||||||
|
buffer[i] = '\0';
|
||||||
|
pclose(fp);
|
||||||
|
|
||||||
|
if (strstr(buffer, "hvm") == 0)
|
||||||
|
{
|
||||||
|
cerr << "No hvm support detected!" << endl;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
//---------------------------------------------------------------------------------------
|
||||||
|
bool RosBootTest::configureXen()
|
||||||
|
{
|
||||||
|
if (!xenGetCaps())
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
cerr << "Xen isn't supported yet." << endl;
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
//---------------------------------------------------------------------------------------
|
//---------------------------------------------------------------------------------------
|
||||||
bool RosBootTest::configureVmWare()
|
bool RosBootTest::configureVmWare()
|
||||||
{
|
{
|
||||||
|
@ -637,17 +684,25 @@ namespace Sysreg_
|
||||||
//---------------------------------------------------------------------------------------
|
//---------------------------------------------------------------------------------------
|
||||||
bool RosBootTest::readConfigurationValues(ConfigParser &conf_parser)
|
bool RosBootTest::readConfigurationValues(ConfigParser &conf_parser)
|
||||||
{
|
{
|
||||||
#if 0
|
|
||||||
if (!conf_parser.getStringValue(RosBootTest::ROS_EMU_TYPE, m_EmuType))
|
if (!conf_parser.getStringValue(RosBootTest::ROS_EMU_TYPE, m_EmuType))
|
||||||
{
|
{
|
||||||
cerr << "Error: ROS_EMU_TYPE is not set" << endl;
|
cerr << "Error: ROS_EMU_TYPE is not set" << endl;
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
if (ROS_EMU_TYPE == "xen")
|
||||||
|
{
|
||||||
|
if (!conf_parser.getStringValue(RosBootTest::XEN_CONFIG_FILE, m_XenConfig))
|
||||||
|
{
|
||||||
|
cerr << "Error: XEN_CONFIG_FILE is not set" << endl;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (!conf_parser.getStringValue(RosBootTest::ROS_EMU_PATH, m_EmuPath))
|
if (!conf_parser.getStringValue(RosBootTest::ROS_EMU_PATH, m_EmuPath))
|
||||||
{
|
{
|
||||||
cerr << "Error: ROS_EMU_PATH is not set" << endl;
|
cerr << "Error: ROS_EMU_PATH_[LIN/WIN] is not set" << endl;
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if (!m_HDDImage.length())
|
if (!m_HDDImage.length())
|
||||||
|
@ -702,7 +757,7 @@ namespace Sysreg_
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
#if 0
|
|
||||||
if (m_EmuType == EMU_TYPE_QEMU)
|
if (m_EmuType == EMU_TYPE_QEMU)
|
||||||
{
|
{
|
||||||
if (!configureQemu())
|
if (!configureQemu())
|
||||||
|
@ -719,6 +774,14 @@ namespace Sysreg_
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else if (m_EmuType == EMU_TYPE_XEN)
|
||||||
|
{
|
||||||
|
if (!configureXen())
|
||||||
|
{
|
||||||
|
cerr << "Error: failed to configure xen" << endl;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
///
|
///
|
||||||
|
@ -727,13 +790,6 @@ namespace Sysreg_
|
||||||
cerr << "Error: ROS_EMU_TYPE value is not supported:" << m_EmuType << "=" << EMU_TYPE_QEMU << endl;
|
cerr << "Error: ROS_EMU_TYPE value is not supported:" << m_EmuType << "=" << EMU_TYPE_QEMU << endl;
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
#else
|
|
||||||
if (!configureQemu())
|
|
||||||
{
|
|
||||||
cerr << "Error: failed to configure qemu" << endl;
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
if (m_DelayRead)
|
if (m_DelayRead)
|
||||||
{
|
{
|
||||||
|
|
|
@ -43,6 +43,7 @@ namespace Sysreg_
|
||||||
static string ROS_EMU_TYPE;
|
static string ROS_EMU_TYPE;
|
||||||
static string EMU_TYPE_QEMU;
|
static string EMU_TYPE_QEMU;
|
||||||
static string EMU_TYPE_VMWARE;
|
static string EMU_TYPE_VMWARE;
|
||||||
|
static string EMU_TYPE_XEN;
|
||||||
static string ROS_EMU_PATH;
|
static string ROS_EMU_PATH;
|
||||||
static string ROS_HDD_IMAGE;
|
static string ROS_HDD_IMAGE;
|
||||||
static string ROS_CD_IMAGE;
|
static string ROS_CD_IMAGE;
|
||||||
|
@ -55,6 +56,7 @@ namespace Sysreg_
|
||||||
static string ROS_EMU_KILL;
|
static string ROS_EMU_KILL;
|
||||||
static string ROS_EMU_MEM;
|
static string ROS_EMU_MEM;
|
||||||
static string ROS_BOOT_CMD;
|
static string ROS_BOOT_CMD;
|
||||||
|
static string XEN_CONFIG_FILE;
|
||||||
|
|
||||||
//---------------------------------------------------------------------------------------
|
//---------------------------------------------------------------------------------------
|
||||||
///
|
///
|
||||||
|
@ -107,8 +109,10 @@ namespace Sysreg_
|
||||||
bool readConfigurationValues(ConfigParser & conf_parser);
|
bool readConfigurationValues(ConfigParser & conf_parser);
|
||||||
bool configureQemu();
|
bool configureQemu();
|
||||||
bool configureVmWare();
|
bool configureVmWare();
|
||||||
|
bool configureXen();
|
||||||
bool hasQemuNoRebootOption();
|
bool hasQemuNoRebootOption();
|
||||||
void cleanup();
|
void cleanup();
|
||||||
|
bool xenGetCaps();
|
||||||
//---------------------------------------------------------------------------------------
|
//---------------------------------------------------------------------------------------
|
||||||
///
|
///
|
||||||
/// dumpCheckpoints
|
/// dumpCheckpoints
|
||||||
|
@ -155,6 +159,7 @@ protected:
|
||||||
string m_Src;
|
string m_Src;
|
||||||
string m_DebugPort;
|
string m_DebugPort;
|
||||||
string m_PidFile;
|
string m_PidFile;
|
||||||
|
string m_XenConfig;
|
||||||
|
|
||||||
DataSource * m_DataSource;
|
DataSource * m_DataSource;
|
||||||
OsSupport::ProcessID m_Pid;
|
OsSupport::ProcessID m_Pid;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue