Замена Nvidia Boot agent модуля в Bios’е материнской платы

в 5:48, , рубрики: ipxe, nvidia boot agent, wim

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

В моём обслуживании около 300 компьютеров, из них около 70 процентов компьютеров находятся в учебных лабораториях. Достаточно часто встаёт вопрос быстрой диагностики системного блока, например запуск системных утилит для проверки оперативной памяти и жёсткого диска, восстановление работоспособности операционной системы и т.д.

На первых порах я использовал несколько загрузочных флешек для загрузки необходимых утилит. Но оказалось, что некоторые bios'ы в материнских платах настолько старые, что не подерживают загрузку с USB или скорость передачи ограничена USB 1.0. Плюс суммарный размер образов для восстановления у нас превышает 100 Гб, поэтому проходилось таскать кучу разных флешек.

Параллельно были попытки попробовать загружать все это добро из сети. Остановился на использовании lan boot rom сетевой карты на клиентской стороне и tftp сервере с pxelinux утилитой на серверной стороне соответственно. Утилиты memtest, mhdd, всякие линуксы, acronis практически без проблем загружались по сети, лишь бы памяти на компьютере хватило.

Можно даже загружать winpe(bartpe), предварительно интегрируя в образ специальный драйвер.
Была предпринята попытка переноса автоматической системы установки ОС в сеть. Работает она так — специалист загружает с флешки специальную winpe сборку на основе win7, после загрузки происходит инициализация сети и скрипт загружает из сети список возможных образов для востановления. Специалисту остается выбрать нужный образ и дождатся его распаковки.

WinPE 3 (на нем основана система востановления) распространяется microsoft как wim образ. Это файл-ориентированный архив и в отличии от iso образов его не так просто загрузить через сеть. Существует проект iPXE, который ставит целью open source реализацию протокола PXE. На одной из страниц было найдено решение. Для PXELINUX загрузчика оно выглядит примерно так:

DEFAULT vesamenu.c32
PROMPT 0
FONT /pxelinux.cfg/fonts/cyr_a8x16.psf
INCLUDE /pxelinux.cfg/menu_color.conf


MENU TITLE Автоматическая установка

LABEL winpxe86drivers
	MENU LABEL Windows 7 x86 (with drivers)
	COM32 linux.c32 /wimboot
	APPEND wimboot initrdfile=/install/7x86d/boot/bootmgr,/install/7x86d/boot/bcd,/install/7x86d/boot/fonts/chs_boot.ttf,/install/7x86d/boot/fonts/cht_boot.ttf,/install/7x86d/boot/fonts/jpn_boot.ttf,/install/7x86d/boot/fonts/kor_boot.ttf,/install/7x86d/boot/fonts/wgl4_boot.ttf,/install/7x86d/boot/boot.sdi,/install/7x86d/boot.wim

LABEL winpxe86
	MENU LABEL Windows 7 x86
	COM32 linux.c32 /wimboot
	APPEND wimboot initrdfile=/install/7x86/boot/bootmgr,/install/7x86/boot/bcd,/install/7x86/boot/fonts/chs_boot.ttf,/install/7x86/boot/fonts/cht_boot.ttf,/install/7x86/boot/fonts/jpn_boot.ttf,/install/7x86/boot/fonts/kor_boot.ttf,/install/7x86/boot/fonts/wgl4_boot.ttf,/install/7x86/boot/boot.sdi,/install/7x86/boot.wim
	

MENU SEPARATOR
	
LABEL back
	MENU LABEL Назад
	KERNEL /vesamenu.c32
	APPEND /pxelinux.cfg/maintenance.conf

Решение работоспособно и было проверенной на множестве аппаратных конфигурациях. Ошибки возникали, если на машине было меньше 512 МБ памяти или в загрузочном wim-образе отсутствовали необходимые драйвера для запуска сети.

И тут я наткнулся на одну странность. В одной учебной аудитории данный метод загрузки не работал, а именно — сетевая карта не инициализировалась (линк был, но передача данных была не возможна). Опытным путем было установлено, что драйвера тут не причем. Тот же образ WinPE, загружаемый с флешки, исправно работал. Подозрение пало на Nvidia Boot Agent. После непродолжительного поиска информации в интернете было обнаружено несколько упоминаний о забагованном Nvidia Boot Agent модуле. Баг заключался в том, что модуль не отключался после загрузки данных через сеть и мешал ОС инициализировать сетевую карту. При этом загрузка с помощью ipxe образа проходила успешно.

Встал вопрос — возможно ли заменить Nvidia Boot Agent на iPXE модуль. После непродолжительных экспериментов было найдено решение.

