Перейти к содержимому

Как добавить поддержку nvme в bios

  • автор:

Как поставить операционную систему на NVME SSD с устаревшей материнской платой. Часть вторая: модификация BIOS

Как поставить операционную систему на NVME SSD с устаревшей материнской платой. Часть вторая: модификация BIOS

В первой части нашего материала мы узнали, как использовать в качестве загрузочного накопители NVME на старых материнских платах, не поддерживающих нативную загрузку с NVME. Теперь же рассмотрим еще один, более «элегантный и правильный» способ — модификацию биоса.

За и против

Суть модификации в том, что мы добавляем в родной биос материнской платы EFI-модуль, или Option ROM, для поддержки NVME-накопителей.

Почему этот способ более правильный, чем использование менеджеров загрузки? Вы избегаете использования дополнительной программной прослойки: никакого увеличения времени загрузки, ковыряния в конфигурационных файлах, использования флешек или других носителей для размещения загрузчика. С точки зрения пользователя, процесс загрузки операционной системы (ОС) никак не меняется.

Но ничего идеального не бывает, так и здесь есть свои минусы. В первую очередь, это уровень подготовки пользователя. В зависимости от ситуации, могут потребоваться определенные знания и умения. Во-вторых, необходимость прошивки биоса, а это и наличие программатора в идеале, и риск превратить матплату в кирпич. Последнее, впрочем, дело поправимое, если есть программатор и резервный образ биоса с платы.

Тестовый стенд

Тестовый стенд с Legacy BIOS был взят из первой части:

  • Intel Pentium G2020;
  • Gigabyte GA-H67M-D2-B3;
  • 8 ГБ ОЗУ;
  • M.2 NVME Smartbuy Stream E13T 256 ГБ.

Для работы с AMI UEFI тестовый стенд выглядел таким образом:

  • AMD A4-5300 APU;
  • Asus F2A55-M LK;
  • 8 ГБ ОЗУ;
  • M.2 NVME Smartbuy Stream E13T 256 ГБ

Award BIOS

На тестовой плате от Gigabyte установлено программное обеспечение от Award. Это обычный (non-EFI) BIOS, и его редактирование для добавления необходимого нам модуля — задача не самая простая.

Для нашей задачи нам потребуется:

  • Оригинальный биос от платы;
  • Option ROM (OpROM) от SSD Samsung 950 Pro;
  • HEX—редактор;
  • Утилита CBROM, для интеграции OpROM в биос.

Биос платы качаем на официальном сайте (пример, как это сделать есть, тут), OpROM и утилиту для корректировки его контрольной суммы скачиваем тут (спасибо vlo), CBROM берем тут. Разархивируем все архивы, складываем файлы в отдельную папку, в нашем случае это будет award в корне диска C.

Неприятный нюанс в модификации не UEFI биос состоит в том, что потребуется конфигурировать его под определенный диск, устанавливаемы вами. В нашем случае это Smartbuy E13T, и нам потребуется узнать его идентификаторы vid и did.

  • VID (Vendor id) — идентификатор производителя оборудования.
  • DID (Device id) — идентификатор устройства.

Самый простой вариант — загрузиться с подключенным диском в операционную систему (Win 10, Win 8.1) с поддержкой NVME SSD. Вы можете работать не только с уже установленной ОС, но и использовать Live usb.

Открываем диспетчер устройств: правой кнопкой мыши (ПКМ) на значке меню «Пуск» — диспетчер устройств. Или пишем «диспетчер устройств» в строке поиска Windows 10.

Идем в пункт «Контроллеры запоминающих устройств», ищем «Стандартный драйвер NVM Express». Жмем ПКМ — свойства.

Переходим на вкладку «Сведения», из списка «Свойство» выбираем «ИД оборудования».

Ниже в поле «Значение» появятся строки. Первые четыре знака, после «VEN_» — это vid, после «DEV_» — это did. Сохраняем (ПКМ на строке — Копировать) или переписываем эти значения, как на примере.

Следующим этапом будет внедрение полученных vid/did в OpROM. Открываем шестнадцатеричный редактор, мы будем использовать WinHex. Идем в меню File — Open и выбираем файл ss-950.bin из папки award.

