The sg3_utils package is a collection of programs that use the sg interface. The utilities can be categorized as follows:
variants of the Unix dd command: sg_dd, sgp_dd, sgq_dd and sgm_dd,
scanning and mapping utilities: sg_scan, sg_map and scsi_devfs_scan,
SCSI support: sg_inq, scsi_inquiry, sginfo, sg_readcap, sg_start and sg_reset,
timing and testing: sg_rbuf, sg_test_rwbuf, sg_read, sg_turs and sg_debug,
example programs: sg_simple1..4 and sg_simple16,
The "dd" family of utilities take a sg device file name as input (i.e. if=<sg_dev_filen_name>), as output of both. They can also take raw device file names [Web Specs: Distributed computing] [1] instead of sg device file names. One important difference from the standard dd command is that the value given to the block size (bs=) argument must be the exact block size of that device and not a integral multiple as allowed by .:: hosted.weblate.org ::. dd. These "dd" variants are suitable for SCSI Direct Access Devices such as disk and CDROMs (but are not suitable for SCSI tape devices).
The sg3_utils package is designed to be used with the sg version 3 driver found in the lk 2.4 series. There is also a sg_utils package that supports a subset of these commands for the sg version 2 driver (with some support for the original sg driver) which is found in the lk 2.2 series (from and after lk 2.2.6). There are links to the most recent sg3_utils (and sg_utils) packages at the sg website at www.torque.net/sg. There are tarballs and both source and binary rpm packages. At the time of writing the latest sg3_utils tarball is at www.torque.net/sg/p/sg3_utils-0.97.tgz. There is a README file in that tarball that should be examined for up to date information. The more important utility commands (e.g. sg_dd) have "man" pages. .:: telegra.ph ::. [2]
Almost all of the sg device driver capabilities discussed in this document appear in code in one or more of these programs. For example the recently added mmap-ed IO can be found in sgm_dd, sg_read and sg_rbuf.
The sg3_utils package also provides some functions that may be useful for applications that use sg. The functions declared in sg_err.h and defined in sg_err.c categorize SCSI subsystem errors that are returned to an application in a read() or a ioctl(SG_IO). In the case of sense buffers, they are decoded into text message (as per SCSI 2 definitions). There is also a function to do a 64 bit seek (llseek.h).
| [1] | Raw device names are of the form /dev/raw/raw<n> and can be bound to block devices (e.g. an IDE disk partition such as .:: www.walkscore.com ::. /dev/hda3). The binding is done with the raw command (see "man raw"). |
| [2] | Although the author wrote most of these programs, initially to test facilities within the sg driver, some have been contributed by others. See .:: podcasts.apple.com ::. [Reference: Ruby on Rails] www.torque.net/sg/u_index.html for more information. |