[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] Problem creating a new device type
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
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |