← All articles

IPMI FRU Format Explained

The common header, the info areas, type/length bytes, the MultiRecord area and checksums of an IPMI FRU image, byte by byte.

IronKernel ·

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

ByteContent
0Format version, 01h
1Internal Use Area offset
2Chassis Info Area offset
3Board Info Area offset
4Product Info Area offset
5MultiRecord Area offset
6Pad, 00h
7Zero 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:

ByteContent
0Record type ID; C0h is an OEM record
1Bit 7: end of list. Bits 3:0: record format version, 2h
2Record length: data bytes after the header
3Record checksum: zero checksum of the data bytes
4Header 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.

OffsetBytesMeaning
00h01 00 00 01 06 0B 00 EDCommon 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.
08h01 05 00Board area: version 1, length 5 × 8 = 40 bytes, language English
0BhC6 7D F7Manufacturing date F77DC6h = 16,219,590 minutes = 2026-11-02 14:30
0EhC4 41 43 4D 45Manufacturer, 8-bit ASCII, 4 bytes: ACME
13hC8 56 50 58 20 43 41 52 44Product name, 8 bytes: VPX CARD
1ChC6 53 4E 30 30 30 31Serial number, 6 bytes: SN0001
23hC6 50 4E 2D 31 30 30Part number, 6 bytes: PN-100
2AhC0FRU file ID, empty
2BhC1 00 00 00 1BEnd of fields, padding, board area checksum 1Bh
30h01 05 00Product area: version 1, length 40 bytes, language English
33hC4 41 43 4D 45Manufacturer: ACME
38hC8 56 50 58 20 43 41 52 44Product name: VPX CARD
41hC6 50 4E 2D 31 30 30Part or model number: PN-100
48hC3 31 2E 30Product version, 3 bytes: 1.0
4ChC6 53 4E 30 30 30 31Serial number: SN0001
53hC0 C0Asset tag and FRU file ID, both empty
55hC1 00 43End of fields, padding, product area checksum 43h
58hC0 82 09 65 50MultiRecord header: OEM type C0h; end of list, version 2; 9 data bytes; record checksum 65h; header checksum 50h
5DhAC 81 00 34 00VITA manufacturer ID 0081ACh, record ID 34h (Alternate Manufacturing Date/Time), record version 0
62hC6 7D F7 0032-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.

Further reading

FRU inventory for your VPX module

Our VITA 46.11 IPMC, written in Rust, builds its FRU 0 image at compile time and checks it at every startup.