[ipxe-devel] Option ROM experience on a various mobos and NICs adapters
v.tolstov at selfip.ru
Wed May 21 20:40:56 BST 2014
does it possible to replace intel boot agent with ipxe on supermicro server?
2014-05-21 23:00 GMT+04:00 Anton D. Kachalov <mouse at yandex-team.ru>:
> I would like to share my Option ROM's embedding experience.
> == AMIBIOS8 ==
> Tested server platforms:
> Asus: KGNE-D16, KGP(M)E-D16, Z8NR-D12 and Z8PG-D18
> Supermicro: all mobos series X7, X8 and H8 (X8DTU, X8DTT, X8DT3, H8DGU)
> Huawei: Tecal RH1285
> HP: Proliant DL160 G6 and DL165 G7
> There is a trick with AMI BIOS image to replace original Option ROM with
> iPXE. Every BIOS image contains two Option ROMs: iSCSI and PXE. It might be
> choosen from BIOS settings. Meanwhile AMI MMTool allows to replace only one
> module with specific ModuleID/VendorID/DeviceID. In case of the platforms
> above we always have two records with identical IDs. Therefore, we need to
> workaround this in HEX-editor:
> Look for requested LAN vendor/product IDs in RunLoc column (e.g. 8086:10C9)
> column. Write down RomLoc value.
> There is a DeviceID at offset "RomLoc - 2" in BIOS image. Change it to some
> value (e.g. C9 -> CD). Save.
> Run MMTool and replace module with our original VendorID/DeviceID.
> Look for changed VID/PID (i.e. 8086:10CD) in RunLoc column and revert back
> our change at offset "RomLoc - 2".
> For the second module repeat steps 1-4.
> To correct CRCs just replace first module again.
> Now we are ready to update BIOS in the standard way: using flashrom or via
> NOTE: Use MMtool version 3.22+ only.
> == UEFI (APTIO) ==
> Tested server platforms:
> Asus: Z9PE and Z9PG series
> Supermicro: X9DRW, X9DRFF, X9DRT
> Gigabyte: GA-7PPSH, GA-7PTSH
> Quanta: R210-MB2MS
> AMI APTIO (UEFI enabled) much is much easier to update rather tan AMIBIOS8.
> To update Option ROM we need AMI MMTool-APTIO tool:
> Choose "Replace" tab and select our Option ROM.
> Check "Link Present" in "For Option ROM only" group.
> Select requested VID/PID in the list and click "Replace".
> Profit :)
> Now we are ready to update BIOS in the standard way.
> == HP Proliant360 G5 ==
> It's a special case with a very proprietary BIOS. BIOS packed by 64k chunks
> by old-school PKWare. The BIOS tool might be found within the same BIOS ROM
> To unpack BIOS it's required to:
> C:\> rompaq /d cpqp5802.49a cpqp5802.rom
> To pack BIOS back (chunk size is mandatory!):
> C:\> rompaq /c cpqp5802.rom CPQP580 249A 08/20/2012 64
> When unpacked (CPQP5802.ROM) PXE Option ROM has offset 0x00171800. Next
> Video Option ROM at offset 0x00183800. That means we have only 0x12_000
> bytes for our iPXE Option ROM. Not so much. To replace a chunk we can use
> standard "dd" util. Then pack everything back:
> C:\> rompaq /t /u CPQSRVR2.CPU CPQP5802.49A
> and ready to burn.
> == Intel 82599 (X520-DA2) ==
> Intel's burning tool accepts only FLB files. The simplest wat to obtain FLB
> header is to dump (backup) flash:
> $ bootutil64e -nic X -saveimage -file backup.flb
> Then catch the header (first 0x17a bytes). Here is the significant offsets:
> Option ROM size is at offset 0x0E0 (e.g. 00 00 01 is 64k). For example, our
> Option ROM is 68608 (0x10C00) bytes. We need to change bytes to: "00 0C 01"
> @ 0x0E0.
> PXE version is at offset 0x136 (e.g. 02 03 0B is 2.2.11). For example, our
> Option ROM's version is 7.8.150. We need to change bytes to: "07 08 96" @
> To obtain PXE version size just run
> # bootutil64e -iv -file 808610fb.rom
> To burn image just cat fixed header and your custom Option ROM and run:
> # bootutil64e -nic X -restoreimage -file 808610fb.flb
> Current BootUtil could be downloaded from Intel Download Center
> == Mellanox MCX311A-XCAT (to be completed) ==
> Upstream iPXE modification could be obtains from
> Burning tool: http://www.mellanox.com/downloads/MFT/mft-3.6.0-24.tgz To burn
> Option ROM we need "flint" (or flint_oem) and "minit" tools.
> Current adapter (15b3:1003, ConnectX3) have not supported in iPXE upstream.
> Build and insmod kernel modules mst_pci and mst_pciconf (sources could be
> found in mft.tar.gz).
> Create character devices:
> mknod /dev/mst/mt27500_pciconf_cr0 c 245 0
> mknod /dev/mst/mt27500_pci_cr0 c 246 0
> Initialize MLX:
> minit /dev/mst/mt27500_pci_cr0 07:00.0 0 (07:00.0 is a PCI bus address
> and function. Get it from "lspci -n").
> Burn ROM:
> flint -d /dev/mst/mt27500_pci_cr0 bbrom 15b31003.rom
> FLINT expects a header with PXE version that is lack in iPXE ROM. Just
> warning. Ignore it.
> To be continued…
> ipxe-devel mailing list
> ipxe-devel at lists.ipxe.org
e-mail: v.tolstov at selfip.ru
jabber: vase at selfip.ru
More information about the ipxe-devel