Мы — долго запрягаем, быстро ездим, и сильно тормозим.
www.lissyara.su —> статьи —> Очумелые Ручки —> Компьютерные —> BIOS & PXE

Прошивка загрузчика 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|  

   Видим самое главное - свободное место равно 71.98K. Более чем достаточно - файл 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 ............

то всё прекрасно. Жмём указанную комбинацию клавиш, и выставляем в меню такие параметры (или свои - какие вам надо)
               Realtek RTL8139(A/B/C)/RTL8130 Boot Agent
                        Configuration Menu v.10

===============================================================

           Network Boot Protocol		PXE
           Boot Order				Int 19h
           Show Config Message			Enable
           Show Message Time			3 Seconds


           Always boot network first, then local devices

================================================================
        <Esc>	<Space>		<Enter>		<F4>
        Quit	Change Value	Next Option	Save/Quit


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

   Набор файликов, без коммандира Нортона, прилагаю. Разберётесь.
Набор софта для перешивки BIOS`a
файл скачан размер размещён примечание
for_bios_flash.zip
4414 1.91mb 2006-12-18 Набор софта для добавления в образ BIOS`a PXE загрузчика. Заодно и сам код загрузчика для сетевух RTL8139(A/B/C)/RTL8130.

Добавлено: 2006-12-21, по результатам перепрошивки 24-х компов:
1. Мне попались 4 материнки, производитель Gigabyte (все 4 - GA-6xxx, возможно сказанное относится и ко всем GA-xxxx), после модификации BIOS`a и заливки новой прошивки они не грузились, чёрный экран и красивое мелодичное попискивание. При этом, тычется к флопу и чё-то с него читает. Толи прошивку ищет, толи загрузиться пытается - надо у производителя выяснять. Прошил старый БИОС из бэкапа на другой машине, воткнул на место - завелись.
   Решение проблемы нашлось на 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).



размещено: 2006-12-18,
последнее обновление: 2011-04-21,
автор: lissyara


100kg, 2006-12-18 в 22:35:16

помоимо на этои сетевушке есть калодка для флэшки! какой тип флэшки можно вставить?

virus, 2006-12-19 в 9:03:12

аналог темы
http://teron.ru/index.php?showtopic=55071

toivo, 2006-12-19 в 15:22:54

Спасибо за статью.
Делал такое три года назад, но грузил thistation2. Сделать статью руки не дошли. Очень сильно помог сайт rom.by.
Была идея попытаться уговорить автора bios-patcher-a, что бы он вставил в BP возможность записывать этот загрузчик, но потом как то все накрылось.

Удачи.

IDDQDесник, 2007-01-25 в 3:22:57

свежие PXE модули для realtek 8139 и совместимых лежат тут

Kolhoman, 2007-04-17 в 11:54:15

Образ "rtsrom_m.lom" довольно большой. если места мало можно прошить "Etherboot" загрузчик.
Инструкция здесь (англ.)
Прошивки на www.rom-o-matic.net
Etherboot версии 5.4.3 весит 32 кБ
версии 5.2.2 всего 16 кБ
У себя прошивал 5.2.2 работает без проблем (14 компов, WTWare Lite)

lissyara, 2007-04-17 в 12:19:55

оно фряху не цепляет.
поэтому и отказался.
У них какая-то кривая реализация неполноценного PXE...

Gopher, 2007-06-21 в 13:11:48

Танци с бубном продолжалить некоторое вермя. Модифицировал пока только один биос. Окозалось, что для разных версий биоса подходят разные версии cbrom В моей ситуации подошла версия cbrom130. Прошивку в формате *.ZROM для compex rl2000 взял с http://rom-o-matic.net/5.4.2/. Переименовал файл в ххх.ROM.

Дмитрий, 2007-09-17 в 16:11:46

Однако свободного места должно быть не 51Кб как в тексе, а около 31Кб, потому что модуль будет сжат. Данная опечатка может некоторых заставить так изуродовать BIOS, что мама не горюй!

bender, 2007-11-13 в 13:31:15

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

Я уже запутался, у кого я это дернул, но для rtl8139 у меня два файла .nic. Один приблизительно как .lom, где-то 52кб, а второй то что нужно, 64кб. Говорят, что если память больше, например 128кб, то залить туда эту фигню два раза.

Но делать это не пришлось. Мало ли, мож кому пригодится.

Саня, 2008-03-26 в 15:02:20

1. Мне попались 4 материнки, производитель Gigabyte (все 4 - GA-6xxx, возможно сказанное относится и ко всем GA-xxxx), после модификации BIOS`a и заливки новой прошивки они не грузились, чёрный экран и красивое мелодичное попискивание. При этом, тычется к флопу и чё-то с него читает. Толи прошивку ищет, толи загрузиться пытается - надо у производителя выяснять. Прошил старый БИОС из бэкапа на другой машине, воткнул на место - завелись.

