| Introduction | |
| ============ | |
| The FreeBSD port of sg3_utils contains those utilities that are _not_ | |
| specific to Linux. In some cases the FreeBSD camcontrol command supplies | |
| similar functionality; for example 'sg_map' is similar to | |
| 'camcontrol devlist'. | |
| The dd variants from the sg3_utils package (e.g. sg_dd) rely on too many | |
| Linux idiosyncrasies to be easily ported. A new package called 'ddpt' | |
| contains a utility with similar functionality to sg_dd and ddpt is available | |
| for FreeBSD. | |
| Supported Utilities | |
| =================== | |
| Here is a list of utilities that have been ported: | |
| sg_compare_and_write | |
| sg_decode_sense | |
| sg_format | |
| sg_get_config | |
| sg_get_lba_status | |
| sg_ident | |
| sg_inq [dropped ATA IDENTIFY DEVICE capability] | |
| sg_logs | |
| sg_luns | |
| sg_modes | |
| sg_opcodes | |
| sg_persist | |
| sg_prevent | |
| sg_raw | |
| sg_rdac | |
| sg_read_block_limits | |
| sg_read_buffer | |
| sg_read_long | |
| sg_readcap | |
| sg_reassign | |
| sg_referrals | |
| sg_requests | |
| sg_rmsn | |
| sg_rtpg | |
| sg_safte | |
| sg_sanitize | |
| sg_sat_identify | |
| sg_sat_phy_event | |
| sg_sat_set_features | |
| sg_senddiag | |
| sg_ses | |
| sg_start | |
| sg_stpg | |
| sg_sync | |
| sg_turs | |
| sg_verify | |
| sg_unmap | |
| sg_vpd | |
| sg_wr_mode | |
| sg_write_buffer | |
| sg_write_long | |
| sg_write_same | |
| Most utility names are indicative of the main SCSI command | |
| that they execute. Some utilities are slightly higher level, for | |
| example sg_ses fetches SCSI Enclosure Services (SES) status pages and | |
| can send control pages. Each utility has a man page (placed in | |
| section 8). An overview of sg3_utils can be found at: | |
| http://sg.danny.cz/sg/sg3_utils.html . | |
| A copy of the "sg3_utils.html" file is in the "doc" subdirectory. | |
| The executables and library can be built from the source code in | |
| the tarball and installed with the familiar | |
| "./configure ; make ; make install" sequence. If this fails try | |
| running the "./autogen.sh" script prior to that sequence. There | |
| are generic instruction on configure and friend in the INSTALL file. | |
| Some man pages have examples which use Linux device names which | |
| hopefully will not confuse the FreeBSD users. | |
| Device naming | |
| ============= | |
| In FreeBSD disks have block names like '/dev/da0' with a corresponding | |
| pass-through device name like '/dev/pass0'. Use this command | |
| "camcontrol devlist" to see that SCSI devices available. | |
| FreeBSD installation | |
| ==================== | |
| The traditional './configure ; make ; make install' sequence from the | |
| top level of the unpacked tarball will work on FreeBSD. But the man pages | |
| will be placed under the /usr/local/share/man directory which unfortunately | |
| is not on the standard manpath. One solution is to add this path by | |
| creating a file with a name like local_share.conf in the | |
| /usr/local/etc/man.d/ directory and placing this line in it: | |
| MANPATH /usr/local/share/man | |
| FreeBSD 9.0 has a "ports" entry for sg3_utils under the | |
| /usr/ports/sysutils directory. It points to version 1.28 of sg3_utils | |
| which is now a bit dated. It could be used as a template to point | |
| to more recent versions. | |
| kFreeBSD | |
| ======== | |
| sg3_utils can be built into a Debian package for kFreeBSD using the | |
| ./build_debian.sh script in the top level directory. This has been tested | |
| with Debian 6.0 release. | |
| Details | |
| ======= | |
| Most of the ported utilities listed above use SCSI command functions | |
| declared in sg_cmds_*.h headers . Those SCSI command functions are | |
| implemented in the corresponding ".c" files. The ".c" files pass SCSI | |
| commands to the host operating system via an interface declared in sg_pt.h . | |
| There are currently five implementations of that interface depending on | |
| the host operating system: | |
| - sg_pt_linux.c | |
| - sg_pt_freebsd.c | |
| - sg_pt_osf1.c [Tru64] | |
| - sg_pt_win32.c | |
| - sg_pt_solaris.c | |
| The sg_pt_freebsd.c file uses the FreeBSD CAM SCSI pass through mechanism. | |
| Hence only FreeBSD device nodes that support CAM can be used. These can be | |
| viewed with the "camcontrol devlist" command. To access ATAPI devices (e.g. | |
| ATAPI DVD drives) the kernel may need to be configured with the "atapicam" | |
| device. | |
| Attempts to send SCSI commands with data-in or data-out buffers around 64 KB | |
| and larger failed on a FreeBSD 7.0 with an "argument list too long" error | |
| message. There is an associated kernel message (viewable with dmesg) that an | |
| attempt has been made to map <n> bytes which is greater than | |
| DFLTPHYS(65536). Still a problem in FreeBSD 8.1 . Due to CAM overhead the | |
| largest power of 2 that can fit through with one command is 32768 bytes (32 | |
| KB). | |
| FreeBSD 9.0 is the most recent version of FreeBSD tested with these | |
| utilities. | |
| Douglas Gilbert | |
| 14th January 2013 |