svcadm(8)을 검색하려면 섹션에서 8 을 선택하고, 맨 페이지 이름에 svcadm을 입력하고 검색을 누른다.
libdevinfo(3lib)
libdevinfo(3LIB) Interface Libraries libdevinfo(3LIB)
NAME
libdevinfo - device information library
SYNOPSIS
cc [ flag... ] file... -ldevinfo [ library... ]
#include <libdevinfo.h>
DESCRIPTION
Functions in this library access device configuration information.
Device configuration data is organized as a tree of device nodes, de‐
fined as di_node_t in the libdevinfo interfaces. Each di_node_t repre‐
sents a physical or logical (pseudo) device. The types of data associ‐
ated with device nodes are:
o data defined for all device nodes (attributes)
o data defined for all multipath path nodes
o data defined for all minor node data
o properties specific to nodes
All device nodes have a set of common attributes, such as a node name,
an instance number, and a driver binding name. Common device node at‐
tributes are accessed by calling interfaces listed on the di_bind‐
ing_name(3DEVINFO) manual page. Each device node also has a physical
path, which is accessed by calling di_devfs_path(3DEVINFO).
Properties provide device specific information for device configuration
and usage. Properties can be defined by software (di_prop_t) or by
firmware (di_prom_prop_t). One way to access each di_prop_t is to make
successive calls to di_prop_next(3DEVINFO) until DI_PROP_NIL is re‐
turned. For each di_prop_t, use interfaces on the di_prop_bytes(3DEV‐
INFO) manual page to obtain property names and values. Another way to
access these properties is to call di_prop_lookup_bytes(3DEVINFO) to
find the value of a property with a given name. Accessing a
di_prom_prop_t is similar to accessing a di_prop_t, except that the in‐
terface names start with di_prom_prop and additional calls to
di_prom_init(3DEVINFO) and di_prom_fini(3DEVINFO) are required.
Minor nodes contain information exported by the device for creating
special files for the device. Each device node has 0 or more minor
nodes associated with it. A list of minor nodes (di_minor_t) can be ob‐
tained by making successive calls to di_minor_next(3DEVINFO) until
DI_MINOR_NIL is returned. For each minor node, di_minor_devt(3DEVINFO)
and related interfaces are called to get minor node data.
In some configurations, multipath device access via a virtual host con‐
troller interface (vHCI) abstraction is possible. An example of a dri‐
ver using this abstraction is scsi_vhci(4D). In such cases, devices are
not directly represented as children of their physical host controller
interface (pHCI) bus adapter. Instead, devices have an identity-ori‐
ented representation as a child of a vHCI. All paths leading to the
same identity are represented by a common child endpoint of the vHCI
called the "client" device node. The vHCI virtualizes access among the
underlying pHCI physical paths. The underlying connection between vHCI-
managed client endpoints and the pHCI paths to that endpoint is repre‐
sented by a class of nodes called "path" nodes (di_path_t).
Each path node is associated with two device nodes: its pHCI device
node, and its client device node. A list of paths associated with a
specific pHCI device node can be obtained using
di_path_phci_next_path(3DEVINFO), and a list of paths associated with a
specific client device node can be obtained using
di_path_client_next_path(3DEVINFO). These functions return DI_PATH_NIL
when the end of the list of path nodes is reached.
For each path node, di_path_state(3DEVINFO) and related interfaces are
called to get path node data.
Using libdevinfo involves three steps:
o Creating a snapshot of the device tree
o Traversing the device tree to get information of interest
o Destroying the snapshot of the device tree
A snapshot of the device tree is created by calling di_init(3DEVINFO)
and destroyed by calling di_fini(3DEVINFO). An application can specify
the data to be included in the snapshot (full or partial tree, include
or exclude properties and minor nodes) and get a handle to the root of
the device tree. See di_init(3DEVINFO) for details. The application
then traverses the device tree in the snapshot to obtain device config‐
uration data.
The device tree is normally traversed through parent-child-sibling
linkage. Each device node contains references to its parent, its next
sibling, and the first of its children. Given the di_node_t returned
from di_init(), one can find all children by first calling
di_child_node(3DEVINFO), followed by successive calls to di_sib‐
ling_node(3DEVINFO) until DI_NODE_NIL is returned. By following this
procedure recursively, an application can visit all device nodes con‐
tained in the snapshot. Two interfaces,The di_walk_node(3DEVINFO) and
di_walk_minor(3DEVINFO) functions are provided to facilitate device
tree traversal. The di_walk_node() function visits all device nodes and
executes a user-supplied callback function for each node visited. The
di_walk_minor() function does the same for each minor node in the de‐
vice tree.
An alternative way to traverse the device tree is through the per-dri‐
ver device node linkage. Device nodes contain a reference to the next
device node bound to the same driver. Given the di_node_t returned from
di_init(), an application can find all device nodes bound to a driver
by first calling di_drv_first_node(3DEVINFO), followed by successive
calls to di_drv_next_node(3DEVINFO) until DI_NODE_NIL is returned. Tra‐
versing the per-driver device node list works only when the snapshot
includes all device nodes.
See di_init(3DEVINFO) for examples of libdevinfo usage. See Writing De‐
vice Drivers in Oracle Solaris 11.4 for information about Solaris de‐
vice configuration.
INTERFACES
The shared object libdevinfo.so.1 provides the public interfaces de‐
fined below. See intro(3) for additional information on shared object
interfaces.
tab(); lw(2.75i) lw(2.75i) di_binding_namedi_bus_addr
di_child_nodedi_compatible_names di_devfs_minor_pathdi_devfs_path
di_devfs_path_freedi_devid di_driver_majordi_driver_name di_dri‐
ver_opsdi_drv_first_node di_drv_next_nodedi_fini di_initdi_instance
di_link_next_by_lnodedi_link_next_by_node di_link_pri‐
vate_getdi_link_private_set di_link_spectypedi_link_to_lnode di_ln‐
ode_devinfodi_lnode_devt di_lnode_namedi_lnode_next di_lnode_pri‐
vate_getdi_lnode_private_set di_minor_devtdi_minor_name di_mi‐
nor_nextdi_minor_nodetype di_minor_private_getdi_minor_private_set
di_minor_spectypedi_minor_type di_node_namedi_node_private_get
di_node_private_setdi_nodeid di_parent_nodedi_path_bus_addr
di_path_client_devfs_pathdi_path_client_next_path
di_path_client_nodedi_path_devfs_path di_path_instancedi_path_node_name
di_path_phci_next_pathdi_path_phci_node
di_path_prop_bytesdi_path_prop_int64s di_path_prop_intsdi_path_prop_len
di_path_prop_lookup_bytesdi_path_prop_lookup_int64s
di_path_prop_lookup_intsdi_path_prop_lookup_strings
di_path_prop_namedi_path_prop_strings
di_path_prop_nextdi_path_prop_type di_path_statedi_prom_fini
di_prom_initdi_prom_prop_data
di_prom_prop_lookup_bytesdi_prom_prop_lookup_ints
di_prom_prop_lookup_stringsdi_prom_prop_name
di_prom_prop_nextdi_prop_bytes di_prop_devtdi_prop_int64
di_prop_intsdi_prop_lookup_bytes
di_prop_lookup_int64di_prop_lookup_ints
di_prop_lookup_stringsdi_prop_name di_prop_nextdi_prop_strings
di_prop_typedi_sibling_node di_statedi_walk_link di_walk_ln‐
odedi_walk_minor di_walk_node
EXAMPLES
Example 1 Information accessible through libdevinfo interfaces
The following example illustrates the kind of information accessible
through libdevinfo interfaces for a device node representing a hard
disk (sd2):
Attributes
node name: sd
instance: 5
physical path: /pci@400/pci@1/pci@0/pci@4/scsi@0/iport@1/disk@w5000cca0153966b9,0
Properties
target=2
lun=0
Minor nodes
(disk partition /dev/dsk/c0t5000CCA0153966B8d0s0)
name: a
spectype: IF_BLK (block special)
(disk partition /dev/rdsk/c0t5000CCA0153966B8d0s2)
name: c,raw
spectype: IF_CHR (character special)
FILES
/lib/libdevinfo.so.1
shared object
/usr/lib/64/libdevinfo.so.1
64-bit shared object
ATTRIBUTES
See attributes(7) for descriptions of the following attributes:
tab() box; cw(2.75i) |cw(2.75i) lw(2.75i) |lw(2.75i) ATTRIBUTE TYPEAT‐
TRIBUTE VALUE _ Availabilitysystem/library _ Interface StabilityCommit‐
ted _ MT-LevelSafe
SEE ALSO
pvs(1), di_walk_node(3DEVINFO), di_binding_name(3DEVINFO),
di_child_node(3DEVINFO), di_devfs_path(3DEVINFO), di_init(3DEVINFO),
di_minor_devt(3DEVINFO), di_minor_next(3DEVINFO),
di_path_bus_addr(3DEVINFO), di_path_client_next_path(3DEVINFO),
di_path_prop_bytes(3DEVINFO), di_path_prop_lookup_bytes(3DEVINFO),
di_path_prop_next(3DEVINFO), di_prom_init(3DEVINFO),
di_prop_bytes(3DEVINFO), di_prop_lookup_bytes(3DEVINFO),
di_prop_next(3DEVINFO), di_walk_minor(3DEVINFO), intro(3), attrib‐
utes(7), devlinks(8), prtconf(8)
Writing Device Drivers in Oracle Solaris 11.4
Oracle Solaris 11.4 15 Nov 2016 libdevinfo(3LIB)