Компьютер пытается загрузится с дисковода. Было такое на другой материнке (A-Trend ATC-6130 вроде) после прошивки некоректной версии BIOS. Машину удалсь поднять загрузочной дискетой, в autoexec.bat прописал параметры для прошивки "родной" версией.

netmor, 2009-11-24 в 16:58:58

Я прошивал микросхеммы для BOOTROMов непосредственно в  сетевую карту, у нас продавали карты с панельками на 32 корпус DIP, размер файла 64 кБ для Реалтека, брал на их ФТПшнике, а микросхемы нашел много 27С512 (с УФ странием), программатор от Микроарта, уже старый V1.2 еще пробовал разные флэш чипы от мам битых и по 64 кБ и больше, так же соединял в параллель микросхемы меньшего объема по 32 кБ, при этом не забываем их включать постранично с учетом активации старших адресов (как банки памяти) всегда можно обойтись условиями активации кристалла на чтение без дополнительного обвеса мелкой логики, данные - какие ножки м\с на старший адрес паять, берем из даташитов на конкретный кристалл - там диограммы сигналов CS, PE, A0-An и так далее, даже бутерброд из 8 микросхем по 8 килобайт один раз пришлось делать, просто других небыло. В БИОСе не забыть галочку на загрузку из сети поставить.

Dominator, 2010-12-01 в 17:32:01

У меня Uniflash шить отказался, пришлось юзать awdflash

James, 2012-10-22 в 15:20:36

по поводу "битые блоки были в конце флэшки", - не забываем, что в PLCC32 корпусах штатно (помощи логических уровней на соответстующих ногах) можно защитить концовку адресного пространства от записи, обычно 16 или 64кб, туда производитель материнки обычно и ныкает загрузчик. При записи AWDFLASH помечает защищённые блоки зелёным цветом. Т.о. если ваш образ «распух» и залез в защищённую область, то в материнке он просто не будет дописан до конца, выход – программатор, либо хотсвапом на матерях, где производитель не заморачивался с защитой, при этом прежде чем перетыкать микросхемы по матерям, убедитесь, что они на одинаковое рабочее напряжение, т.к. есть как минимум 3.3В и 5В варианты, которые отличаются не только напряжением питания.

serjiok, 2017-01-14 в 11:50:58

Спасибо за статью. Перепрошил биос на fawer dn-300-64
GXm-Cx5530-2A434I99C-00 DATE 03/04/2002
Digatron промышленный компьютер.
Внутри был неработающий сетевой загрузчик.
В биос загрузил сетевой модуль из этой статьи.
Теперь все работает.



 

  Этот информационный блок появился по той простой причине, что многие считают нормальным, брать чужую информацию не уведомляя автора (что не так страшно), и не оставляя линк на оригинал и автора — что более существенно. Я не против распространения информации — только за. Только условие простое — извольте подписывать автора, и оставлять линк на оригинальную страницу в виде прямой, активной, нескриптовой, незакрытой от индексирования, и не запрещенной для следования роботов ссылки.
  Если соизволите поставить автора в известность — то вообще почёт вам и уважение.

© lissyara 2006-10-24 08:47 MSK

Время генерации страницы 0.0532 секунд
Из них PHP: 34%; SQL: 66%; Число SQL-запросов: 66 шт.
Исходный размер: 52929; Сжатая: 14173