В центральной части окна программы мы видим шестнадцатеричные (hex) значения.

Нам нужно заменить четыре (выделены) первых байта (одна пара — один байт) в третьей строке (offset 00000020).

Здесь прописаны vid и did, и их нужно заменить на данные нашего диска. Но тут есть один нюанс — нужно поменять байты местами, то есть vid тестового диска 1987 нужно записать как 87 19, а did — вместо 5013, записывается как 13 50. Данные уже идут в hex-формате, поэтому записываются как есть. Вот так получилось после замены.

Сохраняем под нужным именем (в примере ss950-2.bin): File – Save as.

Открываем командную строку от имени Администратора. В Windows 10 просто пишем в строке поиска cmd, нажимаем ПКМ — Запуск от имени Администратора.

В открывшемся окне переходим в подготовленную папку (в нашем случае c:\award) командой cd c:\award.

Сейчас нужно исправить контрольную сумму OpROM после нашего вмешательства утилитой cs_fix. Вводим команду cs_fix.exe ss950-2.bin, если все прошло успешно, получаем сообщение как на скрине.

Теперь наш OpROM готов для добавления в файл биоса, но сначала посмотрим содержимое биоса. Вводим CBROM195.EXE h67md2b3.f7 /D, где h67d2hb3.f7 — название файла биоса. Вывод команды — это список всех модулей (ROM), содержащихся в файле.

Добавляем ss950-2.bin в файл: CBROM195.EXE h67md2b3.f7 /pci ss950-2.bin. На проценты не обращаем внимание.

Проверяем, что все прошло успешно: CBROM195.EXE h67md2b3.f7 /D

Сравнив две выдачи, можно увидеть, что добавилась новая запись с номером 23. В крайнем правом столбце видно, что там находится наш файл ss950-2.bin.

Прошивка BIOS

Полученный файл переносим на флешку, отформатированную в файловую систему FAT32. Заходим в биос по клавише DEL.

Сбрасываем настройки, по умолчанию выбрав «Load Fail-Safe defaults». После перезагрузки заходим еще раз в биос, нажимаем F8 для запуска утилиты-прошивальщика Q-Flash.

Делаем резервную копию установленного экземпляра биоса. Для этого выбираем пункт Save BIOS to Drive.

Утилита должна распознать установленную флешку, выбираем ее, вводим имя для сохраняемого файла.

После окончания процесса сохранения выбираем Update BIOS from Drive, выбираем файл h67md2b3.f7.

Подтверждаем, что мы хотим прошить данный файл, и ждем окончания процесса.

Нажимаем Esc для выхода, подтверждаем.

Еще раз заходим в биос. Если все было сделано верно, то в меню «Advanced BIOS Features — Hard Disk Boot Priority» появится новое загрузочное устройство — нужный нам NVME SSD.

Выбираем его как основное загрузочное устройство и устанавливаем операционную систему.

AMI UEFI

В качестве носителя UEFI от AMI была выбрана материнская плата от Asus.

Как и для модификации Award, нам потребуется определенный набор инструментов:

  • Оригинальный биос материнской платы (берем версию, которая уже установлена на плате).
  • Приложение для редактирования UEFI.
  • Модули поддержки NVME дисков.
  • Пакет утилит AFU — AMI Firmware Update Utility.

В качестве утилиты для работы с UEFI будем использовать UEFITool от CodeRush. А непосредственно интегрируемый модуль — NvmExpressDxe_4.ffs. Для плат, где свободного места не хватает для внедрения указанного модуля, можно использовать его «облегченную» версию — NvmExpressDxe_Small.ffs. Из пакета AFU (в нашем случае потребовалась версия AFUWIN64_v3.05.04 с поддержкой ключа /GAN) нам нужен исполняемый файл под Windows — AFUWINx64.EXE, а также amifldrv64.sys для его работы.

Для упрощения процесса производим все манипуляции из Windows, развернутой на подопытной плате. Размещаем все файлы в одной папке для удобства.

