BIOS

легенды и мифы прошивки BIOS

крис касперски ака мыщъх

пожалуй, ни один из компонентов ПК не окружен таким количеством слухов и домыслов, как BIOS. между тем, приписываемое ему мистическое влияние на производительность и стабильность системы сильно преувеличено и гоняться за новыми прошивками, право же, не стоит. эта статья рассказывает когда и как следует обновлять BIOS и какую выгоду из этого можно извлечь…

BIOS (BasicInput/OutputSystem – Базовая Система Ввода/Вывода) – это довольно сложный аппаратно-программный комплекс по обслуживанию компонентов материнской платы и основных периферийных устройств (как-то: жесткие диски, CD/DVD приводы, модемы и т. д.). Архитектурно BIOS представляет собой микросхему памяти, подключенную к южному мосту чипсета (см. рис 3) и хранящую все микропрограммы и некоторые конфигурационные настройки. Другая часть настроек содержится в микросхеме CMOS, питаемой аккумулятором.

Микропрограммы хранятся в упакованном виде (у Award это последовательность LHA-архивов, разделенных контрольными суммами). В конце идет неупакованный BOOTBLOCK, получающий управление при старте системы и автоматически распаковывающий основной код BIOS в оперативную память. Это усложняет дизассемблирование прошивок, и любителям похакерствовать приходится много работать руками, а еще больше – головой. Впрочем, мы отвлеклись. Вернемся к нашим баранам.

Можно выделить следующие типы микропрограмм (названия условны и могут не соответствовать данным):

  1. BOOTBLOCK – загрузчик BIOS'а, ответственный за первичную инициализацию чипсета и распаковку основной части BIOS'а в память, также проверяющий ее контрольную сумму и запускающий программу аварийного восстановления или переходящий на резервный BIOS (подробнее см. «BIOS которые могут постоять за себя»);
  2. BIOS.ROM – основной код BIOS'а, осуществляющий инициализацию и тестирование оборудования (идентификация модели процесса и его настройка, считывание типа/количества DIMM'ов и конфигурирование контроллера памяти, инициализация всех прочих системных устройства – контроллера прерываний, DMA и т.д., он же сканирует память в поиске сигнатур всех остальных BIOS'ов, как то – BIOS'а видео-карты, BIOS'ов SCSI-устройств, и осуществляет их инициализацию). Определяет загрузочный привод и считывает с него загрузочный сектор. Содержит в себе драйвера нижнего уровня, обеспечивающие взаимодействие с основными устройствами ввода/вывода, и программу интерактивной конфигурации более известную в народе под именем BIOS Setup;
  3. xxxEXT.ROM – различные расширения основной части BIOS'а, в частности выводящие таблички с конфигурацией оборудования или показания датчиков мониторинга;
  4. CPUCODE.BIN – обновленный набор микропрограмм для процессора, исправляющий ошибки производителя;
  5. ACPI.BIN – низкоуровневые компоненты ACPI (расширенного управления питанием, отвечающего за усыпление/пробуждение устройств), вызываемые операционной системой;
  6. PnP.BIN – низкоуровневые компоненты PnP-менеджера, распределяющие системные ресурсы между устройствами и предоставляющие операционной системе сведения об аппаратной конфигурации, а так же уведомляющие ее о событиях связанных с удалением/добавлением новых устройств;
  7. CALL-BACK – прочие микропрограммы, вызываемые операционной системой по мере необходимости;

Конфигурационные настройки, в свою очередь, делятся на следующие типы (названия общеприняты):

  1. LOGO – цветастая картинка, скрывающая пугающий черный экран BIOS;
  2. ESCD – Extended System Configuration Data:блокданныхо PnP устройствах;
  3. DMI – DesktopManagementInterface: блок данных об аппаратных средствах системы;

При обновлении прошивки, чаще всего перезаписывается лишь MAIN-BLOCK, включающий в себя BIOS.ROM, xxxEXT.ROM и CPUCODE.BIN, ACPI.BIN, PnP.BIN и CALL-BACK модули, или даже небольшая его часть (например, только ACPI.BIN как наиболее глючный из всех).

Рисунок 1 внешний вид программы Award Win FLASH, позволяющий перешивать BIOS не выходя из Windows

bios_image_1.jpg

Рисунок 2 BIOS'ы бывают разные…

