|Publication number||US6968307 B1|
|Application number||US 09/559,531|
|Publication date||Nov 22, 2005|
|Filing date||Apr 28, 2000|
|Priority date||Apr 28, 2000|
|Also published as||US7698122, US8412508, US8731898, US9733951, US20050086041, US20100153089, US20130226552, US20140222411|
|Publication number||09559531, 559531, US 6968307 B1, US 6968307B1, US-B1-6968307, US6968307 B1, US6968307B1|
|Original Assignee||Microsoft Corporation|
|Export Citation||BiBTeX, EndNote, RefMan|
|Patent Citations (11), Non-Patent Citations (2), Referenced by (38), Classifications (10), Legal Events (7)|
|External Links: USPTO, USPTO Assignment, Espacenet|
The present invention relates generally to the use of serial buses as a means of communication between electronic devices and, in particular, to virtual device driver implementation on a serial bus, such as a serial bus operating in conformance with the IEEE 1394 Serial Bus standard.
Computer systems are typically comprised of a variety of different components or devices that operate together to form the resultant system. Some of the devices are supplied with the computer system initially, such as the central processing unit, and some devices can be installed into the computer system after the initial configuration of the system. The devices of the computer system are generally coupled together via interconnects which may be of several types, such as a serial bus.
Serial buses are well known in the art. A recently developed serial bus standard is the IEEE 1394 serial bus standard, disclosed in the ISO/IEC 13213 (ANSI/IEEE 1212) CSR Architecture Specification and the IEEE 1394-1995 Serial Bus Specification, the teachings of which are herein incorporated by this reference. A typical serial bus having an IEEE 1394 standard architecture is comprised of a multiplicity of nodes that are interconnected via point-to-point links, such as cables, that each connects a single node of the serial bus to another node of the serial bus. Each node is an addressable entity that can be reset and identified. Nodes are associated with respective components of the computer system and serve as interfaces between the components and communication links. Each node has a configuration ROM (CROM), the registers of which can be accessed by software residing within the computer system. The IEEE 1394 standard sets forth a general CROM format which comprises several fields. One field in particular is the unit directory. The unit directory contains information representing the functionality of units within the node, particularly the unit's software version number and its location within the node. Generally, the information in the configuration ROM is treated as static. However, U.S. Pat. No. 6,643,714 entitled “Modification and Use of Configuration Memory Used During Operation of a Serial Bus” provides a technique for dynamically changing the configuration ROM, the teachings of which are herein incorporated by this reference. This patent describes a technique of creating multiple unit directories for multiple device representation.
Device drivers are well known in the art. When a user installs a new device on to a computer system, a device driver is loaded for communication with the device. A device driver is software within an operating system that controls a device. A virtual device driver is a special type of device driver that has full access to the operating system kernel and can communicate directly to a physical port but was loaded without a hardware device being detected or enumerated by the system. A virtual device driver manipulates kernel mode code using existing hardware resources to emulate a device that is not normally present on the computer. In connection with a 1394 serial bus, a virtual driver is given more access than a traditional device driver because it is not restricted to talking to just one particular device.
Virtual device drivers are designed to handle hardware device contention between multiple processes and to translate or buffer data transfers from a virtual machine to hardware devices. A virtual machine is a self-contained operating environment that behaves as if it were a separate computer. When two or more processes attempt to access the same device, some method of contention management must be used. A virtual device driver allows each process to act as though it has exclusive access to the device. For example, a virtual printer driver would provide the printing process with a virtual printer port, and characters written to the port would be written to a print spooler. The virtual device driver would then send the job to the printer when it becomes available. Another method would be to assign the physical device to only one process at a time, so that when a process attempts to access the device while it is in use, the virtual device driver does not pass the request to the actual hardware, and the process operates as though the hardware did not exist.
Recently, virtual device drivers have been expanded to include interprocess communication. Virtual device drivers can provide the necessary mechanisms to allow a virtual machine to see a device that may not actually exist in hardware. Virtual device drivers can also implement client-server hardware management by providing an interface to a virtual machine. Virtual device drivers also virtualize input/output to the device and translate this information into commands to be sent across a network to a hardware server.
Currently, when a device is plugged into a personal computer (PC) on a 1394 bus, the 1394 bus driver interface creates a device object. Based on the device object, the so-called plug and play (PnP) subsystem loads high level device drivers that facilitate communication between the user and the device. At this time, the PC does not emulate any device, rather the PC exposes a generic CROM on the 1394 bus. Other nodes on the bus use the CROM to detect that the PC is in fact a PC. Enumeration occurs when a node on a serial bus accesses the configuration memory of another node to see what functionality the node has. The node accessing the CROM would then load a device object and device driver according to what functionality was exposed in the configuration memory. A technique that allows device emulation on a hardware platform that runs a general purpose operating system is not currently known in the art. However, such a technique would offer significant advantages over the prior art.
A further problem with current technology is the inability of devices to communicate natively, i.e., without translations, over a serial bus. For example, streaming video between two or more PCs will typically require translations at the transmitting and receiving ends of a serial bus. A first PC may have an audio video interleave (AVI) file that it wishes to send to a second PC. AVI is currently a video standard in a “WINDOWS” brand operating system. In order to send the file, the first PC would have to convert the AVI file to network packets and then stream it over the Internet protocol (IP) network. A technique that allows devices to transmit such files over a serial bus without converting the files is not currently known in the art. However, such a technique would offer significant advantages over the prior art.
The present invention provides a way for a node, such as a personal computer (PC), on a serial bus to emulate any desired device using virtual device drivers. A PC connected to a 1394 bus exposes its CROM on the bus. The CROM presents an image to other nodes on the 1394 bus and describes the functional units supported by the node. A software driver or a virtual device driver changes the CROM by adding a unit directory detailing a connected device that the node will emulate. The CROM is changed dynamically by adding unit directories to the CROM detailing peripherals connected to the PC. By changing the CROM, the PC can be enumerated as the connected device by other PCs on the bus. In this manner, the PC can instantly emulate or morph itself into any desired device. The PC can also emulate multiple devices at the same time. Therefore, the present invention is particularly useful where multiple emulation drivers need to coexist. The PC can also create virtual device objects for devices that don't yet exist on the bus. A user can trigger the creation of virtual device objects with device properties for devices that are not currently connected to the PC or are present on the 1394 serial bus. The PC may then emulate any device automatically with or without a physical device present.
The present invention may be more fully described with reference to
A basic input/output system (BIOS) 160 containing the basic routines that help to transfer information between elements within the computer 100, such as during start-up, is stored in ROM 140. Computer 100 also includes a hard disk drive 170 for reading from and writing to a hard disk (not shown), a magnetic disk drive 180 for reading from or writing to a removable magnetic disk 190, and an optical disk drive 191 for reading from or writing to a removable optical disk 192, such as a CD ROM or other optical media. Hard disk drive 170, magnetic disk drive 180, and optical disk drive 191 are respectively connected to the system bus 130 by a hard disk drive interface 192, a magnetic disk drive interface 193, and an optical disk drive interface 194. The drives and their associated computer-readable media provide nonvolatile storage of computer readable instructions, data structures, program modules and other data for personal computer 100. It will be appreciated by those skilled in the art that other types of computer readable media which can store data that is accessible by a computer, such as magnetic cassettes, flash memory cards, digital video disks, Bernoulli cartridges, random access memories (RAMs), read only memories (ROMs), and the like, may also be used in the exemplary operating environment.
A number of program modules can be stored on the hard disk, magnetic disk 190, optical disk 192, ROM 140 or RAM 150, including an operating system 195, one or more application programs 196, other program modules 197, and program data 198. A user can enter commands and information into computer 100 through input or selection devices, such as a keyboard 101 and a pointing device 102. The pointing device 102 may comprise a mouse, touch pad, touch screen, voice control and activation or other similar devices. Other input devices (not shown) may include a microphone, joystick, game pad, satellite dish, scanner, or the like. These and other input devices are often connected to the processing unit 110 through a serial port interface 106 that is coupled to the system bus, but may be connected by other interfaces, such as a parallel port, a game port or a universal serial bus (USB). A monitor 107 or other type of display device is also connected to system bus 130 via an interface, such as a video adapter 108. In addition to the monitor, personal computers typically include other peripheral output devices (not shown), such as speakers and printers.
An additional serial port in the form of an IEEE 1394 interface 142 may also be provided. The IEEE 1394 interface 142 couples an IEEE 1394-compliant serial bus 145 to the system bus 130 or similar communication bus. The IEEE 1394-compliant serial bus 145, as known in the art, allows multiple devices 148 to communicate with the computer 100 and each other using high-speed serial channels.
Computer 100 can operate in a networked environment using logical connections to one or more remote computers, such as a remote computer 109. Remote computer 109 typically includes at least some of the elements described above relative to computer 100, although only a memory storage device 111 has been illustrated in
When used in a LAN networking environment, computer 100 is connected to local network 112 through a network interface or adapter 114. When used in a WAN networking environment, personal computer 100 and remote computer 109 may both include a modem 115 or other means for establishing a communications over wide area network 113, such as the Internet. Modem 115, which may be internal or external, is connected to system bus 130 via serial port interface 106. In a networked environment, program modules depicted relative to personal computer 100, or portions thereof, may be stored in the remote memory storage device.
It will be appreciated that the network connections shown are exemplary and other means of establishing a communications link between the computers can be used. The existence of any of various well-known protocols, such as TCP/IP, “ETHERNET”, FTP, HTTP and the like, is presumed, and the system can be operated in a client-server configuration to permit a user to retrieve web pages from a web-based server. For example, in an embodiment of the present invention, the remote computer 109 is a server having stored thereon one or more documents that may be accessed by the computer 100.
Procedures of the present invention described below can operate within the environment of the computer shown in
One benefit of the present invention is that it instantly allows a PC to emulate multiple devices at the same time. Another benefit of the present invention is that it does not require that a device or another PC be plugged in to create a VDO. A user mode application sends a request that tells the 1394 bus driver to create a VDO with certain properties. The VDO can be created just in case the device is ever plugged in. The VDO loads an emulation driver that supports the target functionality of the device or implements the complete set of features, of a 1394 device. If another PC is plugged into the PC, the VDO is already present and is immediately capable of representing the complete functionality of the emulated device to another PC, or other node on the serial bus. Formerly, the PC would not be able to represent to other nodes on the serial bus functionality other than that of a physical device attached to the node.
The dotted lines in
Another node may be present on the serial bus 202, for example, a second PC (PC2) 220. When enumerating other nodes on the serial bus 202, PC2 220 accesses the configuration memory 206 of PC1 200 and reads the unit directory 216 detailing the emulated device. In response to the functionality exposed in the unit directory, PC2 220 creates a physical device object (PDO) 222 for the device, a “1394 printer.” PC2 then loads the appropriate device driver 224 for communication with the “1394 printer.”
In addition to being able to emulate multiple devices at one time and not requiring that a device be plugged in to emulate the device, another benefit of the present invention is that it allows “native” communication across the serial bus. In the previous example, PC2 can communicate using “native” language because it believes it is communicating with a 1394 printer instead of a USB printer. No translations are necessary because PC1's emulation driver 214 communicates directly with the USB device driver 210.
The dotted portion of
The data structure is comprised of at least two fields. The first field within the data structure is configured to add a virtual device by configuring IEEE1394—API—REQUEST.RequestNumber=IEEE1394—API—ADD—VIRTUAL—DEVICE. IEEE1394—API—ADD—VIRTUAL—DEVICE is further defined by the following data structure:
} IEEE1394—VDEV—PNP—REQUEST, *PIEEE1394—VDEV—PNP—REQUEST; Once the API—REQUEST is configured to add a virtual device, then the device data structure is filled in. FulFlags is a flag that can be configured if the text string is in Unicode by setting IEEE1394—VDEV—PNP—REQUEST.FulFlags=IEEE1394 REQUEST—FLAG—UNICODE. InstanceId is a 64-bit number that can be used to identify this instance of the virtual device. DeviceId is a null terminated string to be used for generating the PnP ids required to enumerate the emulation driver.
The second field is a flag. The second field within the data structure is configured at step 402 to allow the virtual device to remain present despite a subsequent hardware or software reboot by configuring IEEE1394—API—REQUEST.Flags=IEEE1394—API—FLAG—PERSISTANT. This will guarantee that this VDO will be reported after a reboot. Then at step 404, the API request is sent to the 1394 bus driver.
Then, at step 602 a bus reset is issued. This step is performed to cause all nodes on the serial bus to re-enumerate each other. Any other node on the bus can then access the configuration memory and see the details of the device. The other node's operating system believes the emulated device is present. In other words, the other node can then “see” the node as the emulated device. The benefit of such a process is that the node is actually being seen as the device, rather than having a device connected to it, as was done in the past. This is a benefit because it would allow any other node on the bus to communicate “natively” with the device rather than using the node as a server/translator for the device. Then, at step 604, node address space is allocated in order to intercept requests to an emulated device register by using the REQUEST—ALLOCATE—ADDRESS. To allow any external device to access those addresses, the ACCESS—FLAG—BROADCAST must be set when allocating the addresses.
Generally, VDOs and the respective drivers have the same access to the 1394 bus driver as would a physical device object and its respective driver. However, there are differences in behavior with a VDO because there is no physical target device. Normally, the 1394 bus driver fills in the target node identifier and the appropriate packet size and transfer rate using information from the enumeration procedure with a particular device. However, in the present invention the VDO must provide all packet information because there is no target device node. For example, a REQUEST—ASYNC—READ/WRITE/LOCK will be intercepted and the VDO will fill in the address information for the request. The bus driver makes sure not to overwrite any fields. REQUEST—ALLOCATE—RANGE also exhibits different behavior if addressed to a VDO. All address allocations from an emulation driver will implicitly have the ACCESS—FLAG—BROADCAST enabled if post notification on the address range is required. This is done to allow any external node to access the address range used by the emulation driver to simulate the device. Similarly, there are requests that will not be supported because there is no device. For example, the requests REQUEST—GET—ADDR—FROM—DEVICE—OBJECT and REQUEST—SET DEVICE—XMIT—PROPERTIES are not supported for virtual devices because there is no corresponding hardware node. For all other requests, the behavior is identical between virtual and physical devices.
Although the invention has been described in relation to preferred embodiments, many variations, equivalents, modifications and other uses will become apparent to those skilled in the art. The scope of the present invention should not be limited to the specific disclosure but determined only by the appended claims.
|Cited Patent||Filing date||Publication date||Applicant||Title|
|US5717903 *||May 15, 1995||Feb 10, 1998||Compaq Computer Corporation||Method and appartus for emulating a peripheral device to allow device driver development before availability of the peripheral device|
|US5815678||Jul 14, 1995||Sep 29, 1998||Adaptec, Inc.||Method and apparatus for implementing an application programming interface for a communications bus|
|US5835791 *||Mar 26, 1996||Nov 10, 1998||Vlsi Technology, Inc.||Versatile connection of a first keyboard/mouse interface and a second keyboard/mouse interface to a host computer|
|US5968152 *||Apr 4, 1997||Oct 19, 1999||Apple Computer, Inc.||Method and apparatus for extending key space in a plug and play ROM|
|US5996050 *||Jul 31, 1997||Nov 30, 1999||Advanced Micro Devices, Inc.||Cache coherency detection in a bus bridge verification system|
|US6031977||Dec 18, 1995||Feb 29, 2000||Object Technology Licensing Corp.||Object-oriented distributed communications directory service|
|US6202155 *||Jul 30, 1998||Mar 13, 2001||Ubiq Incorporated||Virtual card personalization system|
|US6233611||May 8, 1998||May 15, 2001||Sony Corporation||Media manager for controlling autonomous media devices within a network environment and managing the flow and format of data between the devices|
|US6327637 *||Dec 18, 1998||Dec 4, 2001||Cirrus Logic, Inc.||Interface tap for 1394-enabled serial bus device|
|US6345241 *||Feb 19, 1999||Feb 5, 2002||International Business Machines Corporation||Method and apparatus for simulation of data in a virtual environment using a queued direct input-output device|
|US20010032275||Jun 20, 2001||Oct 18, 2001||Fuji Photo Film Co., Ltd.||Data communication method and data communication system, and battery charging apparatus and method|
|1||1394 Developer's Conference 1999 Agenda listing presentation of "Emulation of a 1394 Device On a Standard Platform" by Nilesh Dange, NitAl Consulting Services on Jun. 4, 1999 (document printed on Jul. 22, 1999).|
|2||Dan Steinberg and Yitzhak Birk, An Empirical Analysis of the IEEE-1394 Serial Bus Protocol, pp. 58-64.|
|Citing Patent||Filing date||Publication date||Applicant||Title|
|US7082598 *||Jul 17, 2002||Jul 25, 2006||Vmware, Inc.||Dynamic driver substitution|
|US7200650 *||Dec 21, 2001||Apr 3, 2007||Hewlett-Packard Development Company, L.P.||Method and device avatar system for providing an electronic service for an electronic device|
|US7343279 *||Dec 20, 2002||Mar 11, 2008||Teradyne, Inc.||Universal approach for simulating, emulating, and testing a variety of serial bus types|
|US7366944 *||Jan 14, 2005||Apr 29, 2008||Microsoft Corporation||Increasing software fault tolerance by employing surprise-removal paths|
|US7428218||Jun 27, 2003||Sep 23, 2008||Teradyne, Inc.||Flexible approach for representing different bus protocols|
|US7496493 *||Nov 9, 2004||Feb 24, 2009||Western Digital Technologies, Inc.||External memory device to provide disk device and optical functionality|
|US7580826 *||Jun 30, 2004||Aug 25, 2009||Microsoft Corporation||Systems and methods for development of emulated devices in a virtual machine environment|
|US7698122 *||Dec 7, 2004||Apr 13, 2010||Microsoft Corporation||Creation and use of virtual device drivers on a serial bus|
|US7793279 *||Jul 24, 2006||Sep 7, 2010||Vmware, Inc||Dynamic driver substitution|
|US7881919 *||Apr 3, 2007||Feb 1, 2011||Microsoft Corporation||USB device simulator|
|US8006120||Apr 25, 2008||Aug 23, 2011||Microsoft Corporation||Increasing software fault tolerance by employing surprise-removal paths|
|US8014993 *||Nov 16, 2000||Sep 6, 2011||Cypress Semiconductor Corporation||Transportable volume, local environment repository|
|US8108882||Sep 28, 2006||Jan 31, 2012||Emc Corporation||Method and apparatus for interfacing an operating system with a network interface device|
|US8214502 *||Mar 18, 2005||Jul 3, 2012||Yamaha Corporation||Communication path setup apparatus, communication path setup program, and storage medium storing the program|
|US8412508||Feb 24, 2010||Apr 2, 2013||Microsoft Corporation||Creation and use of virtual device drivers on a serial bus|
|US8527679 *||Jun 16, 2009||Sep 3, 2013||Samsung Electronics Co., Ltd.||Apparatus and method for adaptation of input/output interface in virtualization environment|
|US8554957||Feb 24, 2010||Oct 8, 2013||Open Invention Network, Llc||Method for creation of device drivers and device objects for peripheral devices|
|US8731898||Mar 29, 2013||May 20, 2014||Microsoft Corporation||Creation and use of virtual device drivers on a serial bus|
|US8935434||Feb 24, 2010||Jan 13, 2015||Open Invention Network, Llc||Interconnection of peripheral devices on different electronic devices|
|US9046931||Jun 26, 2013||Jun 2, 2015||Samsung Electronics Co., Ltd.||Apparatus and method for adaptation of input/output interface in virtualization environment|
|US9141564||Aug 4, 2010||Sep 22, 2015||Open Invention Network, Llc||Interconnection of peripheral devices on different electronic devices|
|US9396147||Feb 24, 2010||Jul 19, 2016||Open Invention Network Llc||Interconnection of peripheral devices on different electronic devices|
|US9733951||Apr 11, 2014||Aug 15, 2017||Microsoft Technology Licensing, Llc||Creation and use of virtual device drivers on a serial bus|
|US20020184573 *||Apr 10, 2002||Dec 5, 2002||Pascal Rousseau||Method and device for configuring a functional unit with a temporary character in a communication network|
|US20030120761 *||Dec 21, 2001||Jun 26, 2003||Patton Charles M.||Structure and operating principles of a device avatar|
|US20040057391 *||Jun 27, 2003||Mar 25, 2004||Evgeny Polyakov||Flexible approach for representing different bus protocols|
|US20040128121 *||Dec 20, 2002||Jul 1, 2004||Truebenbach Eric L.||Universal approach for simulating, emulating, and testing a variety of serial bus types|
|US20050086041 *||Dec 7, 2004||Apr 21, 2005||Microsoft Corporation||Creation and use of virtual device drivers on a serial bus|
|US20050220038 *||Mar 18, 2005||Oct 6, 2005||Yamaha Corporation||Communication path setup apparatus, communication path setup program, and storage medium storing the program|
|US20060004554 *||Jun 30, 2004||Jan 5, 2006||Microsoft Corporation||Systems and methods for development of emulated devices in a virtual machine environment|
|US20060161821 *||Jan 14, 2005||Jul 20, 2006||Microsoft Corporation||Increasing software fault tolerance by employing surprise-removal paths|
|US20080192648 *||Feb 8, 2007||Aug 14, 2008||Nuova Systems||Method and system to create a virtual topology|
|US20080249759 *||Apr 3, 2007||Oct 9, 2008||Microsoft Corporation||USB Device Simulator|
|US20080294932 *||Apr 25, 2008||Nov 27, 2008||Microsoft Corporation||Increasing software fault tolerance by employing surprise-removal paths|
|US20090313406 *||Jun 16, 2009||Dec 17, 2009||Suh Sang-Bum||Apparatus and method for adaptation of input/output interface in virtualization environment|
|US20100153089 *||Feb 24, 2010||Jun 17, 2010||Microsoft Corporation||Creation and Use of Virtual Device Drivers on a Serial Bus|
|US20100251255 *||Mar 26, 2010||Sep 30, 2010||Fujitsu Limited||Server device, computer system, recording medium and virtual computer moving method|
|US20160062932 *||Aug 30, 2014||Mar 3, 2016||Microsoft Corporation||Universal Serial Bus Emulation Layer|
|U.S. Classification||703/27, 703/24|
|International Classification||G06F13/10, G06F9/455, G06F3/00|
|Cooperative Classification||G06F13/105, G06F9/45504, G06F9/455, G06F9/4411|
|Apr 28, 2000||AS||Assignment|
Owner name: MICROSOFT CORPORATION, WASHINGTON
Free format text: ASSIGNMENT OF ASSIGNORS INTEREST;ASSIGNOR:CHRYSANTHAKOPOULOS, GEORGIOS;REEL/FRAME:010770/0317
Effective date: 20000316
|Aug 14, 2000||AS||Assignment|
Owner name: MICROSOFT CORPORATION, WASHINGTON
Free format text: REQUEST FOR CORRECTED NOTICE OF RECORDATION OF ASSIGNMENT DOCUMENT.;ASSIGNOR:CHRYSANTHAKOPOULOS, GEORGIOS;REEL/FRAME:011088/0258
Effective date: 20000316
|Apr 22, 2009||FPAY||Fee payment|
Year of fee payment: 4
|Sep 29, 2009||CC||Certificate of correction|
|Mar 18, 2013||FPAY||Fee payment|
Year of fee payment: 8
|Dec 9, 2014||AS||Assignment|
Owner name: MICROSOFT TECHNOLOGY LICENSING, LLC, WASHINGTON
Free format text: ASSIGNMENT OF ASSIGNORS INTEREST;ASSIGNOR:MICROSOFT CORPORATION;REEL/FRAME:034541/0001
Effective date: 20141014
|May 11, 2017||FPAY||Fee payment|
Year of fee payment: 12