[Из песочницы] Замена Nvidia Boot agent модуля в Bios'е материнской платы
Позвольте представиться, меня зовут Белов Александр, работаю в московском государственном колледже информационных технологий в должности системного администратора.В моём обслуживании около 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_a8×16.psf INCLUDE /pxelinux.cfg/menu_color.conf
MENU TITLE Автоматическая установка
LABEL winpxe86drivers MENU LABEL Windows 7×86 (with drivers) COM32 linux.c32 /wimboot APPEND wimboot initrdfile=/install/7×86d/boot/bootmgr,/install/7×86d/boot/bcd,/install/7×86d/boot/fonts/chs_boot.ttf,/install/7×86d/boot/fonts/cht_boot.ttf,/install/7×86d/boot/fonts/jpn_boot.ttf,/install/7×86d/boot/fonts/kor_boot.ttf,/install/7×86d/boot/fonts/wgl4_boot.ttf,/install/7×86d/boot/boot.sdi,/install/7×86d/boot.wim
LABEL winpxe86 MENU LABEL Windows 7×86 COM32 linux.c32 /wimboot APPEND wimboot initrdfile=/install/7×86/boot/bootmgr,/install/7×86/boot/bcd,/install/7×86/boot/fonts/chs_boot.ttf,/install/7×86/boot/fonts/cht_boot.ttf,/install/7×86/boot/fonts/jpn_boot.ttf,/install/7×86/boot/fonts/kor_boot.ttf,/install/7×86/boot/fonts/wgl4_boot.ttf,/install/7×86/boot/boot.sdi,/install/7×86/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 v1983. Смотрим, что у нас находится в bios`е:
C:\1>CBROM.EXE 1401.BIN /D CBROM.EXE V1.98 [08/27/08] ©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] ©Phoenix Technologies 2001–2008 Adding NVPXES.NIC … 98.5% 6. Проверим внесенные изменения: C:\1>CBROM.EXE 1401.BIN /D CBROM.EXE V1.98 [08/27/08] ©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