PXE загрузчик в BIOS Печать
Автор: Administrator   
26.11.09 13:28


Прошивка загрузчика PXE для сетевых плат RTL8139 в БИОС материнской платы

Автор: lissyara.


Эта статья - в некотором роде продолжение другой, про бездисковую загрузку FreeBSD. Там всё хорошо, но вот имелись две проблемы, решение обеих - тут. Первая, заключалась в том, что большинство машин грузилось с дискет. К тому же, с дискет грузилось очень много инфы - ядро, даже очень урезенное и сжатое, довольно большое. Как итог, через две недели древние дискеты стали сыпаться - новых не было ни дискет, ни флопповодов. Вторая - до этого стоял линуксовый тонкий клиент - он не выводил загрузочные сообщения, а показывал графическую заставку. Когда первый раз грузилась фря - народ достал звонками, якобы у них у всех резко поломались компы, или мониторы - мол вначале буквы были белые, потом красные, а щас вообще зелёные :))) (У меня цвет букв разный для сообщений ядра и консоли). Собсно, хотелось прикрутить заставку, но - на дискеты её всем не положишь - места мало.
В итоге, я вернулся к изысканиям о возможности как-то прикрутить PXE куда угодно - на дискету или в сетевуху. Микросхемы были - от старых первых пней, довольно много - штук 20 - но шится не хотели... Толи все сетевухи были совсем кривые, толи программатор, толи мои руки (больше всего грешу на последнее - но раньше-то у меня получалось, правда давно, лет 6 назад, в 2000 году...). В процессе изысканий, на каком-то форуме, нашёл интересное высказывание - типа в VIA`вском БИОСе, для одинаковых мам - с разницей лишь в наличии/отсутсвии микросхемы сетевухи, отличие лишь одно - при наличии микросхемы, в образе BIOS`a есть файл *.lom. Из этого было ясно - БИОС можно разобрать и собрать заново, зашив в него нужный файлик - а такие у меня были (тупым поиском по своей коллекции драйверов я нашёл такие для родных сетевух VIA и для RTL8139/RTL8130). Вариант меня вполне устраивал - почти на 80% самосборных тонких клентов стояли именно такие, да в запасе их было штук 6. Дальнейшие поиски шли по другому пути - надо было найти программу для работы с БИОС - тоже нашлась - называется cbrom. Ограничение есть и у неё - она работает лишь с AWARD`овскими прошивками. Это тоже устраивало - их было большинство.
Дальнейшие эксперименты показали - выпадают практически все первые пни - у них слишком маленькая микросхема - 128k, и свободного места нехватает для того, чтобы впихнуть файл загрузки по PXE. (Надо заметить, что cbrom позволяет не только добавлять, но и удалять отдельные файлы из BIOS - но это не спасает, места всё равно выкроить не удалось.) Зато начиная со вторых пней всё прекрасно - на всех попавшихся машинах не надо было ничего выкидывать - свободное место и так было. Надо было просто добавить.
Для удобства работы был подобран мелкий винт на 4 гига (мельче не было), отформатрован в FAT, на него были скинуты системные файлы, Norton Commander (для удобства - DOS я уже изрядно подзабыл), uniflash, cbrom215, rset8139, написны autoexec.bat и config.sys.
Поехали. Грузимся с харда и создаём директорию (по модели материнки, например) для экспериментов:

C:\TEST>mkdir AB-BH6
C:\TEST>cd ab-bh6
C:\TEST\AB-BH6>


Лирическое отступление - вообще, рекомендую делать бэкап BIOS, и по возможности (когда микруха на матери съёмная и есть другая флэшка такого же или большего размера), загрузившись и сделав копию БИОСа, наживую выдернуть старую и воткнуть новую. Для удобства выдёргивания-втыкания, микросхемы выдёргивается на выключенной маме, обматывается толстыми нитками, или проволочками (в изоляции!), из них же делается ручка, чтоб удобней дёргать, затем втыкаются. Очень удобно - за проволочки вытащил, вставил другую, также обмотанную. После чего в неё зашивается тока что сделанная копия, проверяете, перезагрузившись, и если всё пучком - с ней и работайте, отложив родную микруху в сторонку - малоли, загубите (мне, правда, ни одной не удалось загубить, - но я это делаю не первый раз...).
Делаем копию оригинального BIOS:


C:\TEST\AB-BH6>uniflash -SAVE backup.bin -QUIT


Второе лирическое отступление - несколько раз столкнулся с битыми микрухами - не шьются, или шьются но проверку не проходят. С такими лучше не работать, для проверки, зашиваем обратно родной БИОС и смотрим - как оно прошло (Это, если не перетыкаете микросхемы. Если пеертыкаете - подберите нормальную). Если хорошо - то хорошо, если плохо - возможны варианты - чаще всего - просто плохой контакт - надо выдернуть и воткнуть микросхему на место. Другой вариант - мне попался второй пень с 512k флэшкой - и забита почти под завязку. Другой такой у меня не было, дёрганье туда-сюда не помогло. Подумавши - сообразил - битые блоки были в конце флэшки, туда и шился файл загрузчика. Надо его зашить ближе к началу - и всё будет пучком. Для этого - выкинул пару файликов, которые показались ненужными (вот тут и нужны бэкапы и соображаловка - пояснений оччень мало...) - по названию были опознаны звук, логотипы, и ещё какая-то мелочёвка (разумеется, не надо выкидывать вещщи со строчкой vga в названии, если на маме встроенное видео - и т.п.). После чего был добавлен загрузчик и всё с криками флэшера о непрохождении проверки зашито на место. Работает. Тока звука больше никогда не будет :)))
Продолжим. Делаем ещё одну копию, с которой и будем работать - оригинал нехай лежит - на всякий случай:

C:\TEST\AB-BH6>copy backup.bin 1.bin


Смотрим, что у нас там имеется:


C:\TEST\AB-BH6>cbrom215 1.bin /d


Выводится такой листинг:

CBROM V2.15 (C)Award Software 2001 All Rights Reserved.
              ********        1.bin BIOS component ********
 No. Item-Name         Original-Size   Compressed-Size Original-File-Name
================================================================================
  0. System BIOS       20000h(128.00K)148C0h(82.19K)original.tmp
  1. XGROUP CODE       084D0h(33.20K)058F0h(22.23K)awardext.rom
  2. CPU micro code    0A000h(40.00K)05D03h(23.25K)CPUCODE.BIN
  3. ACPI table        01F41h(7.81K)00CA0h(3.16K)ACPITBL.BIN
  4. EPA LOGO          00642h(1.56K)002A1h(0.66K)AWARDEPA.BIN
  5. YGROUP ROM        02660h(9.59K)01ADDh(6.72K)awardeyt.rom

  Total compress code space  = 348C0h(210.19K)
  Total compressed code size = 228D1h(138.20K)
  Remain compress code space = 11FEFh(71.98K)
                          ** Micro Code Information **
Update ID  CPUID  |  Update ID  CPUID  |  Update ID  CPUID  |  Update ID  CPUID
------------------+--------------------+--------------------+-------------------
PPGA   11   0681|  PPGA   10   0683|  PPGA   08   0686|  PPGA   03   0665
SLOT1  13   0630|  SLOT1  20   0632|  SLOT1  34   0633|  SLOT1  35   0634
SLOT1  40   0651|  SLOT1  2A   0652|  SLOT1  10   0653|  SLOT1  0A   0660
SLOT1  03   0671|  SLOT1  10   0672|  SLOT1  0E   0673|  SLOT1  14   0680
SLOT1  0D   0681|  SLOT1  0C   0683|  SLOT1  07 0686|

 

файл RTSROM_M.LOM весит чуть больше 53k. Значит сразу его и пихаем:

C:\TEST\AB-BH6>cbrom215 1.bin /pci c:\bios\rtsrom_m.lom
CBROM V2.15 (C)Award Software 2001 All Rights Reserved.
Adding c:\bios\rtsrom_m.lom  60.2%
C:\TEST\AB-BH6>

 

Проверяем, чё у нас получилось в итоге:

 

CBROM V2.15 (C)Award Software 2001 All Rights Reserved.

              ********        1.bin BIOS component ********

 No. Item-Name         Original-Size   Compressed-Size Original-File-Name
================================================================================
  0. System BIOS       20000h(128.00K)148C0h(82.19K)original.tmp
  1. XGROUP CODE       084D0h(33.20K)058F0h(22.23K)awardext.rom
  2. CPU micro code    0A000h(40.00K)05D03h(23.25K)CPUCODE.BIN
  3. ACPI table        01F41h(7.81K)00CA0h(3.16K)ACPITBL.BIN
  4. EPA LOGO          00642h(1.56K)002A1h(0.66K)AWARDEPA.BIN
  5. YGROUP ROM        02660h(9.59K)01ADDh(6.72K)awardeyt.rom
  6. PCI ROM[A]        0D000h(52.00K)07D7Fh(31.37K)c:\bios\rtsrom_m.lom

  Total compress code space  = 348C0h(210.19K)
  Total compressed code size = 2A650h(169.58K)
  Remain compress code space = 0A270h(40.61K)

                          ** Micro Code Information **
Update ID  CPUID  |  Update ID  CPUID  |  Update ID  CPUID  |  Update ID  CPUID
------------------+--------------------+--------------------+-------------------
PPGA   11   0681|  PPGA   10   0683|  PPGA   08   0686|  PPGA   03   0665
SLOT1  13   0630|  SLOT1  20   0632|  SLOT1  34   0633|  SLOT1  35   0634
SLOT1  40   0651|  SLOT1  2A   0652|  SLOT1  10   0653|  SLOT1  0A   0660
SLOT1  03   0671|  SLOT1  10   0672|  SLOT1  0E   0673|  SLOT1  14   0680
SLOT1  0D   0681|  SLOT1  0C   0683|  SLOT1  07 0686|

 

Файлик добавился. Зашиваем БИОС обратно в микросхему:


C:\TEST\AB-BH6>uniflash -e 1.bin

 

После чего - перезаргружаемся (подразумевается, что сетевуху уже вставили, или сейчас втыкайте). Если сразу после детектирвоания хардов вылазиет окошко:


Realtek RTL8139(A/B/C)/RTL8130 Boot Agent
Press SHIFT-F10 to configure ............

 

то всё прекрасно. Жмём указанную комбинацию клавиш, и выставляем в меню такие

параметры (или свои - какие вам надо)



в пункте Boot Order выставляем INT19h после чего жмём F4. Теперь будет грузиться в первую очередь с сети - что мне и требовалось.
Если окошка нет - грузимся с харда и запускаем rset8139. Нужен пункт "Set Up New Configuration" в котором нас интересует пункт "Boot ROM Size" (неясно почему, но на отдельных, видимо - особо тупых мамах, при отключенном Boot ROM`e они не хотели грузиться с стеевухи, даже не выводили сообщение про SHIFT-F10 - лечится установкой что он включен... Хотя его нет :))) Выходим, спрашивают про обновление настроек - соглашаемся, и перезагружаемся. Должно вылезти то самое SHIFT-F10.

