Manawyrm / nvme-int13h-optionrom

Option ROM to boot x86 PCs from NVMe drives (legacy BIOS, INT 13h)

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

NVMe INT13h Option ROM

Boot legacy PCs from NVMe storage: YouTube video with ThinkPad T43

T43 showing the NVME BIOS init message T43 Boot Menu showing a NVMe option

This project allows old x86 computers using a classic BIOS to boot from modern NVMe storage attached via PCI(e). It's a heavily modified version of iPXE (which usually allows for booting from the network), but instead of the network, this code uses a port of the SeaBIOS NVMe implementation to talk to a local NVMe drive.

Project status

Works™
Very little fault tolerance and testing on different devices.

Supported hosts

  • IBM ThinkPad T43
  • QEMU VM, i440fx

Supported SSDs

  • Samsung SSD 980
  • Corsair Force MP510

Features

  • Booting from NVMe storage in Legacy/BIOS mode
  • Works on 32bit-only CPUs (Pentium 3, Atom, etc.)
  • Option ROM, USB flash drive, SD card, CD-ROM, chainloading (e.g. from grub) booting supported

Limitations

  • Write support is currently disabled. The code is present, but it's additional danger for no benefit (for my usecase)
  • Only 1 NVMe drive (with 1 namespace) is properly handled at the moment
  • 64bit BARs are probably not handled correctly (untested!)

Similar projects / Alternatives

There are 2 other Option ROMs publicly available:

  • Samsung 950 Pro (exposed by the PCIe device, device-specific)
  • community modded VMWare NVMe ROM (didn't work on my hardware, did work in QEMU)

This project is GPL-licensed, can be freely redistributed (both as binaries and source) and can be instrumented/debugged easily (as it's written in C).

About

Option ROM to boot x86 PCs from NVMe drives (legacy BIOS, INT 13h)

License:GNU General Public License v2.0


Languages

Language:C 97.2%Language:Assembly 1.2%Language:Perl 0.7%Language:Makefile 0.3%Language:PHP 0.3%Language:C++ 0.1%Language:Python 0.1%Language:Shell 0.1%Language:Roff 0.0%Language:GDB 0.0%Language:HTML 0.0%