Внимание: Будьте внимательны — вы используете все приведенные компоненты на свой страх и риск, никаких гарантий я не даю, и никакой ответственности за последствия использования не несу!

Итак
Материнская плата: ASUS M2NPV-VM
Версия BIOS: 1401
Необходимые утилиты: CBROM32 v198

1. Скачиваем предпоследний bios 1401 с сайта asus. К сожалению последний bios нам не подходит по простой причине — не хватит место для включения iPXE модуля.
2. Скачиваем CBROM32 v198
3. Смотрим, что у нас находится в bios`е:

C:1>CBROM.EXE 1401.BIN /D
CBROM.EXE V1.98 [08/27/08] (C)Phoenix Technologies 2001-2008

              ********     1401.BIN BIOS component ********

 No. Item-Name         Original-Size   Compressed-Size Original-File-Name
================================================================================
  0. System BIOS       20000h(128.00K)  14AB9h(82.68K)  1.BIN
  1. XGROUP CODE       0E7A0h(57.91K)   09FD7h(39.96K)  awardext.rom
  2. CPU micro code    02000h(8.00K)    003EFh(0.98K)   CPUCODE.BIN
  3. ACPI table        0706Eh(28.11K)   02B92h(10.89K)  ACPITBL.BIN
  4. EPA LOGO          0168Ch(5.64K)    002AAh(0.67K)   AwardBmp.bmp
  5. YGROUP ROM        0C370h(48.86K)   05325h(20.79K)  awardeyt.rom
  6. GROUP ROM[ 0]     07BA0h(30.91K)   030C3h(12.19K)  _EN_CODE.BIN
  7. BIOSF0              01F60h(7.84K)  01561h(5.34K)   _DMI.BIN
  8. BIOSF9             0F550h(61.33K)  00797h(1.90K)   _RT.BIN
  9. BIOSF7             007A0h(1.91K)   005F5h(1.49K)   _Xsetup.BIN
 10. OEM0 CODE         0D9F0h(54.48K)   00698h(1.65K)   BGROUP.BIN
 11. PCI ROM[A]        0C000h(48.00K)   0703Ch(28.06K)  NVRAID.ROM
 12. PCI ROM[B]        0E000h(56.00K)   07271h(28.61K)  NVPXES.NIC
 13. VGA ROM[1]        0F000h(60.00K)   0A9FEh(42.50K)  C51PV0.ROM
 14. LOGO BitMap       4B30Ch(300.76K)  092ECh(36.73K)  M2NPV-VM.BMP
 15. OEM1 CODE         00BAFh(2.92K)    006D3h(1.71K)   PMU.BIN
 16. GV3                0414Eh(16.33K)  0113Eh(4.31K)   AGESACPU.ROM
 17. BIOSF6             0E20Ch(56.51K)  0790Dh(30.26K)  EZFLASH.EXE

(BB) Compress BT-VGA   05E00h(23.50K)   04266h(16.85K)  C51PV0BB.ROM
  Total compress code space  = 65000h(404.00K)
  Total compressed code size = 57ADDh(350.72K)
  Remain compress code space = 0D523h(53.28K)

 *** NVMM 4.062.1906/19/06 <¦ * Start Offset => 0, End Offset => 1b00 ***

                          ** Micro Code Information **
    Bridge ID                          |     Bridge ID
 North    South     Patch  ID  CPUID   |  North    South     Patch  ID  CPUID
---------------------------------------+----------------------------------------
    0062   00000414                     |     0068   0000040A|     006D   000004
1B
    0083   0000068|

Под 12 номером находится модуль NVPXES.NIC, именно его мы будем заменять.
4. Пора зайти на сайт, выбрать «Advanced, for experienced users», далее «ROM binary (flashable) image (.rom)» и указать DEV и VEN характеристики вашей сетевой карты (VEN 10DE DEV 0269 для нашего случая), и наконец, нажать Proceed.
5. Переименуем скачанный модули iPXE в NVPXES.NIC для корректного определения утилитой CBROM. Произведем замену модуля в bios`е (не обращаем внимания на проценты):

C:1>CBROM.EXE 1401.BIN /PCI NVPXES.NIC
CBROM.EXE V1.98 [08/27/08] (C)Phoenix Technologies 2001-2008
Adding NVPXES.NIC ........ 98.5%

6. Проверим внесенные изменения:

C:1>CBROM.EXE 1401.BIN /D
CBROM.EXE V1.98 [08/27/08] (C)Phoenix Technologies 2001-2008

              ********     1401.BIN BIOS component ********

 No. Item-Name         Original-Size   Compressed-Size Original-File-Name
