|
|
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
|
файл
|
скачан
|
размер
|
размещён
|
примечание
|
|
|
4418
|
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
|
|
|
|
|
Комментарии пользователей [14 шт.]