Делаем резервную копию установленного биоса. Для этого запускаем командную строку (CMD) от имени Администратора и переходим в папку с файлами командой: cd c:\ami, где c:\ami — путь к папке с нашими файлами.

Далее делаем саму резервную копию: afuwinx64 backup.rom /O, где backup.rom — имя файла резервной копии (можете назвать на свой вкус), /O — ключ для создания бэкапа. «Reading flash … done» оповестит об окончании процесса.

Теперь можно отложить окно командной строки, можно даже не закрывать — скоро потребуется. Открываем UEFITool. Идем в меню File — Open image file.

Выбираем файл бэкапа, полученный ранее (backup.rom). Откроется окно программы, нажав на UEFI image, можно увидеть структуру выбранного файла.

Теперь нужно определить, куда вставить файл модуля. Из-за сложной структуры и специфических особенностей производителей плат, вручную найти DXE том, где хранятся модули, бывает проблематично. Поэтому проще всего воспользоваться поиском.

Открываем меню File — Search или воспользуемся сочетанием клавиш Ctrl+F. В открывшемся окне выбираем вкладку Text, вводим в поле DXE, проверяем, что активирован чек-бокс Unicode и жмем «OK».

В нижней части окна, именуемой «Messages», будет выведен список совпадений.

Сделайте двойной клик левой кнопкой мыши на любой из записей и попадете в раздел, где было найдено совпадение. Ориентируемся по полю «Subtype»: если видите там «DXE driver», то вы в верной секции.

Можно также ориентироваться на модуль «CSMCORE».

Нас же интересует самая нижняя запись, после которой идет «Volume free space». В данном случае это запись с подтипом «Freeform», но это может быть и DXE driver.

Встаем на нее, жмем правой клавишей мыши и выбираем пункт Insert after.

И выбираем нужный для интеграции модуль.

Обратите внимание, что модуль должен оказаться в самом конце списка, прямо перед Volume free space. Определить его можно по имени модуля в столбце «Text».

Сохраняем полученный файл, вводим нужное имя модифицированного файла биоса (в примере mod.rom).

После того, как вы нажмете кнопку «Сохранить», вас спросят о том, хотите ли вы открыть измененный файл. Соглашаемся.

Откроется заново структура файла. Идем в раздел, куда мы вставляли модуль, и проверяем, что он там сохранился. Раскроем его запись и удостоверимся, что там есть обе (image и interface) секции.

Если все в порядке, то биос готов для прошивки.

Прошивка UEFI

Как и чем прошить биос зависит от материнской платы.

Мы же будем прошивать биос с помощью уже использованного AFUWIN. Переходим обратно в командную строку. Сначала прошиваем оригинальный файл биоса с сайта (той же версии, что и установленный на плате) командой afuwinx64 6701.cap, где 6701.cap — имя файла оригинального биоса (переименован для простоты ввода).

Когда все этапы успешно выполнятся, сразу прошиваем модифицированный биос командой afuwinx64 mod.rom /GAN, где mod.rom — файл биоса с интегрированным модулем поддержки NVME, а /GAN — ключ для прошивки. Без данного ключа на этой плате биос прошиваться категорически отказывался.

После окончания прошивки выключаем ПК, вставляем наш SSD и проверяем, доступен ли он в списке загрузочных устройств биос.

Если бы наша тестовая плата поддерживала USB Flashback, то можно было бы просто модифицировать файл, скачанный с сайта, переименовать его в соответствии с требованиями USB Flashback (для этого можно воспользоваться утилитой BIOS Renamer for USB BIOS Flashback), закинуть файл на флешку и прошиться по инструкции к плате. Это считается самым удобным и правильным вариантом для плат Asus.

Мы рассмотрели два варианта добавления поддержки загрузки с NVME дисков: для Award (Legacy) BIOS и AMI UEFI. Постарались осветить нюансы и проблемы, с которыми встретились в процессе модификации. Но поскольку производителей много, и каждый может иметь свои специфичные особенности биоса, невозможно охватить все нюансы по данной теме.