================================================================================
  0. System BIOS       20000h(128.00K)  14AB9h(82.68K)  1.BIN
  1. XGROUP CODE       0E7A0h(57.91K)   09FD7h(39.96K)  awardext.rom
  2. CPU micro code    02000h(8.00K)    003EFh(0.98K)   CPUCODE.BIN
  3. ACPI table        0706Eh(28.11K)   02B92h(10.89K)  ACPITBL.BIN
  4. EPA LOGO          0168Ch(5.64K)    002AAh(0.67K)   AwardBmp.bmp
  5. YGROUP ROM        0C370h(48.86K)   05325h(20.79K)  awardeyt.rom
  6. GROUP ROM[ 0]     07BA0h(30.91K)   030C3h(12.19K)  _EN_CODE.BIN
  7. BIOSF0              01F60h(7.84K)  01561h(5.34K)   _DMI.BIN
  8. BIOSF9             0F550h(61.33K)  00797h(1.90K)   _RT.BIN
  9. BIOSF7             007A0h(1.91K)   005F5h(1.49K)   _Xsetup.BIN
 10. OEM0 CODE         0D9F0h(54.48K)   00698h(1.65K)   BGROUP.BIN
 11. PCI ROM[A]        0C000h(48.00K)   0703Ch(28.06K)  NVRAID.ROM
 12. VGA ROM[1]        0F000h(60.00K)   0A9FEh(42.50K)  C51PV0.ROM
 13. LOGO BitMap       4B30Ch(300.76K)  092ECh(36.73K)  M2NPV-VM.BMP
 14. OEM1 CODE         00BAFh(2.92K)    006D3h(1.71K)   PMU.BIN
 15. GV3                0414Eh(16.33K)  0113Eh(4.31K)   AGESACPU.ROM
 16. BIOSF6             0E20Ch(56.51K)  0790Dh(30.26K)  EZFLASH.EXE
 17. PCI ROM[B]        11E00h(71.50K)   119D5h(70.46K)  NVPXES.NIC

(BB) Compress BT-VGA   05E00h(23.50K)   04266h(16.85K)  C51PV0BB.ROM
  Total compress code space  = 65000h(404.00K)
  Total compressed code size = 62241h(392.56K)
  Remain compress code space = 02DBFh(11.44K)

 *** NVMM 4.062.1906/19/06 <¦ * Start Offset => 0, End Offset => 1b00 ***

                          ** Micro Code Information **
    Bridge ID                          |     Bridge ID
 North    South     Patch  ID  CPUID   |  North    South     Patch  ID  CPUID
---------------------------------------+----------------------------------------
    0062   00000414                     |     0068   0000040A|     006D   000004
1B
    0083   0000068|

12 модуль был удален, на его место установлен 17.

7. Копируем измененный bios на флешку, втыкаем в компьютер, заходим в bios и прошиваем новый bios с помощью встроенной утилиты Asus EZ Flash.
8. Радуемся безглючной загрузкой по сети!

В качестве бонуса — цветное pxe меню аля BIOS.

PXE menu color

menu color screen		0      #00000000 #00000000 none
menu color border		0      #ffFFFFFF #00000000 none
menu color title		0      #ffFFFFFF #00000000 none
menu color unsel		0      #ffFFFF55 #00000000 none
menu color hotkey		0      #ffFFFFFF #00000000 none
menu color sel			0      #ffFFFFFF #ffAA0000 none
menu color hotsel		0      #ff0000AD #00000000 none
menu color disabled		0      #ff505655 #00000000 none
menu color scrollbar	0      #ffA8A8A8 #00000000 none
menu color tabmsg		0      #ffFFFFFF #00000000 none
menu color cmdmark		0      #ffFFFFFF #00000000 none
menu color cmdline		0      #ffFFFFFF #00000000 none
menu color pwdborder	0      #ffFFFFFF #ffAA0000 none
menu color pwdheader	0      #ffFFFFFF #ffAA0000 none
menu color pwdentry		0      #ffFFFFFF #ffAA0000 none
menu color timeout_msg	0      #ffFFFFFF #00000000 none
menu color timeout		0      #ffFFFFFF #00000000 none
menu color help			0      #ffFFFFFF #00000000 none
menu color msg07		0      #ffFFFFFF #00000000 none
menu background 			   #0000AA

Замена Nvidia Boot agent модуля в Biosе материнской платы
Замена Nvidia Boot agent модуля в Biosе материнской платы

Автор: zer0nka

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js