| Hex data for various sg3_utils utilities |
| ======================================== |
| |
| The files in this folder contain hexadecimal data (in ASCII) and associated |
| comments (prefixed with the hash mark symbol: '#' ). Files containing |
| hexadecimal data have the extension ".hex". There is at least one file |
| containing binary data and it has the extension ".raw". |
| |
| The utility that each hex file is associated with can be determined in most |
| case by prepending "sg_" to these filenames. Then go to the 'src' folder (a |
| sibling folder to this one) and look for a match or partial match on |
| the name. |
| |
| For example: |
| vpd_dev_id.hex |
| after prepending 'sg_' becomes: |
| sg_vpd_dev_id.hex |
| which is a partial match on the sg_vpd utility. |
| The remaining 'dev_id.hex' is meant to suggest the 'device identifier' |
| VPD page which is a mandatory VPD page for SCSI devices.. |
| |
| Assuming sg3_utils is installed, it can be tested like this: |
| sg_vpd --inhex=<folder_holding_sg3_utils>/inhex/vpd_dev_id.hex |
| |
| And should output this: |
| |
| Device Identification VPD page: |
| Addressed logical unit: |
| designator type: NAA, code set: Binary |
| 0x5000c5003011cb2b |
| Target port: |
| designator type: NAA, code set: Binary |
| transport: Serial Attached SCSI Protocol (SPL-4) |
| 0x5000c5003011cb29 |
| designator type: Relative target port, code set: Binary |
| transport: Serial Attached SCSI Protocol (SPL-4) |
| Relative target port: 0x1 |
| Target device that contains addressed lu: |
| designator type: NAA, code set: Binary |
| transport: Serial Attached SCSI Protocol (SPL-4) |
| 0x5000c5003011cb28 |
| designator type: SCSI name string, code set: UTF-8 |
| SCSI name string: |
| naa.5000C5003011CB28 |
| |
| Not all the hex files follow the "prepend sg_" pattern. Those hex files |
| starting with 'nvme_' are examples of invoking NVMe commands with the |
| sg_raw utility. |
| |
| Binary <--> Hexadecimal |
| ----------------------- |
| The vpd_zbdc.raw file is binary and was created by: |
| sg_decode_sense --inhex=vpd_zbdc.hex --nodecode --write=vpd_zbdc.raw |
| as an example of converting a file in ASCII hexadecimal byte oriented |
| format to binary. |
| |
| Turning binary output into hexadecimal can be done several ways. For |
| viewing in byte oriented ASCII hex these Unix commands can be used: |
| od -t x1 vpd_zbdc.raw |
| hexdump -C vpd_zbdc.raw |
| |
| Each line starting with a "input offset" which is a running count of |
| bytes, starting at zero. The hexdump examples shows an ASCII rendering |
| of those 16 bytes to the right of each line. The sg_decode_sense utility |
| may also be used: |
| sg_decode_sense --binary=vpd_zbdc.raw -H |
| sg_decode_sense --binary=vpd_zbdc.raw -HH |
| |
| The second form of sg_decode_sense appends an ASCII rendering of the 16 |
| bytes to the right of each line. |
| |
| When ASCII hexadecimal is being used as input to a utility in this |
| package, the "input offset" at the start of each line (and the optional |
| ASCII rendering to the right of each line) must not be given. |
| That can be done with hexdump: |
| hexdump -An -C -v vpd_zbdc.raw |
| ^^^ |
| That is a syntax error, there is no 'A' option <<<<<<<< check |
| |
| And the sg_decode_sense utility can do it with (with the --nodecode option): |
| sg_decode_sense -N --binary=vpd_zbdc.raw -HHH |
| That will print suitable lines of hexadecimal (16 bytes per line) to the |
| console (stdout) To go the other way (i.e. hexadecimal to binary): |
| sg_decode_sense -N --inhex=vpd_zbdc.hex --write=vpd_zbdc.bin |
| |
| |
| Conclusion |
| ---------- |
| Users are encouraged to send the author any ASCII hex files for utilities |
| that support --inhex and don't have hex data already. Special cases are |
| also welcome. They help the author test this code. |
| |
| Douglas Gilbert |
| 18th July 2022 |