Набор файликов, без коммандира Нортона, прилагаю. Разберётесь.


0 ЗАГРУЗИТЬ


Добавлено: 2006-12-21, по результатам перепрошивки 24-х компов:
1. Мне попались 4 материнки, производитель Gigabyte (все 4 - GA-6xxx, возможно сказанное относится и ко всем GA-xxxx), после модификации BIOS`a и заливки новой прошивки они не грузились, чёрный экран и красивое мелодичное попискивание. При этом, тычется к флопу и чё-то с него читает. Толи прошивку ищет, толи загрузиться пытается - надо у производителя выяснять. Прошил старый БИОС из бэкапа на другой машине, воткнул на место - завелись.
Решение проблемы нашлось на http://www.rom.by/ - оказалось, что cbrom215 не всегда корректно модифицирует прошивку. Рекомендовалось использовать cbrom207 или 2.05. Удалось найти v2.07 - с ней нормально модифицировалось и залитый на место БИОС грузился. Соответственно - бэкап рулит и в листингах вместо cbrom215 используйте cbrom207. В прилагаемом архиве он есть.
2. AMI (American Megatrends Inc.). Для этого БИОС`а требуется программа amibcp (в архиве тоже есть). Правда, на единственной имеющейся машине с таким BIOS, несмотря на удачную интерграцию дополнительного файла, он всё равно не хотел грузиться с сети. Почему - не знаю, может быть кривые руки виноваты.
3. PHOENIX. Несмотря на похожесть с AWARD, слитую прошивку модифицировать не удалось, cbrom показывал, что занято 128 мегов места - размер оперативки... Соответственно, ничё добавить не удалось...
4. Нашлись два первых пня, в которых путём удаления всего чё можно и нельзя удалось вопхнуть загрузчик в 128k. Оба не захотели грузиться с сети :))) Причина - тоже не ясна. Может не умеет у них BIOS управление передавать чему-то другому...
5. На одной машине с AWARD`овским BIOS было такое же поведение как и у феникса. Такчто, возможно, причина в другом. Надо попробовать скачать новые прошивки с сайтов производителей, и зашить уже их....
6. Будте внимательны. Убил полдня на пляски - почему оно не хочет, пока не заметил в самом низу BIOS`a опцию "Boot From Network First" - когда она была установлена в "NO", не выводилось даже окна по SHIFT-F10.

Добавлено: 2006-12-22:
Что касается предыдущего примечания, в части 3 и 5 пунктов. Просто эти BIOS`ы не понимал использовавшийся uniflash. Они были на 256k, он же делал бэкап лишь первых 128. Соответственно с AWARD`ом проблема решилась последней версией unflash, а вот с фениксом так и висит - там родная интеловая мама, обновление BIOS идёт не единым файлом, а какими-то кусочками, соответственно подправить и залить прошивку не могу - ни одна из использованных программ так и не поняла его. Родная утилита делать дамп не умеет :((
Также замечено, что некоторые Gigabyte`вские мамы нехотят грузиться с сети (навскидку GA-6MMC7 BIOS rev F5). Обновление до последней версии BIOS (F8) помогло (естесственно, обновлённый тоже надо рихтовать - добавлять *.lom).


оригинал http://www.lissyara.su/articles/mad_hands/computers/bios+pxe/#comment_7483


{jcomments on}

 

Последнее обновление 27.11.09 08:28