The IPMI FRU format is the byte layout of the inventory data that a Field Replaceable Unit carries: who made the board, its name, part and serial numbers, and when it was built. It is defined in the IPMI Platform Management FRU Information Storage Definition v1.0. The same format is used whether the bytes sit in a FRU EEPROM or in the flash of a management controller. This article walks through each part of the format and ends with a small image you can check byte by byte.
The IPMI FRU format at a glance
A FRU image starts with an 8-byte common header. The header points to up to five areas, each starting on an 8-byte boundary:
- Internal Use Area: private data of the manufacturer.
- Chassis Info Area: information about the chassis.
- Board Info Area: manufacturing date, manufacturer, product name, serial number, part number and FRU file ID.
- Product Info Area: manufacturer, product name, part or model number, version, serial number, asset tag and FRU file ID.
- MultiRecord Area: a chain of typed binary records.
Any area can be absent. Multi-byte numbers are stored least significant byte first.
The common header
| Byte | Content |
|---|---|
| 0 | Format version, 01h |
| 1 | Internal Use Area offset |
| 2 | Chassis Info Area offset |
| 3 | Board Info Area offset |
| 4 | Product Info Area offset |
| 5 | MultiRecord Area offset |
| 6 | Pad, 00h |
| 7 | Zero checksum of bytes 0 to 6 |
Each offset counts 8-byte units from the start of the image, so 01h means byte 8 and 0Bh means byte 88. An offset of 00h means the area is not present.
FRU checksums
The FRU format uses a zero checksum. The checksum byte is chosen so that the covered bytes plus the checksum sum to 00h modulo 256. In code it is (-sum(bytes)) & 0xFF. To check a block, add every byte including the checksum and test that the low 8 bits are zero. The common header, each info area, and each MultiRecord header and record body carry a checksum.
Board and product info areas
The info areas share a frame. Byte 0 is the format version, 01h. Byte 1 is the area length in 8-byte units. The fields follow, the field list ends with the byte C1h, 00h padding fills the area, and the last byte is the zero checksum of the whole area.
The Product Info Area has a language code before its first text field. The Board Info Area has a language code and the 3-byte manufacturing date. Language code 00h means English.
The type/length byte
Every text field starts with a type/length byte. Bits 5:0 hold the number of data bytes that follow, 0 to 63. Bits 7:6 select the encoding: binary, BCD plus, 6-bit packed ASCII, or 8-bit ASCII (11b). A field of C4h is 8-bit ASCII with four data bytes. C0h is an empty field. C1h marks the end of the field list.
Board manufacturing date
The Board Info Area stores the manufacturing date as a 3-byte count of minutes since 1996-01-01 00:00, least significant byte first. 000000h means unspecified. A board built on 2026-11-02 at 14:30 is 16,219,590 minutes after the origin, F77DC6h, stored as C6 7D F7.
Three bytes hold at most FFFFFFh minutes, which is 2027-11-24 20:15. The IPMI FRU date rollover in November 2027 covers what happens after that and the VITA 46.11 record that carries the date instead.
The MultiRecord area
The MultiRecord Area is a chain of records, each with a 5-byte header:
| Byte | Content |
|---|---|
| 0 | Record type ID; C0h is an OEM record |
| 1 | Bit 7: end of list. Bits 3:0: record format version, 2h |
| 2 | Record length: data bytes after the header |
| 3 | Record checksum: zero checksum of the data bytes |
| 4 | Header checksum: zero checksum of bytes 0 to 3 |
A reader follows the chain from record to record and stops after the record whose end-of-list bit is set.
A worked hex example
The image below is 102 bytes: a common header, a Board Info Area, a Product Info Area and one MultiRecord. We generated it with a script and checked every checksum by summing the bytes. The strings are placeholders.
| Offset | Bytes | Meaning |
|---|---|---|
| 00h | 01 00 00 01 06 0B 00 ED | Common header: version 1; Internal Use and Chassis Info absent; Board at 1 × 8 = 08h; Product at 6 × 8 = 30h; MultiRecord at 0Bh × 8 = 58h; pad; checksum. The eight bytes sum to 100h. |
| 08h | 01 05 00 | Board area: version 1, length 5 × 8 = 40 bytes, language English |
| 0Bh | C6 7D F7 | Manufacturing date F77DC6h = 16,219,590 minutes = 2026-11-02 14:30 |
| 0Eh | C4 41 43 4D 45 | Manufacturer, 8-bit ASCII, 4 bytes: ACME |
| 13h | C8 56 50 58 20 43 41 52 44 | Product name, 8 bytes: VPX CARD |
| 1Ch | C6 53 4E 30 30 30 31 | Serial number, 6 bytes: SN0001 |
| 23h | C6 50 4E 2D 31 30 30 | Part number, 6 bytes: PN-100 |
| 2Ah | C0 | FRU file ID, empty |
| 2Bh | C1 00 00 00 1B | End of fields, padding, board area checksum 1Bh |
| 30h | 01 05 00 | Product area: version 1, length 40 bytes, language English |
| 33h | C4 41 43 4D 45 | Manufacturer: ACME |
| 38h | C8 56 50 58 20 43 41 52 44 | Product name: VPX CARD |
| 41h | C6 50 4E 2D 31 30 30 | Part or model number: PN-100 |
| 48h | C3 31 2E 30 | Product version, 3 bytes: 1.0 |
| 4Ch | C6 53 4E 30 30 30 31 | Serial number: SN0001 |
| 53h | C0 C0 | Asset tag and FRU file ID, both empty |
| 55h | C1 00 43 | End of fields, padding, product area checksum 43h |
| 58h | C0 82 09 65 50 | MultiRecord header: OEM type C0h; end of list, version 2; 9 data bytes; record checksum 65h; header checksum 50h |
| 5Dh | AC 81 00 34 00 | VITA manufacturer ID 0081ACh, record ID 34h (Alternate Manufacturing Date/Time), record version 0 |
| 62h | C6 7D F7 00 | 32-bit minutes 00F77DC6h, the same date as the board area |
To check the record checksum, add the nine data bytes and 65h: the total is 400h, and its low byte is zero. The header bytes C0 + 82 + 09 + 65 + 50 sum to 200h. The board and product areas each sum to a multiple of 100h in the same way.
To see each field decoded, paste these bytes into our free tool and decode a FRU image in your browser.
How to read FRU data with ipmitool
On a server, ipmitool fru print decodes the FRU inventory the BMC knows about, and ipmitool fru read saves the raw bytes of a FRU to a file. Underneath, tools use the IPMI Storage commands Get FRU Inventory Area Info, Read FRU Data and Write FRU Data (NetFn 0Ah, commands 10h, 11h and 12h).
VITA 46.11 rules for FRU 0
In a VPX system, FRU 0 is the plug-in module that holds the IPMC. Following VITA 46.11, the IronKernel FRU 0 image has a Common Header, a Board Info Area and a Product Info Area, a Chassis Info Area offset of 00h, no Internal Use Area, and a MultiRecord Area. VITA 46.11 also requires the FRU data to be readable whatever the state of payload power.
The IronKernel VITA 46.11 IPMC builds its 512-byte FRU 0 image at compile time. Its MultiRecord Area holds the VITA Alternate Manufacturing Date/Time record. Its self test checks the header, every area checksum, the end-of-fields markers and the MultiRecord chain at startup and after each accepted Write FRU Data.