Нормальные операционные системы (такие, как Windows XP) не используют BIOS в операциях обмена и весь ввод/вывод гонят напрямую через порты и DMA. BIOS лишь конфигурирует устройства, задавая их начальные параметры и режимы работы, но операционная система свободно может переконфигурировать все по-своему (тот факт, что тип обмена с накопителем выставлен в BIOS'е как тормозной PIO не помешает драйверу использовать Ultra-DMA и, соответственно, наоборот). Правда, некоторые устройства настраиваются лишь единожды и динамического конфигурирования не поддерживают. В особенности это касается шинных контроллеров и контроллеров памяти, однако, таких устройств с каждым днем остается все меньше и меньше.

Таким образом, непосредственного влияния на производительность системы BIOS не оказывает. Windows NT 4.х вообще не отображает код BIOS'а на свое адресное пространство, Windows 2000 и XP отображают, но лишь потому, что современные BIOS'ы содержат низкоуровневые компоненты PnP- и ACPI-менеджеров – неиссякаемый источник головной боли для разработчиков драйверов и первородный грех многих глюков и критических ошибок.

Рисунок 3 конструктивно BIOS соединяется с южным мостом чипсета через ISA-шину или внутреннюю шину специального назначения

Правила этики обязывают прилагать к каждой версии прошивки сопроводительное описание, объясняющие чем она отличается от остальных, чтобы пользователь мог осмысленно решать – нужна она ему или нет. Пример одного из таких описаний приведен ниже:

8kt31a19.exe 2001-10-19 248.7 kb N/A

FixedHCTACPItestfailuresunderWIN2K. исправлен отказ HCTACPI теста под W2K Fixed system hang when installing a SoundBlaster and Live Ware. исправленповиссистемыприустановке SB и LW

Fixed WINXP installation failure with Nvidia Geforce 2MX AGP Card. исправленотказустановки XP на GeforceARG2MX Fixed abnormal FAN signal hanging BIOS исправленаненормальнаяобработка FAN-сигналов

Fixed ACPI errors in event viewer under WINXP исправлена ACPI-ошибкав Event View'ере XP Added new BIOS feature to differentiate between Athlon XP or Athlon MP добавленыновыефичидляразличия XP от MP

Разумеется, сопроводительный список может быть и не полным (прошивка исправляет проблемы не перечисленные в списке), или же вовсе отсутствовать (чем, в частности, грешит ASUS). Спрашиваете, какие категории проблем способно решить обновление BIOS'а? Таких моментов всего три:

  1. поддержка новых устройств (процессоров, модулей оперативной памяти, накопителей);
  2. разблокирование ранее недоступных режимов работы, тактовых частот и таймингов;
  3. устранение конфликтов программно-аппаратного обеспечения;

Рассмотрим каждый из этих пунктов поподробнее.

поддержка новых устройств

Устройств, действительно нуждающихся в обновленной версии BIOS, всего два: это процессор и оперативная память.

Чтобы процессор нормально «завелся» и «раскочегарился», он должен быть соответствующим образом сконфигурирован, что осуществляется как аппаратно (путем подачи на заданные интерфейсные ножки определенных логических сигналов), так и программно (путем записи настроечной информации в служебные регистры). Вместе с процессором конфигурируется и контроллер шины, вживленный в серверный мост чипсета и обеспечивающий взаимодействие процессора с остальным оборудованием. Встретив незнакомый процессор, BIOS может либо вообще отказаться от его запуска, либо не в полной мере реализовать его возможности (например, технологию Hyper-Threading). Если BIOS лояльна к разгону, тактовую частоту ядра и системной шины даже у незнакомых процессоров можно установить вручную, наплевав на то, что BIOS идентифицирует процессор неправильно.

BIOS также отвечает за определение типа установленных модулей памяти и конфигурирования ее контроллера. Помимо емкости, модули памяти характеризуются многими служебными параметрами (например, длиной DRAM-страницы), без учета которых контроллер попросту не запустится или будет работать со сбоями. Поэтому, если вы воткнули в маму заведомо исправный DIMM, а она его «не видит», видит только половину или работает с ним на пониженной тактовой частоте, загляните в юзер гайд (userguide) на предмет выяснения, какой у вас установлен северный мост (NorthernBridge), а затем, обратившись к производителю чипсета, выясните: поддерживает ли контроллер памяти такие DIMM'ы или нет. Если поддерживает – попробуйте обновить прошивку, в противном случае меняйте всю мать целиком или подберите другой модуль памяти.

Корректная поддержка накопителей не столь критична. И хотя древние BIOS не поддерживают жесткие диски большого объема, это никак не сказывается на работе Windows (главное, чтобы файлы первичной загрузки располагались в «видимой» области, затем в игру вступят драйвера и диск заработает на полную как миленький, ну а если не заработает, тогда вам не прошивку обновлять надо, а скачивать свежий ServicePack).

Никогда не следует забывать, что BIOS это всего лишь программа и после обновления прошивки новых контроллеров на материнской плате не вырастет и ее аппаратные возможности останутся прежними со всеми свойственными им ограничениями. Так, если интегрированный контроллер не поддерживает 48-битного LBA, отсекая старшие разряды, то работа с дисками большого объема невозможна. Теоретически свежая версия прошивки может «увидеть» весь винт целиком, но при попытке записи в сектор с отсеченным старшим разрядом, произойдет обращение к младшему сектору диска и… прости - прощай файловая система!

Перечень поддерживаемых устройств жестко ограничен чипсетом с одной стороны, и конструктивными особенностями его воплощения в конкретной материнской плате с другой. Если чипсет не поддерживает таких-то процессоров, модулей памяти или накопителей, то никакая прошивка вам не поможет. Так что читайте доки (на чипсеты) они рулез! А вот руководство на материнскую плату о многих аппаратно реализованных возможностях может и умалчивать, оставляя это как задел на будущее. Кстати, о заделах…

новые режимы работы

Сравнивая характеристики чипсетов с характеристиками матерей, несущих их на своем борту, порой не можешь удержаться от мата – сколь малая часть возможностей поддерживается BIOS'ом. Правда, иногда приходится сталкиваться и с обратной ситуацией, когда BIOS поддерживает недокументированные «запредельные» режимы чипсета.

Причины? Да самые разные. Допустим, производитель материнской платы, будучи не совсем уверенным в безглючности своего детища, заблокировал до конца не протестированные режимы или же во избежании конкуренции со своими же «топовыми» железками, намеренно зарезал производительность дешевых моделей, а затем, по мере наступления научно-технического прогресса, стал открывать некоторые из их возможностей, выкладывая свежие прошивки. Чтобы не утруждать себя постоянными обновлениями BIOS'а советую выбирать материнскую плату впору чипсету. То есть, характеристики чипсета должны совпадать с характеристиками родного BIOS'а. Должна ли BIOS поддерживать разгон или нет – решать вам. Во всяком случае, запас карман не тянет, а качественно новые возможностями на программном уровне поддержать невозможно. Взять хотя бы тот же Hyper-Threading, для включения которого требуется всего лишь обновить BIOS, и он как бы будет работать. «Как бы» потому что у многоЦПшности своя специфика планирования запросов к памяти, требующая аппаратной оптимизации шинного контролера и контроллера памяти, в противном случае прирост производительности будет просто смехотворным, если еще не упадет ниже плинтуса.

Другое дело, что свежие прошивки частенько содержат различные полезные «вкусности» вроде усовершенствованной системы температурного мониторинга, автоматически снижающей тактовую частоту памяти/процессора при перегреве или уменьшающей скорость вращения вентиляторов (а вместе с ним и шум!), когда они и без того холодны. Но и тут не все гладко. Температурные датчики, установленные в дешевых материнских платах, катастрофически ненадежны и их показания «плавают» в довольно широких пределах, зачастую выходящих за предельно допустимые температурные режимы работы данного процессора. Пользователи начинают волноваться и дергать производителя, а тот в свою очередь переписывает BIOS так, чтобы он выдавал более «политкорректные» показания. Поэтому, если после прошивки, температура процессора понизилась: либо BIOS настроила процессор на более щадящий (но и менее производительный) режим работы, либо пошла на умышленное занижение показаний. Отдельный случай составляют ошибки идентификации процессора и неправильный подбор напряжения питания, исправляемый свежей прошивкой, но это уже из области «маразмы крепчают» и «шлите ширпотреб бочками».

конфликты

Столкнувшись с конфликтом оборудования или голубыми экранами смерти, не торопитесь сваливать вину на BIOS. В подавляющем большинстве случаев она ни в чем не виновата. Основной источник ошибок – программное обеспечение сторонних производителей, наплевательски относящихся к рекомендациям Microsoft и потому не вполне Windows-совместимых. Затем (по статистике) идут дефекты оборудования (особенно разогнанного), кривая настройка операционной системы и/или BIOSSetup. Попробовать перешить BIOS, конечно, можно, но скорее всего это ничего не даст.

Как выглядят конфликты BIOS? Windows либо вовсе не находит конфликтующего устройства, либо неверно его идентифицирует (например, обзывает звуковую карту джойстиком), либо одно или несколько устройств никак не удается развести по разным IRQ/DMA/IO, а если даже и удается, то они соглашаются работать только по очередности. Это характерный баг PnP-менеджера.

Если же все устройства определяются нормально, но при выходе из «сна» неожиданно исчезают или начинают работать некорректно, то тут либо дефект BIOS, либо само устройство не соответствует спецификации APCI, либо ошибка его драйвера. На всякий случай попробуйте установить свежий ServicePack на ось, скачайте последнюю версию драйвера устройства, проиграйтесь настройками PowerManager'а в BIOS'е и только затем обновляйте прошивку. Ну или как вариант, запретите компьютеру «спать».

Ошибки, допущенные при проектировании BIOS'а, могут стать источником следующих голубых экранов смерти (см. листинг 1). Аналогичные экраны вызываются неполадками железа, сбоями памяти, дефективными секторами, чрезмерным разгоном, некорректно работающими драйверами… Список можно продолжать бесконечно. Записывайте BIOS в виновники только тогда, когда эти BSOD'ы стабильно появляются даже на свежеустановленной системе с заведомо исправным железом (как тестировать железо? да в квейка в дос погоняйте – если не свалится, значит есть шанс, что работает).

Иногда проблему удается решить запретом кэширования BIOS'а (ShadowBIOS или BIOScacheable в BIOS Setup должен быть в Disable). А теперь обещанный перечень ошибок:

Bug Check 0x1E: KMODE_EXCEPTION_NOT_HANDLED

Bug Check 0x0A: IRQL_NOT_LESS_OR_EQUAL

Bug Check 0x2E: DATA_BUS_ERROR

Bug Check 0x7B: INACCESSIBLE_BOOT_DEVICE

Bug Check 0x7F: UNEXPECTED_KERNEL_MODE_TRAP

Bug Check 0x50: PAGE_FAULT_IN_NONPAGED_AREA

Bug Check 0x77: KERNEL_STACK_INPAGE_ERROR

Bug Check 0x7A: KERNEL_DATA_INPAGE_ERROR

Exception Code 0xC0000221: STATUS_IMAGE_CHECKSUM_MISMATCH

Листинг 1 перечень голубых экранов смерти и критических ошибок приложений, виновником которых может быть кривой BIOS

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

Если ваша система работает стабильно и все устройства опознаются нормально, в обновлении BIOS'а нет никакой необходимости. Если же у вас проблемы, в первую очередь сгоняйте за пивом, а затем не спеша пошартесь по support и knowledgebase производителей материнской платы, чипсета, конфликтующего оборудования и программного обеспечения (не забывая в том числе и о фирме Microsoft). Быть может эта проблема уже решена и виновна вовсе не BIOS! Проверьтесь на вирусы, убедитесь в наличии хорошего контакта в нужных местах, сбросьте BIOSSetup в конфигурации по умолчанию. Если неправильно идентифицируется оборудование, не поленитесь заглянуть в справочное руководство – а должно ли оно вообще идентифицироваться? Например, моя материнская плата распознает Athlon 1400/133 как Athlon 1050/100, т. к. даже и не пытается автоматически определять частоту шины, о чем честно признается в тех. паспорте, ручная же установка проходит вполне нормально.

Кратко перечислим проблемы, которые при благоприятном стечении обстоятельств могут быть устранены обновлением прошивки:

  1. неправильно идентифицируется процессора (частота, тип, напряжение питания);
  2. неправильно идентифицируется объем/тип оперативной памяти;
  3. неожиданно низкая производительность процессора/памяти;
  4. неправильно идентифицируются жесткие диски и CD/DVD накопители;
  5. сбои в процессе установки операционной системы;
  6. сбои в работе операционной системы;
  7. материнская плата не запускается;

Современные чипсеты имеют воистину гигантское количество настроек, даже краткий перечень которых растягивается на сотни страниц убористого текста, но BIOSSetup дает доступ лишь к некоторым из них, а остальные настраивает сам, справедливо полагая, что полной власти над машиной пользователю лучше не давать. Для тонкого настройки чипсета на максимальную производительность, обычно прибегают к модификации кода BIOS или в просторечии к его «хаку». Хакнутые прошивки можно найти на некоторых форумах или выменять на пиво у знакомого кодокопателя. Используя их вы сильно рискуете – хорошо если спалите чипсет, память или процессор, хуже если задымятся сами сигнальные дорожки – такую материнскую плату не примет ни один продавец. Тем не менее, риск ради риска – благородное дело, а потому хакерские прошивки рулят и процветают.

Хотите самостоятельно хакнуть свой BIOS? Предупреждаем, это занятие не для ленивых. Потребуется очень много читать по-английски и долго-долго сидеть за отладчиком/дизассемблером, прежде чем хоть что-то прояснится. Для начала вам понадобиться: IDA PRO или любой другой дизассемблер по вкусу, подробная техническая документация на чипсет (не путать с рекламными проспектами!), набор утилит для распаковки/упаковки/подсчета контрольной суммы BIOS'а (обычно можно взять на сайте производителя BIOS'а, ну или на худой конец, распотрошив прошивающую программу, написать все самостоятельно).

