Howdy xen folks,
I am having trouble creating a new device type (e.g., vif, vbd, vtpm). I
call this new device type "meter".
I'm using an up-to-date xen-unstable tree. When I start a guest domain
(with a "meter" domain configuration option), the startup process hangs
for two minutes and produces a "Error: Device 0 (meter) could not be
connected. Hotplug scripts not working" message. The guest domain is then
stuck in the "paused" state until I kill it.
During this, the xenbus successfully probes the backend, and the correct
"frontend" and "frontend-id" are available to the backend on the xenbus.
I've included the "xm log" error and a summary of the files I've modified
below.
My questions are:
1. Have I left out modifying a necessary file when creating a new device
type?
2. Any ideas as to what could be going on that's preventing my new guest
domain from starting?
3. Once it's working with dom0 as the backend, will it be possible to
start my backend in a non-dom0 domain, or is the code not to that point
yet?
I was able to create this new device on the xen-unstable tree from a month
ago, but I can't get things going on recent trees.
Thanks for anything!
JLG
------------------------------------------------------------------------
[2005-11-12 14:38:11 xend] DEBUG (DevController:69) Waiting for devices
meter.
[2005-11-12 14:38:11 xend] DEBUG (DevController:75) Waiting for 0.
[2005-11-12 14:40:11 xend] ERROR (SrvBase:87) Request wait_for_devices
failed.
Traceback (most recent call last):
File "/usr/lib/python/xen/web/SrvBase.py", line 85, in perform
return op_method(op, req)
File "/usr/lib/python/xen/xend/server/SrvDomain.py", line 68, in
op_wait_for_devices
return self.dom.waitForDevices()
File "/usr/lib/python/xen/xend/XendDomainInfo.py", line 1200, in
waitForDevices
self.waitForDevices_(c)
File "/usr/lib/python/xen/xend/XendDomainInfo.py", line 856, in
waitForDevices_
return self.getDeviceController(deviceClass).waitForDevices()
File "/usr/lib/python/xen/xend/server/DevController.py", line 71, in
waitForDevices
return map(self.waitForDevice, self.deviceIDs())
File "/usr/lib/python/xen/xend/server/DevController.py", line 80, in
waitForDevice
raise VmError( ("Device %s (%s) could not be connected. "
VmError: Device 0 (meter) could not be connected. Hotplug scripts not
working
------------------------------------------------------------------------
I have taken the following steps:
- Edited tools/python/xen/xm/create.py to add a "meter" device to the list
of options configuration device list:
config_devs.append(['device', ['meter']])
- Edited tools/python/xen/xend/XendDomainInfo.py to add a new Meterif
controller class:
addControllerClass('meter', meterif.MeterifController)
- Added a new file tools/python/xen/xend/server/meterif.py with defaults
for that new class:
def getDeviceDetails(self, config):
"""@see DevController.getDeviceDetails"""
devid = self.allocateDeviceID()
return (devid, {}, {})
def configuration(self, devid):
result = DevController.configuration(self, devid)
return result
- Added new kernel compilation options for CONFIG_XEN_METERDEV_FRONTEND
and CONFIG_XEN_METERDEV_BACKEND to the appropriate files in
linux-2.6-xen-sparse/arch/xen: Kconfig, configs/xen0_defconfig_x86_32,
configs/xenU_defconfig_x86_32, such that the "meterfront" device is
compiled into xenU kernels and the "meterback" device is compiled into
xen0 kernels.
- Added a new file
linux-2.6-xen-sparse/drivers/xen/meterfront/meterfront.c (along with
Kconfig and Makefile, following the example in the netfront directory).
The file is very simple, containing only enough code to register with the
xenbus, such as:
static struct xenbus_driver meterfront = {
.name = "meter",
.owner = THIS_MODULE,
.ids = meterfront_ids,
.probe = meterfront_probe,
.remove = meterfront_remove,
.resume = meterfront_resume,
.suspend = meterfront_suspend,
};
static void __init init_meter_xenbus(void)
{
xenbus_register_driver(&meterfront);
}
- Added a new file linux-2.6-xen-sparse/drivers/xen/meterback/meterback.c
(along with xenbus.c and Makefile, following the example in the netback
directory), again with simple entries:
void meterif_xenbus_init(void)
{
xenbus_register_backend(&meterback);
}
- Edited the file linux-2.6-xen-sparse/drivers/xen/Makefile to compile
meterfront and meterback depending on the kernel compilation options.
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel
|