Перепрошивка BIOS’а материнской платы под NVMe M.2 (ASUS)

  • Samsung-970-EVO-2.jpg
  • Samsung-970-EVO-2.jpg
  • 1.jpg
  • 2.jpg
  • 4.jpg
  • 2_M2.png
  • 2_SSD.png
  • Screenshot_1.jpg
  • Screenshot_2.jpg
  • Screenshot_3.jpg

Встала задача апгрейда пк сервера, из-за жалоб пользователей, что 1С тормозит, все плохо, все висит, работать невозможно (1С отраслевая). Покупка нового сервера выходила в кругленькую сумму (процессор, память, SSD улучшать было уже некуда, установлено максимальное поддерживаемое), решили попробовать диски SSD.M2, как бюджетное решение проблем нежели новый сервак, но в материнской плате нет разъема под M2, да и BIOS’ом он не поддерживается.

Постановка задачи.

Требуется прошивка BIOS’а материнской платы под диски NVMe M.2.

Характеристики ПК:

Материнская плата: Asus B85M-E

SSD: Intel 480Гб. (системный)

HDD: WD 1Тб (файловое хранилище)

ОС: Windows Server 2008R2

Доп.: 1С Предриятие 8.3 (конфигурация отраслевая) на SQL (размер БД ~15 Гб.) + RDP из 10 пользователей работающих с БД.

Подготовка к апгейду BIOS:

Был куплен SSD-накопитель Samsung 970 EVO NVMe M.2 (стоимость 7500 т.р.), его заявленые характеристики очень хорошие, в сравнение с установленным Intel‘ом он быстрее примерно в 6 раз.

т.к. материнская плата не имеет встроенного разъема под M2, был приобретен переходник Адаптер PCI-E M.2 NGFF for SSD Bulk (стоимость 600 р.), который позволит подключить SSD.M2 диск через разъем PCI-E.

Характеристики SSD-накопитель Samsung 970 EVO NVMe M.2:

Максимальная скорость последовательного чтения (Мбайт/с)

Максимальная скорость последовательной записи (Мбайт/с)

После того как все было собрано и установлено началось самое интересное. Естественно BIOS не увидел SSD.M2 как диск (хотя в системе он определися и работал как обычный дополнительный диск). Так же не мало важным было перенести систему без переустановки всего.

И тут начались танцы с бубном и гуглом.

Отказ от ответственности. Всю ответственность за действия, описанные в статье, вы берёте на себя, я не гарантирую, что после выполненных действий и модифицированных биосов ваш накопитель будет работать через PCI-E. Не несу ответственности за любой ущерб, который может быть нанесен вашей материнской плате в результате выполнения этих действий. Все описанные действия были сделаны на энтузиазме, мы знали на что шли.

ПО для обновление BIOS:

Для того чтобы материнская плата увидела диск NVMe M2, в BIOS’е должен быть драйвер для этих устройст (естественно в самой последней прошивке для это материнской платы его тоже нет).

Следовательно мы должны в последний BIOS для платы вшить драйвер для NVMe, чтобы он увидел диск при загрузке системы.