Наконец, необходим сам образ BIOS'а который вы собрались хачить. Если два пути его получения: снятие образа уже прошитого BIOS'а и скачивание с сервера производителя свежей прошивки. Оба пути порочны. BOOTBLOCK зачастую распаковывает не весь BIOS, а лишь «нужную» его часть, после чего перемешивает страницы памяти так, что доступ к исходному ROM'у становится невозможен. Кроме того, неясно в каком формате должен быть образ BIOS'а, чтобы его «проглотила» прошивающая программа. Обновляемые прошивки в этом плане выглядят намного более привлекательными, но как уже говорилось, далеко не всякая прошивка включает в себя весь BIOSцеликом, поэтому, скачивайте все прошивки какие только есть. Не обращайте внимание на их размер – он еще ни о чем не говорит (не прошиваемые байты обычно имеют значение FF, некоторые версии прошивок на 99% из этих FF'ов и состоят).

Перед загрузкой прошивки в дизассемблер ее желательно распаковать, использовав соответствующую утилиту, найденную на сайте разработчика BIOS'а. Правда некоторые из них, распаковывают не все микропрограммы и лучше всего распаковывать BIOS руками, дизассемблируя BOOTBLOCK в HIEW'е или ИДЕ. Тоже самое приходится делать, если программа распаковки для вашей версии BIOS'а недоступна.

BOOTBLOCK всегда идет в конце образа, но точка входа в него неизвестна. Мы знаем, что после включения питания (или аппаратного RESET'а) процессор передает управление по адресу FFFFFFF0h, но каким именно способом наш образ отображается на память – заранее неизвестно. Будем исходить из того, что конец образа совпадает с адресом FFFFFFFFh (как чаще всего и бывает), тогда точка входа будет расположена в 10h байте от его конца.

Обычно здесь торчит что-то вроде JMP FAR'а, соответствующего опкоду EAh, «окантованного» осмысленными текстовыми строками (например, датой выпуска BIOS):

seg000:7FFE0 41 30 30 30 39 30 30 30+aA0009000db 'A0009000',0

seg000:7FFE9 00db0;

seg000:7FFEA 00db0;

seg000:7FFEB 00db0;

seg000:7FFEC 00db0;

seg000:7FFED 00db0;

seg000:7FFEE 00db0;

seg000:7FFEF 00db0;

seg000:7FFF0 ; ─────────────────────────────────────────────────────────────────────

seg000:7FFF0 EA AA FF 00 F0jmpfar ptr 0F000h:0FFAAh

seg000:7FFF0 ; ─────────────────────────────────────────────────────────────────────

seg000:7FFF5 30 35 2F 31 38 2F 30 34+a051804db '05/18/04',0

seg000:7FFFE FC 7Ddw offset unk_17DFC

Листинг 2 окрестности точки входа в ASUSAMIBIOS

seg000:3FFE8 36 41 36 4C 4D 50 41 45 a6a6lmpaedb '6A6LMPAE'

seg000:3FFF0 ; ─────────────────────────────────────────────────────────────────────

seg000:3FFF0 EA 5B E0 00 F0jmpfar ptr 0F000h:0E05Bh

seg000:3FFF0 ; ────────────────────────────────────────────────────────────────────

seg000:3FFF5 2A 4D 52 42 2AaMrbdb '*MRB*'

Листинг 3 окрестности точки входа в EPOXAWARDBIOS

Теперь мы должны преобразовать целевой адрес перехода в действительный адрес. Смотрите, если адрес seg000:7FFF0 физически представляет собой F000:FFF0h, то, очевидно, что физический F000:FFAA соответствует нашему seg000:7FFAA. Аналогично и в следующем случае: если seg000:3FFF0 – это F000:FFF0, то F000:E05Bh естественным образом транслируется в seg000:3E05Bh. Чтобы не заморачиваться с этими вычислениями, можно просто попросить ИДУ изменить базовый адрес сегмента так, чтобы seg000:70000 соответствовало segXXX:0000.

Если вы встретите переход или вызов процедуры, указывающий на длинную цепочку FF'ов, это значит, что данный участок кода в вашей версии образа отсутствует и не пере прошивается.

Если вы встретите бессмысленный мусор, то либо данный участок кода упакован, либо вы не правильно определили его разрядность. Основной код BIOS 16-разряден, но в нем может присутствовать большое количество 32-разрядных фрагментов, вызываемых операционной системой. Возможно также, что вы начали дизассемблирование с середины инструкции. А как определить позицию дизассемблирования в сплошном байтовом потоке? Хороший результат дает поиск байт E8h, соответствующего началу команды CALL NEAR и EAh, соответствующего JMP FAR, ну и других подобных им. Также, отыщите все текстовые строки и восстановите перекрестные ссылки на них (для этого необходимо поискать смещение строки прямым поиском в памяти, только не забывайте, что младший байт смещения должен располагаться по старшему адресу, т.е. если строка расположена по seg000:ABCD, нужно искать CD AB, подробности в «Образе мышления ИДА» и «Фундаментальных основах хакерства» Криса Касперски, то есть меня).

Правильно дизассемблированный код выглядит приблизительно так:

seg000:2D1Ccli

seg000:2D1Dmovsi, offset aMemoryTesting ; «Memory Testing : »

seg000:2D20callsub_1CC44

seg000:2D23push0E000h

seg000:2D26pushoffset loc_12D34

seg000:2D29push0EC31h

seg000:2D2Cpushoffset locret_13470

Листинг 4 дизассемблированный фрагмент BIOS'а, строку «MemoryTesting» можно заменить например на «MATRIXloading»

По ходу дизассемблирования вы встретите множество обращений к портам ввода/вывода. Чтобы понять их физический смысл обратитесь к техническому описанию чипсета. AMD и INTEL бесплатно распространяют всю сопутствующую документацию. У остальных с этим похуже. На худой конец загляните в знаменитый InterruptList Ральфа Брауна.

Хачить код лучше всего в HIEW'е, т .к. повторное ассемблирование дизассемблерного листинга ни к чему хорошему не приведет. Хакнутый файл пропустите через «упаковщик» (или упакуйте его вручную, заново рассчитав контрольную сумму), и попробуйте «скормить» прошивальщику BIOS'а. Если все сделано правильно – открывайте пиво и радуйтесь, в противном случае переходите к пункту «BIOS которые могут постоять за себя».

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

Но если уж вам невтерпеж, вы можете использовать следующие источники информации: дизассемблировать фирменную программу-прошиватель и разобраться с ее алгоритмом, при случае свиснув его ключевую часть, а то и весь код целиком. Это самый корректный с технической точки зрения путь, однако, во-первых, программы прошивки может и не быть, а во-вторых, дизассемблирование требует чудовищного количества времени, не говоря уже о соответствующих навыках и уровне подготовки.

Как вариант, загляните в InterruptList или побродите по Интернету. Если вам повезет, вы найдете всю необходимую информацию. Вот, например, на AMIBIOS'ах за обслуживание прошивки отвечает прерывание INT 16, которое Браун подробно описывает.

Самый правильный, но вместе с нем, наименее романтичный путь – обратиться к описанию чипсета, а точнее его южного моста. Пусть для определенности это будет AMD 756. Открываемруководствонаразделе «Flash Memory Support» ичитаем: «Support for programmable flash memory is provided by enabling write cycles to the BIOS ROM regions. Bit 0 of the ISA Bus Control register (Function 0 offset 40h) is provided to enable write cycle generation.». /* Поддержкапрограммируемой flash-памятиосуществляетсяразрешениемцикловзаписив BIOS ROM-регион. Бит 0 контроллера ISA шины (функция 0 смещение 40h) обеспечивает генерацию циклов записи« */. Коротко и ясно. И ничего не надо дизассемблировать. Правда, если вы захотите испортить чей-то BIOS, то скорее всего у вас ничего не получится, т. к. другие чипсеты в этом отношении ведут себя иначе.

Часто хак BIOS преследует одну-единственную, но очень коварную цель, а именно – искажение выдаваемой при загрузке информации в стиле Pentium-7, 666.66 GHZ, 1024 Gbytes RAM с целью выдать свою старую клячу за борзого рысака породистых кровей и загнать его подороже.

Поэтому, не доверяйте показаниям BIOS при покупке компьютера с рук! Запустите квейка и посмотрите тянет ли он на заявленные мегагерцы или нет!

Перешиваемые BIOS'ы первого поколения часто дохли во время обновления (причиной тому могло быть банальное зависание компьютера, отключение питание или некорректная версия BIOS), после чего материнскую плату приходилось либо выбрасывать, либо в срочном порядке искать человека-с-программатором. Но первое – дорого, второе – хлопотно. Вот производители материнских плат и пошли на уступки, оснастив BIOS более или менее продвинутыми средствами защиты и самовосстановления, о которых рассказывает врезка «BIOS которые могут постоять за себя», так что современные BIOS'ы можно перешивать не боясь. Тем не менее, настоятельно рекомендуется запастись UPS'ом (ну или на худой конец оповестить всех домашних, чтобы не вздумали химичить с электричеством), войти в BIOSSetup и выбрать конфигурацию по умолчанию – как наиболее стабильную и безглючную. Также убедитесь, что у вас отсутствуют аппаратные проблемы – компьютер работает в DOS и не виснет, т. к. если он виснет, то: а) прошивка тут не причем, б) если компьютер зависнет во время прошивки, то вам обоим сильно поплохеет.

Когда все подготовительные операции позади, стащите с официального сайта производителя своей мамаши свежую версию BIOS'а. Причем, если она была выложена не позднее, чем вчера, повремените с обновлением, дав ей выдержаться несколько дней – в противном случае вы рискуете нарваться на грубые ошибки разработчиков, которые со всеми ними периодически случаются. Неофициальных источников и «хакнутых» прошивок в особенности лучше избегать, впрочем, риск не так уж и велик, тем более что запорченный BIOS практически всегда можно восстановить.

Обновление BIOS может быть запрещено как переключателем на материнской плате, так и одноименным пунктом в BIOSSetup. Обратитесь к руководству пользователя и уберите все препятствия со своего пути.

Конкретная техника обновления BIOS'а варьируется от одной программы прошивке к другой и мне остается лишь посоветовать внимательно изучить прилагаемую к ней документацию, не пренебрегая даже мелочами. Практически все прошивающие программы – это консольные приложения, запускаемые из MS-DOS. Даже не пытайтесь запускать их из Windows (если только приложение само об этом не попросит, как например, Win Flash изначально спроектированная для прошивки в среде Windows).

Обычно вместе с программой поставляется и ее инсталлятор, автоматически формирующий установочную дискету (обязательно проверьте, что дискета записалась без сбоев, для этого нажмите кнопку выброса, чтобы Windows заново перечитала ее содержимое, а не брала данные из кэша). Убедитесь, что на дискете достаточно места для записи текущей прошивки (ее должна сохранить прошивающая программа), обычно для это требуется 200 –500 Кб. Не стоит сохранять текущую прошивку на совершенно чистую дискету – помимо нее там должна находится программа аварийного восстановления, автоматически запускающаяся при загрузке с дискеты.

Рисунок 4 интерфейс типичной прошивающей программы

По окончании прошивки сбросьте CMOS (если это не сделала сама прошивающая программа), т. к. новая версия может использовать другой формат хранения конфигурационных данных, несовместимый с предыдущим и вызывающий различные конфликты. После перезагрузки и успешного прохождения POST'а войдите в BIOS Setup и найдите в нем пункт типа «Resetconfiguration», осуществляющий сброс всех установок, сделанных предыдущей версией BIOS'а. Наконец, после загрузки Windows (если она вообще загрузится), запустите «менеджер устройств» и дайте ему поработать – устройства, не определяющиеся (или конфликтующие) ранее теперь должны определиться. В крайнем случае, переустановите Windows (если обновление прошивки преследовало цель активации Hyper-Threading'а, то переустанавливать систему по любому придется, т. к. однопроцессорное ядро не способно поддерживать несколько процессоров в принципе, а смена ядра на лету – операция не для слабонервных).

Если после обновления BIOS'а материнская плата не подает никаких признаков жизни, не спешите хвататься за валидол, а поищите на ней перемычку типа «BIOSrecovery» (обычно она присутствует на Intel'ых материях).

Вообще же говоря, существует множество технологий защиты BIOS от некорректного обновления. Рассмотрим три наиболее популярные из них: Die Hard Lite, Die Hard I/II и Dual BIOS.

Die Hard Lite BIOS конструктивно представляет собой крошечный регион памяти внутри BIOS'а (BootKernel), логически или физически защищенный от записи и содержащий минимально работающий загрузчик, поддерживающий ISA-видео карту (или не поддерживающий ни хрена, если ISA-слотов на матери нет, поддержка PCI слишком громоздка для BootKernel'а) и считывающий старую прошивку с дискеты (если вы ее предварительно сохранили перед прошивкой и если дискета еще не успела посыпаться). Короче говоря, это очень примитивная технология, но все же она лучше чем ничего!

Рисунок 5 Die Hard Lite оставляет нетронутым bootkernel, поддерживающий аварийное восстановление прошивки с дискеты

DieHard BIOS состоит из двух микросхем памяти, каждая из которых несет полноценный код BIOS. Одна микросхема (NormalFlashROM) поддерживает перезапись, а другая (RescueROM) – нет. При возникновении проблем всегда можно переключиться на резервную микросхему, переставив переключатель на материнской плате, и повторить попытку прошивки с учетом предыдущих ошибок. Главный минус этой технологии в том, что откат всегда осуществляется на наиболее древнюю версию BIOS'а, в то время как пользователь предпочел бы предыдущую.

Рисунок 6 Die Hard состоит из двух микросхем памяти, одна перешиваемая, а другая нет

DieHard BIOS II является усовершенствованной версией технологии Die Hard. Теперь обе микросхемы памяти полностью уравнены в правах и каждая из них поддерживает возможность обновления. Если обновление основной BIOS прошло успешно, пользователь может обновить и резервную, тогда самая свежая прошивка всегда будет с ним, что бы не случилось с основной микросхемой BIOS'а.

Рисунок 7 DieHardII состоит из двух равноправных микросхем, каждую из которых можно перешивать

Dual-BIOS представляет собой разновидность Die Hard II, но несколько отличается конструктивными решениями. Здесь так же используются две равноправные микросхемы памяти, но переключение может осуществляться как программно, так и аппаратно, в том числе и автоматически, не требуя вскрытия корпуса (который может быть опечатан) для доступа к перемычкам. Кстати говоря, реализовать эту технологию можно и самостоятельно, используя нижеприведенную схему.

Рисунок 8 Dual-BIOS это разновидность DieHardII

bios_image_8.jpg

Рисунок 9 так выглядит «рукотворный» Dual BIOS

Можно ли реанимировать сдохший BIOS, если мама не подает признаков жизни, а поддержка аварийного восстановления в ней конструктивно не предусмотрена? Существуют по меньшей мере два пути. Лучше и безопаснее всего воспользоваться программатором, который можно приобрести практически на любом радиорынке (только убедитесь, что ваш тип FLASH-памяти им поддерживается). К программатору должна прилагаться инструкция, которой необходимо следовать. Если же инструкции нет, а вы не чувствуете себя достаточно подготовленным, обратитесь за консультацией к продавцу. Если он не шланг и не валенок, то поможет.

Если же программатора нет, но есть точно такая же мама, то вытащите из нее BIOS, обвяжите нитками и неплотно воткните ее в свой компьютер, загрузившись с системной дискеты с прошивальщиком. Теперь, не выключая питания, аккуратно вытащите BIOS из панельки, и вставьте свою, стараясь не вызывать коротких замыканий, высекающих искры. Если все пройдет успешно и ничто не сдохнет, вы сможете повторить прошивку BIOS'а заново. Искренне надеюсь, что в этом раз вам повезет.

bios_image_9.jpg

Рисунок 10 внешний вид самодельного программатора

Несмотря на титанические усилия производителей, обновление BIOS все еще остается достаточно нетривиальной задачей, доступной только квалифицированным пользователям и сопряженной со множеством неочевидных особенностей. Тем не менее, есть надежда, что в скором будущем эта операция будет осуществляться столь же просто, сколько и установка/удаление обычных программ. Впрочем, не будем строит из себя пророков, заглядывающих вперед, ибо будущее непредсказуемо…