http://sg.danny.cz/sg/News[2008-10-14] beta smp_utils-0.94.tgz , build fix for lk 2.6.27[2008-10-07] beta sg3_utils-1.27.tgz , sg_dd: experiment with of2=OFILE2 [2008-10-01] sg pages find a new home at http://sg.danny.cz/sg/ [2008-08-13] torque.net closing down in early September .... [2008-07-26] beta sg3_utils-1.27.tgz , flock support in sg_dd, et alia [2008-07-10] release lsscsi version 0.21 , see lsscsi page [2008-07-09] release lsscsi version 0.20 , see lsscsi page [2008-06-28] release sdparm version 1.03, see the sdparm page [2008-06-25] release sg3_utils version 1.26, see the sg3_utils page [2008-01-06] release smp_utils 0.93 (for SAS management), see smp_utils page [2007-10-29] update tools page: brief summary of various storage/scsi tools [2007-10-16] release sg3_utils version 1.25, see the sg3_utils page [2007-10-08] release sdparm version 1.02, see the sdparm page [2007-04-30] hdparm-7.3 released by Mark Lord, adds SAT support (now 7.7 available) [2007-03-08] scsi_debug version 1.81 for lk 2.6.21-rc3 (see scsi_debug page) [2007-01-25] release lsscsi version 0.19 , see lsscsi page [2006-11-23] release lsscsi version 0.18 , see lsscsi page; no change since March 2006 [2006-10-24] update scsi_ses driver [2006-04-02] update maximum transfer size in SG_IO ioctl page; see sg_io page [2005-11-21] page discussing SCSI/SAS/SATA/MMC power management states [2005-09-22] Update sg driver version 3 documentation (still basically lk 2.4 series) IntroductionThe Linux sg driver is a upper level SCSI subsystem device driver that is used primarily to handle devices _not_ covered by the other upper level drivers: sd (disks), st (tapes) and sr (CDROMs and DVDs). The sg driver is used for enclosure management, cd writers, applications that read cd audio digitally and scanners. Sg can also be used for less usual tasks performed on disks, tapes and cdroms. Sg is a character device driver which, in some contexts, gives it some advantages over block device drivers such as sd and sr. The interface of sg is at the level of SCSI command requests and their associated responses.The term SCSI has several meaning depending on the context. This leads to confusion. One practical way of defining it today is everything that the t10 INCITS committee controls, see www.t10.org . Probably the most succinct overview is this standards architecture page . For practical purposes a "SCSI device" in Linux is any device that uses the Linux SCSI subsystem and this often includes SATA disks. BackgroundThe original driver was written by Lawrence Foard in 1992 and remained unchanged for several years. In August 1998 Heiko Eissfeldt and Joerg Schilling started working on enhancements to this driver. Soon after, the author became involved and these efforts culminated in a new sg driver being placed in Linux kernel 2.2.6 which was released on 16th April 1999. It contains the first major upgrade to the SCSI generic packet device driver ("sg") since 1992. This new driver has a super-set of the original interface and the semantics of the implementation are very similar. Hence it offers a high degree of backward compatibility with the original driver.The major reason for introducing a new sg driver into the 2.2 series of kernels was the problem that the original device driver was having finding memory. This driver improves the situation by using scatter gather, memory above the 16 MBytes level and memory from the scsi dma pool as appropriate. Other drivers were affected by these memory problems (especially those associated with ISA hardware). In kernel 2.2.10 H.J. Lu introduced a new kernel memory allocator that alleviated many of these memory problems. On 4th January 2001 the Linux 2.4.0 kernel was introduced and it
contained the "version 3" sg driver that is described below. On 17th December 2003 the Linux 2.6.0 kernel was introduced and it also contained the "version 3" sg driver that is described below. The SG_IO ioctl was implemented in the block layer and in several other "char" SCSI drivers (e.g. the st driver for tapes). Hence many programs can use primary device nodes (e.g. /dev/hdd for an ATAPI cd/dvd writer) to send SCSI command via the SG_IO ioctl. The sg driver still permits a clean pass through interface to all devices that use the linux SCSI subsystem. FeaturesThe following enhancements have been added (in lk 2.2.6): scatter gather, command queueing, per file descriptor sequencing (was per device) and asynchronous notification. Scatter gather allows large buffers (previously limited to 128 KB on i386) to be used. Scatter gather is also a lot more "kernel friendly". The original driver used a single large buffer which made it impossible to run 2 or more sg-based applications at the same time. With the new driver a buffer is reserved for each file descriptor guaranteeing that at least that buffer size will be available for each request on the file descriptor. A user may request a larger buffer size on any particular request but runs the (usually remote) risk of an out of memory (ENOMEM) error.A "version 3" sg driver was introduced in Linux kernel 2.4.0 . It
adds a new interface
that allows more control over SCSI commands and returns more
information
about their performance. This driver is present in Linux kernel 2.4.0 .
A separate version with reduced capabilities is available for the
2.2 series kernels. Features include: a simplified SG_IO ioctl,
larger sense buffer, residual DMA count, 16 byte (or longer) commands,
direct IO
support, command duration timing and a "proc_fs" interface. Naturally
it
is backward compatible with applications based on the sg interface
in the lk 2.2 series and earlier. SG device driver downloadsThe following table summarizes the different versions of the sg device driver that are available. If you wish to use one of these tarballs then untar it in /usr/src/linux (or wherever the top of your kernel tree is). As a precaution you may wish to copy the files include/scsi/sg.h and drivers/scsi/sg.c to other names. This will facilitate reversing the patch if required. For information about the differences between versions see the history section at the top of the include/scsi/sg.h file.
For the Linux kernel 2.4 series, the current production version of
sg is 3.1.25 (in lk 2.4.23->32). For the Linux kernel 2.6 series, the current production version of
sg is 3.5.34 . Older versions can be obtained from this directory. A sub directory called "original" contains the original driver (i.e. prior to linux kernel 2.2.6) and its HOWTO document. Utilities: sg3_utils and sg_utilsThese packages contain multiple utilities, all with command line interfaces. They send one one more SCSI commands to the nominated device and output the response including error reports if the command failed. The name of the SCSI command executed is typically reflected in the name of the utility; for example: "sg_inq" sends a SCSI INQUIRY command and decodes its response. These utilities were originally written for the Linux operating system. In sg3_utils version 1.19 a subset of the utilities were ported to FreeBSD and Tru64; in version 1.22 a similar subset of the utilities were ported to Windows; and in version 1.24 a Solaris port was added.The most recent package is called sg3_utils and it uses the sg "version 3" interface (sometimes known as the SG_IO interface) in linux. This interface is in lk 2.4.0 and later kernels, including the lk 2.6 series. All new features are being added into sg3_utils (i.e. it is still being actively developed). Many of the utilities in sg3_utils (versions >= 1.02) can be used directly on block devices (e.g. sg_inq /dev/sda) in the lk 2.6 series. The sg_dd utility is at a slightly higher level issuing SCSI READ and WRITE commands to copy data, mimicking the Unix dd command. See the sg3_utils package page for more details. The older (and original) package is called sg_utils and it
uses the sg version 2
interface found linux kernel version 2.2.6 and onward. Over half of
those utilities
will also work on the original sg device driver (at least back to
the lk 2.0 series). If required, "make common" will produce the
subset that will work on the whole lk 2.x series. Since the sg
"version 3" device driver still maintains the original
interface, the sg_utils package will continue to work in the lk 2.4 and
lk 2.6 series . This
package is now in maintenance mode, only bugs will be fixed. See this page for more details.
See the sg3_utils page for older versions and recent betas. ** Some browsers (e.g. firefox) may interpret a file with an extension of "rpm" as an audio file. In which case press the right button over the link and select "Save link as ..." to download the file. Sg related pagesFollowing are some links to related pages on this site:
External referencesHere are some useful links to related information held at other sites:
gpg key id: D13E1502 Last updated: 23rd October 2008, 16:20 [GMT-4] |