Приступаем. Скачиваем последнию версию BIOS с официального сайта ASUS (https://www.asus.com/Motherboards/B85ME/HelpDesk_BIOS/), на данный момент это Version 3602 2018/05/25 (думаю актуальней уже не будет).

Скачиваем драйвер NVMe: тут или

4. Последней записью DXE в списке должна быть надпись «Free space» (Свободное пространство).

5. Нажимаем правой кнопкой мыши последнюю запись драйвера DXE, указанную выше, и выберите «Insert after» (Вставить после). Выберите файл NvmExpressDxe_4.ffs, и нажмите «Open». В конце должна появиться новая запись.

6. Выбираем меню «File» — «Save image file» и сохраняем его как BIOS NVMe (любое имя чтобы вы понимали что это обновленный BIOS)

7. Если открыть модифицированный BIOS повторно и найти DXE, то мы увидем что появилась запись «NvmExpressDxe_4», это означает что все сделано верно.

Модифицированный BIOS готов к установке на материнскую плату.

Это оказалось самым простым шагом.

Прошивка материнской платы:

Дальше началось самое интересное как обмануть BIOS модифицированным файлом прошивки т.к. проверка (check file BIOS) не пропускает наш подготовленный файл прошивки и вываливается в ошибку. ASUS Flashback на данной материнской плате нет, поэтому начались поиски сторонних утилит для прошивок BIOS.

Также рекомендую сделать полный образ системы через Acronis, в любом случае при успешной прошивке, он нам понадобится.

Программное обеспечение ASUS AI Suite 3 и его утилита EZ Update напрочь отказалось работать корректно, пробовали разные версии, было много ошибок, сбоев и в итоге ничего не вышло.

Было перепробованно много всяких программ и утилит, все получилось с помощью утилиты AFUWIN 5.12 (или 4.48) (именно этой версии)

Afuwingui — простая утилита, позволяющая снять или прошить дамп биоса из под Windows.

Прошивка с помощью утилиты AFUWINGUI:

1. Запускаем AFUWINGUI.EXE от имени администратора и заходим во вкладку Setup, тут ставим галочку на Main BIOS Image

2. Нажимаем Open и выбираем оригинальный биос и нажимаем Flash.

3. После того как биос запищится в память, заходим в Setup и устанавливаем ещё одну галочку Do Not Check ROM ID.

4. Затем нажимаем Open и выбираем модифицированный файл биос и нажимаем Flash.

5. Ждём окончания загрузки и перезагружаемся.

После этого в BIOS появилось новое устройство для загрузки, что означало успех.

После этого восстанавливаем образ системы (сделанный ранее) на NVMe диск, загружаемся в систему проверяем на работоспособность.

Все проведенные тесты прошли успешно, все работает как часы, все пользователи просто в восторге, 1С стала очень быстро работать, потраченные 8 тыс. на SSD.M2 сэкономили пару сотен на покупку нового сервера.

Результаты теста чтения/записи можете увидеть ниже SSD.M2 (Samsung) и SSD (Intel), разница более чем в 10 раз.

Будьте аккуратны с модификациями и прошивками BIOS, можно все превратить в кусок ненужного железа.

Модификация BIOS для поддержки NVME через PCI

Старые но актуальные платы не поддерживают загрузку с NVME вставленного в PCI-E, это решается путем рискованной модификации BIOS.

  • Обновление прошивки BIOS
  • Модификация BIOS
    • Выгрузить ROM текущей прошивки BIOS
    • Вставка драйвера NVME в прошивку BIOS
    • Заливка модифицированной прошивки BIOS
    • Настройка

    Внезапно захотелось поставить на материнскую плату Supermicro X9DBL-I NMVE накопитель через переходник. Как хранилище данных, такая конфигурация работает без нареканий и все прекрасно гоняется из под OC, но как загрузочный диск с ОС не работает — BIOS не поддерживает такую функциональность. А мне хотелось попробовать установить на него ProxMox (но потом я передумал).

    Ниже перечисленное может полностью вывести материнскую плату из строя, вы делаете это на свой страх и риск!

    #Обновление прошивки BIOS

    Первое что можно попробовать это обновить BIOS. Затем установить ОС в режиме UEFI и таким же образом загружать диск (в BIOS ). Если речь идет о комбинированном переходнике PCI-E на M.2 то нужно настроить бифуркацию в BIOS (это когда один PCI-E слот может работать как 2 или 4 PCI-E слота).

    Про бифуркацию есть упоминания в этом обсуждении и здесь, а ниже скрин как это выглядит в BIOS моей платы по пути Advanced — Chipset Configaration — Integrated IO Configuration :

    На моей плате это не сработало — нет поддержки nvme из BIOS .

    #Модификация BIOS

    BIOS можно модифицировать и добавить в прошивку драйвер поддержки NVME .

    Из приведенных выше обсуждений есть ссылки на форум win-raid.com, который теперь доступен по новому адресу, интересующая нас тема здесь, а раздел форума про NMVE здесь.

    • afudos для выгрузки ROM BIOS и последующий его загрузки обратно, либо можно воспользоваться UEFITool (я взял afudos APTIO 5 )
    • MMTool для модификации BIOS (пронесся слух что это не бесплатно, но где и кому заплатить я не нашел, а вот ссылок на скачать в интернете достаточно, например вот и вот, я использовал MMTool v5 )
    • загрузочная флешка с DOS

    #Выгрузить ROM текущей прошивки BIOS

    Можно использовать свежую прошивку от производителя материнской платы, а можно выгрузить ROM BIOS . Для этого на загрузочную флешку с DOS заливаем afudos , на целевой плате загружаемся в DOS без установки и экспортируем ROM в файл:

    afudos bios.rom /o 

    #Вставка драйвера NVME в прошивку BIOS

    Теперь нужно через MMTool вставить драйвера для NVME . Скачать драйвера можно по ссылкам выше или отсюда несжатый и сжатый, на случай если несжатый не влезет в ROM .

    На самом деле прошивок существует несколько, по ходу написания статьи я познакомился с более зрелыми инструкциями, ссылки в конце статьи.

    • открываем MMTool , нажимаем Load Image и загружаем наш ROM
    • списке внизу находим и выделяем строку CSMCORE в строке Vol. index обязательно должны увидеть какие-то цифры
    • в табах нажимаем Insert — Browse и выбираем скачанный драйвер

    Затем нажимаем Save image и сохраняем модифицированный ROM . Для надежности еще раз загрузим этот же ROM и убедимся что теперь в списке есть строка с нашим драйвером NVME .

    #Заливка модифицированной прошивки BIOS

    Заливаем модифицированный ROM BIOS на загрузочную флешку с DOS , идем на целевую плату и выгружаем ROM :

    afudos bios.rom /o 

    Дожидаемся, затем отключаем питание кнопкой на корпусе и загружаем.

    #Настройка

    Теперь нужно настроить загрузку модуля, который мы встроили в BIOS , делается это через OpROM в интерфейсе BIOS в разделе Advanced — PCIe/PCI/PnP Configuration , для Launch Storage OpROM policy нужно включить UEFI only :

    #Результат

    Теперь можно загружать флешку в UEFI , устанавливать ОС на NVME накопитель и загружаться с него:

    В BIOS нужно выставить очередность загрузки:

    В меню Boot Override также можно загрузиться с этого диска:

    #Проблемы

    Конечно не обошлось без проблем, а в самом начале я писал что решил отказаться от этой затеи .

    Иногда, редко, но бывает при перезагрузке процесс висит на 92-ом POST коде несколько минут, а это код означает инициализацию PCI шины (дока по POST кодам). Странно, ну ладно, это происходит крайне редко.

    А затем я решил проверить, что будет, если воткнуть SATA диск, на котором уже установлена ОС из под UEFI и . теперь в BIOS нельзя выставить очередность загрузки с NVME , но при вызове Boot Menu можно загрузиться с этого диска.

    #Ссылки

    • Модификация UEFI BIOS. Софт для работы.
    • Модификация UEFI BIOS, часть вторая: полезные модификации
    • Включаем поддержку NVMe на старых материнках на примере Asus P9X79 WS
    • Добавление NVMe module в BIOS (6-8 Series)

    В телеграм канале DevOps от первого лица можно оставить комментарий или почитать интересные истории из практики DevOps

    Как добавить поддержку NVMe в UEFI?

    Фырки всем.
    Имею матплату B75M-D3H и PCIe SSD. Биос в NVMe не умеет и как загрузочный его использовать не может, и потому приходится городить костыли с загрузчиком на файлопомойке, а это фу, не хочу и надоело.
    Последний оригинальный биос на офсайте — 15F. По интернетам ходит архив неизвестного происхождения с 16D, и на нём NVMe опознаётся, но перестаёт корректно работать Nouveau и появляются артефакты в «текстовом» режиме. Наверняка ещё что-то сломано, особо не тестил.
    В интернетах есть много историй успеха с запаковкой в родной биос модуля из TianoCore через UEFITool, но повторить не удалось — софтина просто засеривает™ связанные с редактированием пункты меню при открытии моего дампа — не важно, скачанного с офсайта или сделанного через flashrom.
    ЧЯДНТ?

    izzholtik ★★★
    05.06.21 20:55:09 MSK

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *