BACKGROUND OF THE INVENTION1. Field of the Invention[0001]
The present invention relates to a method, system, and an article of manufacture for firmware downloads.[0002]
2. Description of the Related Art[0003]
Computer systems include the capability to update firmware in connected hardware devices. Such firmware updates for hardware devices may be needed for various reasons, including fixing defects with an existing version of the firmware, adding additional functions to an existing version of the firmware, etc.[0004]
Prior art firmware updates may be targeted to a specific type of hardware device of a computer system. A firmware utility on a host computer may read a firmware image for a type of hardware device by various means, including downloading the firmware image via a network, reading the firmware image stored on fixed media such as a floppy diskette, CD-ROM, etc. The firmware utility may then install the firmware image on a hardware device coupled to the host computer. For example, a particular firmware utility may download the firmware image for a specific type of ethernet network interface card and install the firmware image on an ethernet network interface card coupled to the computer system.[0005]
Prior art utilities that download and install firmware are designed to update the firmware of a specific type of hardware device. Prior art firmware utilities cannot easily be enhanced to support firmware updates onto a new hardware device, particularly when the new hardware device is different (such as a device from a different vendor or a different type of device) from the hardware device for which the firmware utility is designed.[0006]
Hence, there is a need in the art to provide improved techniques for updating firmware of hardware devices.[0007]
SUMMARY OF THE PREFERRED EMBODIMENTSProvided are a method, system, and an article of manufacture for installing firmware. A device independent application receives a firmware image. The device independent application requests a device dependent application to install the firmware image on at least one hardware device, wherein the at least one hardware device is determined by the device dependent application.[0008]
In further implementations, the device independent application receives a notification of the at least one hardware device determined by the device dependent application. Subsequent to receiving the notification, the device independent applications requests the device dependent application to install the firmware image on the at least one hardware device.[0009]
Provided further are a method, system and an article of manufacture for installing firmware by a device dependent application. The device dependent application receives a request from a device independent application to install a firmware image. Based on the request, the device dependent application determines at least one hardware device. The device dependent application installs the firmware image on the at least one hardware device.[0010]
In further implementations, to determine the at least one hardware device the device dependent application determines whether the at least one hardware device satisfies system wide constraints. The device dependent application further determines whether the at least one hardware device satisfies dynamic constraints included in a firmware update package including the firmware image. Additionally, the device dependent application determines whether the at least one hardware device satisfies static constraints included in the device dependent application.[0011]
The implementations provide a firmware update application for updating firmware on different types of hardware devices. The firmware update application separates device independent firmware update functions from device dependent firmware update functions, in a device independent application and a plurality of device dependent applications respectively. The implementations allow extensions of the firmware update application to support new and different types of devices, by writing new device dependent applications that can interface with the device independent application. As a result, the implementations simplify the development and maintenance of the firmware update application.[0012]
BRIEF DESCRIPTION OF THE DRAWINGSReferring now to the drawings in which like reference numbers represent corresponding parts throughout:[0013]
FIG. 1 illustrates a block diagram of a computing environment in which certain described aspects of the invention are implemented;[0014]
FIG. 2 illustrates a block diagram of software and hardware elements coupled to a host in which certain described aspects of the invention are implemented;[0015]
FIG. 3 illustrates a block diagram of a firmware update application for downloading firmware and elements coupled to the firmware update application in which certain described aspects of the invention are implemented;[0016]
FIG. 4 illustrates a block diagram of various components of a firmware update package in which certain described aspects of the invention are implemented;[0017]
FIG. 5 illustrates a block diagram of a device dependent plug-in module in which certain described aspects of the invention are implemented;[0018]
FIG. 6 illustrates an overview of logic implemented in the device independent firmware update utility and the device dependent plug-in module for updating firmware, in accordance with certain described implementations of the invention;[0019]
FIG. 7 illustrates logic implemented in a framework for downloading firmware, in accordance with certain described implementations of the invention;[0020]
FIG. 8 illustrates logic implemented in a framework for installing firmware, where the logic may provide for interactive user input, in accordance with certain described implementations of the invention;[0021]
FIG. 9 illustrates logic implemented in a device dependent plug-in, in accordance with certain described implementations of the invention;[0022]
FIG. 10 illustrates logic to create a firmware update package, in accordance with certain described implementations of the invention; and[0023]
FIG. 11 illustrates a block diagram of a computer architecture in which certain described aspects of the invention are implemented.[0024]
DETAILED DESCRIPTION OF THE PREFERRED EMBODIMENTSIn the following description, reference is made to the accompanying drawings which form a part hereof and which illustrate several implementations. It is understood that other implementations may be utilized and structural and operational changes may be made without departing from the scope of the present implementations.[0025]
Described implementations divide firmware update operations into device-independent and device dependent steps. Implementations provide a device independent application coupled to a plurality of device dependent applications for updating firmware in hardware devices coupled to a computer system. The device independent application is an application that does not perform operations that are dependent on characteristics of the hardware devices coupled to the computer system. The device dependent applications are applications that may contain operations that are dependent on characteristics of the hardware devices coupled to the computer system. A different device dependent application may be provided for each type of hardware device, including same device types from different vendors or different device types. The device independent and the device independent applications together provide a firmware update application. The implementations also provide a data structure for storing firmware images such that the firmware update application can interpret the data structure and update firmware images on hardware devices.[0026]
FIG. 1 illustrates a block diagram of a computing environment in which certain described aspects of the invention are implemented. A first computational device, such as a[0027]host100, may be connected directly to ahardware device102, and may be connected to ahardware device104 over anetwork106. Eachhardware device102,104 is an instance of a type of hardware device, e.g. a disk drive, a tape drive, an optical disk drive, a printer, etc. Forexample hardware device102 may be an instance of a particular type of disk drive. Although only twohardware devices102 and104 are shown, there may be fewer or more hardware devices connected to thehost100. Thehost100 may also be connected to a second computational device, such as aserver108, over anetwork110.
The[0028]host100 and theserver108 maybe any computational device known in the art, such as a personal computer, a workstation, a server, a mainframe, a hand held computer, a palm top computer, a telephony device, etc. Thenetworks106,110 may be any network known in the art, such as the Internet, an intranet, a local area network, a wireless network, etc. Thehost100 may alternatively be connected to theserver108 and thehardware device104 without a network, such as through direct lines, common bus systems, etc., in a manner known in the art. Also eachnetwork106,110 may be part of one or more larger networks or may be an independent network or may be comprised of multiple interconnected networks.
The[0029]hardware devices102 and104 may containfirmware102aand104arespectively. Theserver108 may contain afirmware update package108a, where thehost100 may download thefirmware update package108aover thenetwork110 and use data contained within thefirmware update package108ato update thefirmware102a,104aonhardware devices102,104. If ahardware device102,104 has provisions for including firmware but has no installed firmware, then thehost100 may download thefirmware update package108aover thenetwork110 and install the firmware on thehardware devices102,104.
FIG. 2 illustrates a block diagram of software and hardware elements coupled to the[0030]host100 in which certain described aspects of the invention are implemented. Within thehost100 resides a collection of software applications, where the collection is referred to as afirmware update application200. In certain implementations, thefirmware update application200 can reside, for example, in user space on thehost100.
The[0031]host100 is coupled to hardware devices, such as ahost bus adapter204, an ethernet NIC (network interface card)206, adisk208, etc. Thehardware devices204,206,208 contain firmware in a manner similar tohardware devices102,104. Also, thehardware devices204,206,208 maybe coupled to thehost100 in a manner similar to theway hardware devices102,104 are coupled to thehost100.
The[0032]host100 includes device drivers, including a HBA (host bus adapter)device driver204a, an ethernetNIC device driver206a, and adisk device driver208ato connect with thehost bus adapter204, theethernet NIC206, and thedisk208 respectively. In certain implementations, thedevice drivers204a,206a,208acan reside, for example, in kernel space of thehost100. Although FIG. 2 illustrates threehardware devices204,206,208 and threedevice drivers204a,206a,208acommunicating with thehardware devices204,206,208 there may be a different number hardware devices and device drivers.
The[0033]firmware update application200 may download thefirmware update package108aand install thefirmware update package108aon thehost bus adapter204, theethernet NIC206 and thedisk208. Instead of downloading thefirmware update package108a, thefirmware update application200 may read thefirmware update package108afrom some fixed media such as a floppy disk or a CDROM.
FIG. 3 illustrates a block diagram of the[0034]firmware update application200 for downloading firmware and elements coupled to thefirmware update application200 in which certain aspects of the invention are implemented. Thefirmware update application200 includes a device independentfirmware load library300 which comprises a set of software library routines for performing various tasks, including manipulating and displaying user interface controls, receiving user input, generating user output, receiving and analyzing parts of thefirmware package108a, using the received parts of thefirmware package108ato interact with other software modules, etc. The application program interfaces (APIs) for invoking the various tasks are exposed by the device independentfirmware load library300. Programmers can code utilities by using the APIs of the device independentfirmware load library300, where the device independentfirmware load library300 comprises of a common set of library routines shared by such utilities. Hence, the device independentfirmware load library300 facilitates the writing of utilities that take advantage of the functions coded in the device independentfirmware load library300. Representative APIs exposed by the device independentfirmware load library300 includeuser interface APIs300a, andother APIs300b.
Applications that utilize the[0035]firmware update application200, including a device independentfirmware update utility302 andmanagement application utilities304 may call theAPIs300a,300bof the device independentfirmware load library300. There may be manysuch utilities302,304 that utilize the device independentfirmware load library300. Thus, the device independentfirmware load library300 provides a set of library routines for writing software applications that are part of thefirmware update application200.
The device independent[0036]firmware update utility302 reads and interprets thefirmware package108aand uses the APIs of the device independentfirmware load library300 to interact with a user communicating via a command line user interface on thehost100.
The[0037]firmware update application200 also has at least one device dependent plug-inmodule306 communicating with one ormore hardware devices310,311 including the firmware to update. Thehardware devices310,311 may be attached directly to thehost100 motherboard, be installed directly on thehost100 motherboard, or may be attached to thehost100 through an interface. The communication of the device dependent plug-in module to thehardware devices310,311 takes place via adevice driver308. Although only one device dependent plug-inmodule306 is shown there may a plurality of device dependent plug-in modules within thefirmware update application200, one for each attachedhardware device310,311. The device dependent plug-inmodule306 is specific to each type ofhardware device310,311 and may also call the APIs of the device independentfirmware load library300. Thehardware device310,311 may comprise thehost bus adapter204, theethernet NIC206, thedisk208, etc. Thedevice driver308 may comprise theHBA device driver204a, theethernet device driver206a, thedisk device driver208a. For illustration, if thehardware device310,311 is theethernet NIC206 and thedevice driver308 is theethernet device driver206a, then the device dependent plug-inmodule306 would be an ethernet NIC plug-in module. There may be additional device drivers for different device types.
The device independent[0038]firmware update utility302 is a device independent application that does not perform operations that are dependent on characteristics of thehardware device310,311. The device dependent plug-inmodules306 are device dependent applications that may contain operations dependent on characteristics of thehardware device310,311.
An entity, such as a software vendor, that creates the[0039]firmware update application200, may provide a firmwarepackage construction tool314, where the firmwarepackage construction tool314 may be used by different vendors to construct thefirmware package108a. The firmwarepackage construction tool314 ensures that data structures comprising thefirmware package108aare compatible with thefirmware update application200.
FIG. 4 illustrates components in the[0040]firmware update package108ain accordance with certain implementations of the invention. Thefirmware update package108amay include aheader400, a list ofproperties package402, and abinary firmware image404. Theheader400 and the list ofproperties package402 include metadata related to thebinary firmware image404. The device independentfirmware update utility302 may primarily process theheader400 that has device independent constraints, whereas the device dependent plug-inmodule306 may primarily processes the list ofproperties package402 that has device dependent dynamic constraints.
The[0041]header400 includes various fields that may be represented in a variety of formats including extensible markup language (XML). A <header version>field406 includes the version number of the header. A <name of device dependent plug-in module to load>field408 includes the name of the device dependent plug-inmodule306, where the components within thefirmware update package108aare intended to be processed by the device dependent plug-inmodule306 indicated in the <name of device dependent plug-in module to load>field408. The <name of device dependent plug-in module to load>field408 may also be used by device independentfirmware update utility302 to determine what plug-in module to load.
The[0042]header400 includes a <size and checksum for the list of properties package>field410 that indicates the size and checksum of the list of properties package401. Theheader400 may further include a <size and checksum for the binary firmware image>field412 that includes the size and checksum of thebinary firmware image404.
The[0043]header400 may also include a <number of parts>field414, that indicates the number of parts of a multi-part file used to install thebinary firmware image404. The header may also include adigital signature416 for security. The device independentfirmware update utility302 may read thedigital signature416 to confirm that thefirmware update package108ahas been read from an authorized source and unauthorized modifications have not been made to thefirmware update package108a. Thedigital signature416 may not be necessary if the download of thefirmware update package108ais via a trusted distribution mechanism.
The list of[0044]properties package402 contains properties, where each property is a dynamic constraint that may need to be satisfied before thefirmware update application200 installs thebinary firmware image404 on thehardware device310,311. The device dependent plug-inmodule306 processes the dynamic constraints in addition to static constraints included in the device dependent plug-inmodule306. For example, a dynamic constraint may indicate the version of the firmware upgrade in thefirmware update package108a. Since every newfirmware update package108amay have a different version, the version of the firmware upgrade can only be part of a dynamic constraint as the information cannot be known a priori to the device dependent plug-inmodule306.
The list of[0045]properties package402 may be implemented in different formats, such as a list of XML type <name, value> pairs418a,418b, . . .418n. A set of exemplary XML name value pairs420 may include the version of the firmware upgrade as “1.4” (reference numeral422). In certain implementations the version of the firmware upgrade and the corresponding value may be the only <name value> pair on the list ofproperties package402. The minimum version on device for upgrade may be “1.3” (reference numeral424) implying that unless the device has a firmware version of 1.3 or greater thefirmware update application200 should not install thebinary firmware image404 on thehardware device310,311. The firmware update application version maybe “1.4.02” (reference numeral426) indicating a version of thefirmware update application200 that can apply thefirmware update package108a. Various <name, value> pairs may be included in the list ofproperties package402. Also, some of the properties may be optional in the list ofproperties package402. Other representational mechanisms besides <name, value> pair, such as hash tables, key and value pairs, etc., may also be used to represent the properties in the list ofproperties package402.
The device independent[0046]firmware update utility302 extracts the list ofproperties package402 from thefirmware update package108aand forwards thefirmware update package108ato the device dependent plug-inmodule306. In alternative implementations, the device independentfirmware update utility302 may extract the <name, value> pairs from the list ofproperties package402 and forward the name value pairs to the device dependent plug-inmodule306. The device dependent plug-inmodule306 uses the <name, value> pairs to apply the dynamic constraints for the firmware update encapsulated into the <name, value> pairs.
The <name, value> pairs may be processed in a variety of ways, including via a libnvpair library in the Solaris** 8 operating system. The libnvpair library exports a set of functions for managing <name, value> pairs. Further details of the libnvpair library are available in the Solaris 8 Reference Manual Collection (copyright 1994-2002, Sun Microsystems Inc.).[0047]
FIG. 5 illustrates a block diagram of the device dependent plug-in[0048]module306 in which certain aspects of the invention are implemented. The device dependent plug-inmodule306 includesstatic constraints508 that do not change over time, i.e., thestatic constraints508 are part of the device dependent plug-inmodule306. Thestatic constraints508 may include a variety of constraints such as a listing ofhardware devices310,311 that are compatible with the device dependent plug-inmodule306, the versions of thefirmware update application200 the device dependent plug-inmodule306 is compatible with, etc. The static constraints may have to be satisfied before thefirmware update application200 installs thebinary firmware image404 on thehardware device310,311.
The device dependent plug-in[0049]module306 also includes code fordevice discovery510 and code (indicated by reference numeral512) to install thebinary firmware image404 on thehardware device310,311. The code fordevice discovery510 determineshardware devices310,311 on which thebinary firmware image404 may be installed. The code to install firmware ondevice512 is code that when executed updates the firmware on thehardware device310,311.
The code for[0050]device discovery510 may include code to checkstatic constraints514 that checks forstatic constraints508. The code fordevice discovery510 may also include code to checkdynamic constraints516, that checks the dynamic constraints that appear in the list ofproperties package402. The code fordevice discovery510 may also include adevice discovery interface518 that is a set of APIs used to discoverhardware devices310,311 that satisfy thestatic constraints508 and the dynamic constraints present in the list ofproperties package402.
FIG. 6 illustrates overview of logic implemented in the device independent[0051]firmware update utility302 and the device driver plug-inmodule306 for updating firmware, in accordance with certain described implementations of the invention. The process starts atblock600, where the device independentfirmware update utility302 after receiving thefirmware update package108aextracts the metadata included in theheader400 and list ofproperties package402. Control proceeds to block602, where the device independentfirmware update utility302 verifies the system level constraints via the device dependent plug-inmodule306. The system level constraints may include various constraints that are related to thehost100 and the software and hardware coupled to thehost100. For example, a system level constraint may check whether there is adequate storage and memory available on thehost100 for running the various components of thefirmware update application200. Control proceeds to block604, where the device independentfirmware update utility302 requests the device dependent plug-inmodule306 to discoverhardware devices310,311 based on the satisfaction ofstatic constraints508 and dynamic constraints present in the list ofproperties package402.
The device independent[0052]firmware update utility302 receives (at block606) a list of hardware devices that satisfy thestatic constraints508 and the dynamic constraints present in the list ofproperties package402 from the device dependent plug-inmodule306, i.e., thebinary firmware image404 may be installed on the hardware devices in the list. In certain implementations, the device independentfirmware update utility302 receives a complete list of hardware devices supported by the device dependent plug-inmodule306, and the list indicates whether or not each hardware device has met thestatic constraints508 and the dynamic constraints present in the list ofproperties package402. Atblock608, the device independentfirmware update utility302 requests the device dependent plug-inmodule306 to download firmware to thehardware devices310,311 in the list of hardware devices returned by the device dependent plug-inmodule306. Control proceeds to block610, where the device dependent plug-inmodule306 updates the firmware on each of thehardware devices310,311 on the list of hardware devices.
FIG. 7 illustrates more detailed logic implemented in the[0053]firmware update application200 by the device independentfirmware update utility302 and the device dependent plug-inmodule306. A user or an automated program calls the device independentfirmware update utility302 for installing thebinary firmware image404 with thefirmware package108aas an input file. In alternative implementations, the call to the device independentfirmware update utility302 may come from an external system over a network. Atblock700, the device independentfirmware update utility302 receives the call from the user or the automated program. Control proceeds to block702, where the device independentfirmware update utility302 validates thefirmware package108aby first verifying that the information in theheader400 is syntactically and semantically correct. Then the device independentfirmware update utility302 reads the <size and checksum for the list of properties package>field410 and verifies that the size and checksum of the list ofproperties package402 is correct. Subsequently, the device independentfirmware update utility302 reads the <name of device dependent plug-in module to load>field408 and based on the name calls the appropriate device dependent plug-inmodule306. The device dependent plug-inmodule306 has callable interfaces, including data structures and variables, in a format that is different from the data structures and variables used by the device independentfirmware update utility302. The device independentfirmware update utility302 structures the data structures and variables of the device independentfirmware update utility302 to map to the data structure and variables in the interfaces of the device dependent plug-inmodule306.
Control proceeds to block[0054]704, where the device independentfirmware update utility302 requests the device dependent plug-inmodule306 to confirm that system wide constraints are being satisfied before proceeding with the firmware installation. The system wide constraints may be distributed within thefirmware update application200 or thefirmware package108a, and may include constraints such as the version of the operating system, the amount of available storage, etc., that may need to be satisfied before installing thebinary firmware image404. The device dependent plug-inmodule306 receives (at block706) the request to verify the system wide constraints. The device dependent plug-inmodule306 verifies (at block708) the system wide constraints. If the system wide constraints are satisfied then the status is said to be “verified.” In contrast, if the system wide constraints are not satisfied then the status is said to be “not verified.” The device dependent plug-inmodule306 sends (at block710) the status on the verification of the system wide constraints to the device independentfirmware update utility302.
At[0055]block712, the device independentfirmware update utility302 receives the status on the verification of the system wide constraints from the device dependent plug-inmodule306. If the system wide constraints are “not verified” (at block712), then control proceeds to block714 where the device independentfirmware update utility302 performs cleanup operations and exits. Cleanup operations may include closing files that are open, disposing of pointer data structures, closing network connections, etc. If atblock712, the device independentfirmware update utility302 receives a “verified” status for the system wide constraints, then control proceeds to block716 where the device independentfirmware update utility302 passes the device dependent plug-inmodule306 the list ofproperties package402 containing the dynamic constraints, and requests the device dependent plug-inmodule306 to discover matchinghardware devices310,311 for firmware update.
Control proceeds to block[0056]718, where the device dependent plug-inmodule306 receives the request to discover matchinghardware devices310,311. Atblock720, the device dependent plug-inmodule306 finds all matchinghardware devices310,311 that satisfy thestatic constraints508 and the dynamic constraints provided by the list ofproperties package402. The various constraints may be analyzed by checking registry entries, by checking conformance to plug-and-play specifications, by making SCSI inquiries, etc., for the attachedhardware devices310,311, etc., on thehost100. If there are any additional device specificstatic constraints508 the device dependent plug-in may also check that such additionalstatic constraints508 are also satisfied by the matchinghardware devices310,311. Based on the satisfaction of the static and dynamic constraints, the device dependent plug-inmodule306 creates a list of matching hardware devices on which thebinary firmware image404 can be installed.
Control proceeds to block[0057]722, where the device dependent plug-inmodule306 returns the list of matching hardware devices to the device independentfirmware update utility302. The device independentfirmware update utility302 receives (at block724) the list of matching hardware devices. Control proceeds to block726, where the device independentfirmware update utility302 calls the device dependent plug-inmodule306 to read thebinary firmware image404 for each device on the list of matching hardware devices. The reading may include downloading thebinary firmware image404 from theserver108 if only the network address, such as an Universal Resource Locator (URL), of thebinary firmware image404 is included in thefirmware update package108a. Otherwise, the reading includes reading thebinary firmware image404 in the already downloadedfirmware update package108a. For every request received by the device dependent plug-inmodule306, the device dependent plug-inmodule306 installs (at block728) thebinary firmware image404 on the corresponding device on the list of matching hardware devices. The device dependent plug-inmodule306 then returns (at block730) the status of the firmware installation to the device independentfirmware update utility302. The device independentfirmware update utility302 receives (at block732) the status of the firmware installation. Control proceeds to block734 where the device independentfirmware update utility302 determines if firmware installation has been completed for all matching hardware devices. If so, control proceeds to block714 where the device independentfirmware update utility302 performs cleanup operations and exits. If not, control returns to block732 and the device independentfirmware update utility302 waits for receiving status of firmware installation for each hardware device on the list of matching hardware devices from the device dependent plug-inmodule306.
FIG. 8 illustrates logic implemented in the device independent[0058]firmware update utility302, where the logic may provide for interactive user input while installing firmware, in accordance with certain implementations of the invention. Atblock800, the device independentfirmware update utility302 receives (similar to block724) the list of matching hardware devices from the device dependent plug-inmodule306. The device independentfirmware update utility302 determines (at block802) if firmware installation mode is interactive, i.e., there is a user who may interact with the device independentfirmware update utility302.
If the firmware installation mode is interactive, then control proceeds to block[0059]804 where the device independentfirmware update utility302 presents a list of selections to the user, including the list of matching hardware devices. In alternative implementations, the device independentfirmware update utility302 may present other types of information besides a list of selections to the user. The device independentfirmware update utility302 may also display choices to the user to modify the list. The device independentfirmware update utility302 generates the graphical user interface needed for displaying such choices to the user by using theuser interface API300ain the device independentfirmware load library300.
Control proceeds to block[0060]806, where the device independentfirmware update utility302 receives a selection from the user. The selection may take a variety of forms including a “force” option whereby a user may override the list of matching hardware devices displayed and perform operations according to the choices of the user. For example, the user may choose not to install firmware on a device that does appear on the list of matching hardware devices. The user may also specify a path or a location where the firmware for a specific device may be placed. Atblock806, the device independentfirmware update utility302 also determines whether the user selected a print option or a firmware installation option.
If at[0061]block806, the device independentfirmware update utility302 determines that the user has selected the option to install firmware updates, the device independentfirmware update utility302 generates (at block808) modifications to the list of matching hardware devices based on the selections received from the user atblock806. Control proceeds to block810, where the device independentfirmware update utility302 requests one or more device dependent plug-inmodules306 to install thebinary firmware image404 on the hardware devices on the modified list.
Control proceeds to block[0062]812, where the device independentfirmware update utility302 waits to receive the download status from the device dependent plug-in modules306 (similar to block732). The device independentfirmware update utility302 determines (at block814) if all firmware installations are complete (similar to block734). If so, atblock816 the device independentfirmware update utility302 performs cleanup operations and exits (similar to block714). If not, control returns to block812 fromblock816, and the device independentfirmware update utility302 waits to receive another download status.
If at[0063]block806, the device independentfirmware update utility302 determines that the user selected the print option then control proceeds to block818 where the device independentfirmware update utility302 prints a list of all the supportedhardware devices310,311 coupled to thehost100 and the firmware revision number of thehardware devices310,311. The printed list allows the user to view the firmware onhardware devices310,311 on ahost100. Instead of printing, the result may be displayed on a screen or communicated in any other manner known in the art to the user. Subsequently, control returns back to block806.
If at[0064]block802, the device independentfirmware update utility302 determines that the firmware installation mode is not interactive, then the device independentfirmware update utility302 requests (at block820) one or more device dependent plug-inmodules306 to install thebinary firmware image404 onto hardware devices on the list of attached hardware devices. For example, the device independentfirmware update utility302 may request device dependent plug-inmodule306 to install firmware on ten devices in parallel. Control then proceeds to the previously describedblock812.
FIG. 9 illustrates logic implemented in a device dependent plug-in module, in accordance with an alternative implementation of the invention. In FIG. 9, at[0065]block902, the device dependent plug-inmodule306 receives thebinary firmware image404 sent by the device independentfirmware update utility302. For everyhardware device310,311, the device dependent plug-in module checks (at block904) static, dynamic and system wide constraints to determine whether thehardware device310,311 satisfies the constraints. If so, control proceeds to block908 where the device independentfirmware update utility302 updates the firmware on ahardware device310,311.
Control proceeds to block[0066]910, where the device dependent plug-inmodule306 sends a status message to the device independentfirmware update utility302 to indicate that firmware was installed on thehardware device310,311. If atblock906, the device dependent plug-inmodule306 determines that constraints are not satisfied for ahardware device310,311, control proceeds to block912 where the device dependent plug-inmodule306 sends a status message to the device independentfirmware update utility302 informing that firmware was not updated on thehardware device310,311.
FIG. 10 illustrates logic to create the[0067]firmware update package108a, in accordance with certain implementations of the invention. Atblock1000 an entity, such as a vendor of a hardware device, develops abinary firmware image404 for ahardware device310,311. Control proceeds to block1002, where the vendor uses the firmware update package construction tool314 (indicated in FIG. 3) to create theheader400 for thefirmware update package108a.
Control proceeds to block[0068]1004, where the vendor uses the firmware updatepackage construction tool314 to create the list ofproperties package402 for thefirmware update package108a. The vendor further includes the firmware updatepackage construction tool314 to create (at block1006) thefirmware update package108aby including theheader400, the list ofproperties package402 and thebinary firmware image404 within the firmware update package. Subsequently, thefirmware update package108amaybe installed on theserver108 or maybe distributed in any other manner known in the art.
The implementations provide a firmware update application for updating firmware on different types of hardware devices. The firmware update application comprises a device independent firmware update utility and a plurality of device dependent plug-in modules. The device independent firmware update utility initiates the update of firmware on a plurality of different types of hardware devices and requests device specific functions from device dependent plug-in modules. A different device dependent plug-in module may be provided for each type of hardware device. Thus the firmware update application separates device independent firmware update functions from device dependent firmware update functions.[0069]
The implementations allow extensions of a firmware update application to support new and different types of devices, by writing new device dependent plug-in modules to the APIs of the firmware update application. As a result, the implementations simplify the development and maintenance of the firmware update application. Furthermore, the firmware update application provides a single unified application with an uniform interface to download firmware to many different types of devices.[0070]
The implementations also provide a firmware update package for storing firmware images such that the firmware update application can interpret the firmware update package and update firmware images on hardware devices. The firmware update package can be distributed either by a server or on a fixed media. Dynamic constraints that should be satisfied before installing firmware on a device are distributed as part of the firmware update package.[0071]
The implementations also facilitate the development of the device independent firmware update utility by providing a set of library routines that capture the common tasks performed by different types of device independent update utilities. Programmers may code different types of firmware update and other utilities by using the APIs of the library routines.[0072]
The implementations also enable an entity, such as an user or an automated program, to manually control the process of firmware update by modifying a list of hardware devices to update, where the list of hardware devices to update is presented to the entity by the firmware update application.[0073]
The implementations allow the functionality of the firmware update application to be extended without writing a new standalone application. Device independent functionality is provided by the device independent firmware update utility and device-specific functionality is provided by the device dependent plug-in modules. The device independent firmware update utility does not contain logic that is dependent on the types of hardware devices supported. Supporting a new type of hardware device does not require updating the device independent firmware update utility. Since generic capabilities for firmware updates are exposed via APIs another type of application can take advantage of the capabilities programmatically. Furthermore, the APIs provide a robust and secure interface between the device-independent firmware update utility and the device-dependent plug-in modules.[0074]
Additional Implementation DetailsThe described techniques may be implemented as a method, apparatus or article of manufacture using standard programming and/or engineering techniques to produce software, firmware, hardware, or any combination thereof. The term “article of manufacture” as used herein refers to code or logic implemented in hardware logic (e.g., an integrated circuit chip, Programmable Gate Array (PGA), Application Specific Integrated Circuit (ASIC), etc.) or a computer readable medium (e.g., magnetic storage medium, such as hard disk drives, floppy disks, tape), optical storage (e.g., CD-ROMs, optical disks, etc.), volatile and non-volatile memory devices (e.g., EEPROMs, ROMs, PROMs, RAMs, DRAMs, SRAMs, firmware, programmable logic, etc.). Code in the computer readable medium is accessed and executed by a processor. The code in which implementations are made may further be accessible through a transmission media or from a file server over a network. In such cases, the article of manufacture in which the code is implemented may comprise a transmission media, such as a network transmission line, wireless transmission media, signals propagating through space, radio waves, infrared signals, etc. Of course, those skilled in the art will recognize that many modifications may be made to this configuration without departing from the scope of the implementations, and that the article of manufacture may comprise any information bearing medium known in the art.[0075]
FIG. 11 illustrates a block diagram of a computer architecture in which certain aspects of the invention are implemented. FIG. 11 illustrates one implementation of the[0076]host100 and theserver108. Thesesystems100,108 may implement acomputer architecture1100 having a processor1102 (e.g., a microprocessor), a memory1104 (e.g., a volatile memory device), and storage1106 (e.g., a non-volatile storage, such as magnetic disk drives, optical disk drives, a tape drive, etc.). Thestorage1106 may comprise an internal storage device or an attached or network accessible storage. Programs in thestorage1106 may be loaded into thememory1104 and executed by theprocessor1102 in a manner known in the art. The architecture further includes anetwork card1108 to enable communication with a network. The architecture may also include at least oneinput1110, such as a keyboard, a touchscreen, a pen, voice-activated input, etc., and at least oneoutput1112, such as a display device, a speaker, printer, etc.
The implementations of FIGS.[0077]6 to10 describe specific operations occurring in a particular order. Further, the steps may be performed in parallel as well as sequentially. In alternative embodiments, certain of the logic operations may be performed in a different order, modified or removed and still implement preferred embodiments of the present invention. Morever, steps may be added to the above described logic and still conform to the preferred embodiments. Yet further steps may be performed by a single process or distributed processes.
While the[0078]server108 and host100 communicate within a client-server paradigm in the described implementations, they may also communicate within a peer-to-peer or any other paradigm known in the art. Furthermore, many of the software and hardware components have been described in separate modules for purposes of illustration. Such components may be integrated into a fewer number of components or divided into a larger number of components. Certain operations described as performed by a specific component may be performed by other components. Furthermore, one or more functions of the device independentfirmware update utility302 may be performed by a device dependent plug-inmodule306 or vice versa.
Therefore, the foregoing description of the implementations has been presented for the purposes of illustration and description. It is not intended to be exhaustive or to limit the invention to the precise form disclosed. Many modifications and variations are possible in light of the above teaching. It is intended that the scope of the invention be limited not by this detailed description, but rather by the claims appended hereto. The above specification, examples and data provide a complete description of the manufacture and use of the composition of the invention. Since many implementations of the invention can be made without departing from the spirit and scope of the invention, the invention resides in the claims hereinafter appended.[0079]