ЧАСТЬ I. Введение
Во всех системных платах есть микросхема ROM-BIOS. Эта микросхема содержит стартовые программы и драйверы, необходимые для запуска системы и функционирования основного аппаратного обеспечения. В ней также содержится процедура POST и данные системной конфигурации. Все эти параметры записаны в "CMOS-память", которая питается от батарейки. CMOS-память часто называют NVRAM.
Таким образом, BIOS — это набор микропрограмм и драйверов, предназначенных для взаимодействия операционной системы c аппаратным обеспечением, на начальной стадии загрузки системы! При запуске DOS/Windows в режиме защиты от сбоев, используются драйвера только из BIOS.
CMOS-память
BIOS и CMOS - это разные вещи, хотя работают в паре. При включении компьютера BIOS проверяет оборудование, а результаты своей проверки записывает в CMOS-память (NVRAM). Эта память - энергозависима и представляет собой датчик времени с дополнительными байтами памяти. Размер NVRAM составляет 64 байт, 10 из которых отводятся под часы. В оставшиеся 54 байта пишутся установочные параметры дисков и прочего железа, а при загрузке - эти параметры считываются.
Если микросхему ROM-BIOS легко найти на материнской плате, то где-же находится микросхема CMOS-памяти? Она вмонтированна в Южный мост чипсета, и пощупать её ручками не получится. Если посмотреть на принципиальную схему материнской платы, то всё станет ясно:
CMOS содержит ряд информации, включая текущие время/дату, конфигурацию аппаратных средств, а так-же байт статуса остановки для механизма ASPI. На рисунке - дамп CMOS-памяти с пояснительной таблицей:
Ниже, перечислены значения "Байта состояния диагностики", который находится в "0Eh" CMOS-памяти. Проанализировав его значение, можно выяснить, какие проблемы возникали в процессе работы компьютера:
00 Нет ошибок (нормально)
01 Пауза в считывании идентификатора адаптера
02 Адаптеры не соответствуют конфигурации
04 Неправильное время
08 Нет инициализации HDD или адаптера
10 Ошибка в памяти в процессе POST
20 Неправильная конфигурация железа
40 Нарушена контрольная сумма CMOS
80 Разрядилась батарейка CMOS
Если байт диагностического состояния имеет значение отличное от 0, то при загрузке компьютера выводится сообщение о конфигурационной ошибке CMOS. Такие ошибки можно исправить, войдя в BIOS-Setup.
Ещё одним-важным моментом является то, что BIOS конфигурирует аппаратные средства только один раз; при первом включении, когда создаёт таблицу конфигураций оборудования. Поместив эту таблицу в CMOS, он пересчитывает её контрольную сумму (CRC). При следующем включении просто проверяется CRC-CMOS и если она совпадает, то значит "в Багдаде всё спокойно", данные на месте, и нет нужды конфигурировать аппаратные средства вновь - конфигурация считывается из CMOS-памяти.
В случае, если CRC нарушена, то предлагается зайти в программу BIOS-Setup и сконфигурировать железо вручную, при этом данные CMOS-памяти перезаписываются, а система оповещает нас сообщением: "Checking NVRAM - OK!"
Для очистки CMOS-памяти, достаточно обесточить микросхему NVRAM, вытащив системную батарейку на несколько минут или воспользовавшись специальным джампером на материнской плате.
Процедура "ROM-Scan"
Системная BIOS содержит драйверы основных компонентов, таких как: клавиатура, дисковод, жёсткий диск и т.д, которые необходимы для начального запуска компьютера. Чтоб загрузить систему, нет нужды подгружать драйвера вспомогательных устройств, поэтому они загружаются после.., с жёсткого диска. Это относится к звуку, сканерам, принтерам и т.д.
В тоже время существует целый ряд драйверов, без которых "ни как"! К примеру, для отображения информации на экране монитора требуется активизировать видеоадаптер, но его поддержка не встроена в системную BIOS. В таких случаях необходимые драйверы помещаются в микросхему ROM-BIOS, непосредственно на видеоадапторе.
Во время старта, BIOS сканирует шины PCI/AGP на предмет наличия устройств с собственным ПЗУ. Если устройство найдено (имеется загрузочная сигнатура "55 AAh" в начале блока), код его ПЗУ выполняется. Эта проверка известна как ROM-scan.
Внешние модули ROM могут быть установлены между адресами C000:0000 и E800:0000. Процедура сканирует каждый 64K-байтный блок в этом диапазоне на подпись. Можно выступить в роли системного BIOS и просканировать данный диапазон вручную. Достаточно запустить виндовый DEBUG [Win+R -> debug], и ввести команду "D" с нужным адресом памяти:
-d c000:0
C000:0000 55 AA 7A EB 4B 37 34 30-30 E9 4C 19 77 CC 56 49 U.z.K7400.L.w.VI
C000:0010 44 45 4F 20 0D 00 00 00-38 01 26 0D 00 00 49 42 DEO ....8.&...IB
C000:0020 4D 20 56 47 41 20 43 6F-6D 70 61 74 69 62 6C 65 M VGA Compatible
C000:0030 01 00 00 00 B0 10 62 B7-30 35 2F 31 36 2F 30 33 ......b.05/16/03
C000:0040 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
C000:0050 E9 E7 E6 00 00 00 00 00-3F D0 30 7E 80 20 C0 80 ........?.0~. ..
C000:0060 00 00 00 00 10 00 00 80-22 00 A5 0C E9 27 D5 E9 ........"....'..
C000:0070 2E D5 50 4D 49 44 6C 00-6F 00 00 00 00 A0 00 B0 ..PMIDl.o.......
Перед нами - содержимое ROM-BIOS видеоадаптера. Здесь мы видим сигнатуру "55 AAh", которая является подписью загрузочного устройства. Второй байт в дампе "7Ah", указывает на размер ROM-модуля в 512-байтовых единицах. Вычисляется он так.. Запускаем виндовый калькулятор и переводим его в инженерный вид. Заносим "HEX" (7A) и переводим в "DEC":
7A = 122
512 х 122 = 62 464байт (или 61Кбайт)
Значение третьего байта - "EBh". Для некоторых ROM-BIOS это контрольная сумма модуля, для других - адрес начала исполняемого кода. В данном случае - это контрольная сумма.
Обычно, собственную BIOS имеют следующие устройства:
- Видеоадаптеры — всегда имеют собственную микросхему BIOS;
- SCSI-адаптеры — обратите внимание, что BIOS не поддерживает все SCSI-устройства;
- Сетевые адаптеры — платы, поддерживающие загрузку непосредственно с файлового сервера (модуль IPL);
- IDE-накопители - для поддержки функции загрузочного устройства при запуске системы.
Технология "Plug & Play"
Конфигурирование устройств в компьютере довольно сложный процесс. Пользователь должен назначить устройству прерывание, порты ввода-вывода и каналы DMA, т.е. ресурсы, не используемые в данный момент другими устройствами. Технология Plug and Play значительно упростила процесс установки и конфигурирования новых устройств. Пользователю необходимо лишь вставить плату в свободный разъём, и система автоматически выделит необходимые ресурсы.
Все устройства, соответствующие спецификации "Plug & Play", должны иметь уникальный идентификационный номер (ID), по которому система сможет распознать устройство и установить необходимые драйвера. ID определяется производителем и должен быть уникальным. Многие устройства (например контроллер прерываний или контроллер клавиатуры) не имеют стандартизированного ID. Для таких случаев Microsoft зарезервировала префикс PNP.
Этот механизм активно использует софт для сбора информации о компьютере (Everest/AIDA). В базах таких программ прописаны все идентификационные номера устройств. Библиотека подобной программы "PCI-32" выглядит так:
*****************************************************************
PCI and AGP Vendors, Devices and Subsystems identification file.
This is version 612 of this file. The list now contains 21,343 lines of info!!!
V 9710 MosChip Semiconductors
D 061C IC138 PCI Parallel Port Controller
D 001C IC80+PCI POST Diagnostics Card
V A259 Hewlett Packard
S E2A0 64-bit/66MHz Wide Ultra3 SCSI Adapter
D 7800 Intel740 AGP Graphics Accelerator
S 4710 Avance AC'97 Audio
S 7608 Onboard AC'97 Audio Controller with STAC9708 codec
D 3579 82835 SDRAM Controlller / Host-Hub Interface Bridge
R 81 82945P Processor to I/O Controller
D FFFF Unknown
. .... ................
. .... ................
Valid Codes:
V Vendor ID. 4 digit hex number.
D Device ID. 4 digit hex number.
R Revision ID. 2 digit hex number.
O Subsystem OEM ID. 4 digit hex number.
S Subsystem device ID. 4 digit hex number.
******************************************************************
Технология "Plug & Play" состоит из 3-х основных компонентов:
- Plug and Play BIOS;
- Extended System Configuration Data (ESCD);
- Операционная система "Plug & Play".
Если адаптер был уже установлен в системе, то BIOS считывает конфигурационную информацию из ESCD, инициализирует устройство и продолжает загрузку. Если-же устройство впервые появилось в системе, BIOS запрашивает у "ESCD" свободные ресурсы. Получив их, она конфигурирует новое устройство.
Если же с помощью свободных ресурсов нельзя сконфигурировать новое устройство, то BIOS продолжает загрузку компьютера, а конфигурированием занимается операционная система. Параметры всех корректно сконфигурированных устройств записываются в базу данных "ESCD", которая хранится в CMOS-памяти. Насколько правильно выполнена конфигурация, можно проверить с помощью "Диспетчера устройств".
ЧАСТЬ II. Системная BIOS
Итак, базовая система ввода-вывода — это встроенное в компьютер программное обеспечение, которое доступно ему без обращения к диску. BIOS содержит код, необходимый для управления клавиатурой, видеокартой, дисками, портами и другими основными устройствами. Обычно BIOS размещается в микросхеме ПЗУ (ROM), размещенной на материнской плате компьютера, поэтому этот чип часто называют ROM-BIOS.
Благодаря BIOS компьютер может самостоятельно загружаться. Поскольку доступ к RAM (оперативной памяти) осуществляется значительно быстрее, чем к ROM (ширина 128, против 8-ми бит), многие производители компьютеров создают системы таким образом, чтобы при включении компьютера выполнялось копирование BIOS из ROM в оперативную память. Задействованная при этом область оперативной памяти называется Shadow Memory (теневая память). К ней нет доступа.
{{{{{{{{{-------------------
Здесь, не лишним будет сказать пару-слов об адресах и организации памяти компьютера. DOS использует сегментную модель памяти (small), т.е. указываем сегмент, и через двоеточие, смещение внутри этого сегмента. Все адреса здесь реальные:
0000:0000 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
FFFF:FFFF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
Размер памяти соответствует диапазону от 0 до FFFF, а это 65 535 умноженное на 16 байт, или 1 мегабайт (не считая расширенной). Windows-же использует плоскую организацию (flat), где есть один сегмент, а всё остальное - смещения. В этой модели памяти все адреса виртуальные, и если у вас установлено 1Gb памяти, то для Windows всё-равно будет 4Gb:
0х00000000 00 00 00 00 00 00 00 00 ........... 00 00 00 00 00 00 00 00
0хFFFFFFFF 00 00 00 00 00 00 00 00 ........... 00 00 00 00 00 00 00 00
В этом случае размер памяти увеличивается до FFFFFFFFh байт, а это уже 4Gb. Организация памяти 64-битных систем, вообще не влезает в экран монитора. Она больше 32-битных ещё в два раза, а значит может иметь размер FFFFFFFFFFFFFFFFh байт, или 17 179 869 184 Gb, что теоритически можно считать бесконечностью. Правда, это только возможности.., на самом деле используется только 4-8 Gb:
0х0000000000000000 00 00 00 00 00 00 00 00 .......... 00 00 00 00 00 00 00 00
0хFFFFFFFFFFFFFFFF 00 00 00 00 00 00 00 00 .......... 00 00 00 00 00 00 00 00
Организация памяти напрямую зависит от типа центрального процессора. 32-битный процессор i486 имеет 14 регистров общего назначения, каждый из которых имеет длину 32 бита. 64-битный процессор имеет так-же 14 регистров, но уже с длинной 64. Режим работы процессора определяет, какие команды и какие архитектурные возможности доступны.
----------------}}}}}}}}}
Но вернёмся к системной BIOS.. Микросхема флэш-BIOS присутствует в системе как устройство, подключенное к адресному пространству памяти, и управляемое чипсетом материнской платы. Она находится в самых верхних адресах памяти. Поскольку "i386+" позволяет обращаться к 4Gb памяти, и если объём флэшки составляет 4 мегабит (512 килобайт), то адрес начала флэш памяти равен:
4Gb - 512Kb = FFFF FFFFh - 0008 0000h = 0хFFF7 FFFFh
По адресу 0хFFFFFFF0 находится первая исполняемая инструкция загрузочного кода BIOS. Данный факт одинаков для любых IBM-совместимых компьютеров начиная с 386. Возникает вопрос: «каким образом процессор получает доступ к данному участку памяти при включении компьютера?»
Ответ даёт М.Гук в своей книге: Сброс (при включении питания), переводит процессор в реальный режим и устанавливает ряд регистров в определенное состояние. В частности устанавливаются следующие значения регистров:
CS = F000h
EIP = 0000FFFF0h
При вышеуказанном сочетании регистров CS:EIP, находясь в реальном режиме, процессор начинает выполнение инструкции, считанной по физическому адресу 0хFFFFFFF0h. После того как BIOS проинициализирует основные компоненты компьютера, будут запрограммированы регистры чипсета так, чтобы затенить (shadow) адресное пространство флэш-памяти. Теперь данный диапазон памяти устанавливается как "Read-Only".
Для того, чтобы программно добраться до самой флэш-BIOS, требуется соответствующим образом запрограммировать регистры чипсета материнской платы. Поскольку производителей чипсетов много (Intel, VIA, SiS, AMD, nVidia) программные алгоритмы разрешения доступа к флэш у всех разные. Именно поэтому программный код BIOS аппаратно-зависимый, т.е. под конкретную материнскую плату и микросхему памяти.
По идее, содержимое BIOS можно разделить на 4 основные части:
POST — самотестирование при включении питания.
BIOS — набор системных драйверов.
Setup BIOS — конфигурирование параметров системы.
Загрузчик ОС — подпрограмма, выполняющая поиск загрузочного сектора на дисковых устройствах.
Типы Flash
Теперь немного о самой микросхеме флэш-BIOS. Во-первых, программная реализация зависит от производителя: Winbond, Intel, Amtel, SST, Imt, Macronix и прочие. Во-вторых, м/с различаются ещё и по способу хранения информации:
Sectored – флэш с секторной структурой. Может иметь несколько, разных по размеру секторов.
Paged – флэши со страничной структурой. Вся память микросхемы представлена в виде одной страницы.
BULK-ERASE – как #2, только для перезаписи требуется послать команду предварительной очистки страницы.
SMALL SECTORS – флэш с ячеистой структурой. Для 128Kb может иметь 1024 сектора по 128 байт.
В наше время чипы выпускают в нескольких вариантах - обычные DIP-32, и хабовые PLCC-32, TSOP-32. Поскольку DIP-32 ушёл в прошлое, поговорим мы о PLCC и TSOP:
LPC-интерфейс
Раньше, BIOS висел на шине LPC вместе с мультяшкой (Super I/O), что создавало определённые неудобства. Производители решили, что негоже биосу путаться среди флопов и портов, и выделили для него отдельныу шину, назвав её "Firmware HUB", или FWH.
Надо сказать, что ширина шины обмена у Flash-BIOS оставляет желать лучшего - 8 бит, хотя уже есть экзепляры с шиной данных и в 16 бит TSSOP-50, но в основном это 8-битная шина. От ширины напрямую зависит скорость обмена данными, и если-бы при включении компьютера содержимое ROM-BIOS не копировалось-бы в ОЗУ, то за время загрузки можно было-бы сходить в комок за пивом, или скурить пару сигарет..
Но как узнать, какая флэшка-то стоит на компе? ..а очень легко - на ней обычно наклеена голографическая наклейка, которую необходимо оторвать. Маркировка представляет собой длинный ряд цифр, наподобие "Pm 49FL004T-LPC". Идём на http://www.alldatasheet.com, заполняем строку запроса и получаем pdf-файл с подробным описанием чипа:
SST49FL004T
Firmware HUB for Intel 8xx Chipsets
512K x8 (4 Mbit)
33MHz clock frequency
Top BootBlock protection - 64K
11-pin multiplexed adress, 8-pin data I/O interface
Suppord fast in-System or PROM programming
Chip Rewrite Time - 8 seconds
PRODUCT ORDERING INFORMATION
SST 49 FL 00x T
___ __ __ ___ _
| | | | |
| | | | +---> версия
| | | +-----> размер
| | | 008 = 8 Mbit (1Mb)
| | | 004 = 4 Mbit (512Kb)
| | | 002 = 2 Mbit (256Kb)
| | +---------> напряжение
| | L = 3.3v
| | H = 5v
| +------------> серия
+---------------> производитель
Микросхемы ROM-BIOS имеют различную ёмкость. В старых компьютерах использовались чипы объёмом 1-2 Мbit (128/256 Кбайт), а в современных системах 4-8 Мбит и более (512Kb/1Мb). В старых компьютерах встречались микросхемы BIOS различных типов и форм, но чаще они помещались в прямоугольный корпус DIP-32. В современных системных платах чаще всего встречаются хабовые чипы в квадратном корпусе PLCC, TSOP.
SPI-интерфейс
..время идёт, не давая разработчикам расслабляться! Это способствует появлению новых чипов и интерфейсов для их подключения. Сегодня, на смену параллельному интерфейсу LPC, пришел последовательный интерфейс SPI (Serial Peripheral Interface). Напомню, что для записи чипа программа должна взаимодействовать с двумя блоками регистров: южного моста и регистрами самого чипа. При переходе от интерфейса LPC к SPI, архитектура двух указанных блоков существенно изменилась.
В отличие от процессора, памяти, графической подсистемы (эволюция которых сопровождается ростом производительности), микросхемы Flash-ROM (и их интерфейсы) развиваются в другом направлении. Здесь главными критериями являются уменьшение стоимости, потребляемой мощности и занимаемой площади на материнской плате. Главный метод достижения этих целей – уменьшение количества проводников между микросхемой BIOS и контроллёром.
С появлением чипсетов Intel 810/815 на основе "хабовой" архитектуры, шина ISA ушла в прошлое и BIOS "переехал" на интерфейс LPC, название которого переводится как "малое количество сигналов". Сигналы адреса/данных/управления в этом интерфейсе передаются по 5-ти линиям (не считая сигналов сброса, тактирования и линий питания).
Начиная с чипсета Intel 945, в состав "Южного моста" включен контроллер последовательной шины SPI, который для передачи адреса/данных/управления, использует 1-битный канал на повышенной частоте (50 вместо 33 MHz). Это позволило уменьшить габариты и чип стал 8-пиновый (вместо 32):
Микросхемы SPI-Flash (в частности SST25VF080B), используют 3 сигнала для приема/передачи данных:
SCK (Serial Clock) – вход тактовой частоты.
SI (Serial Input) – вход данных (побитно адрес/данные/коды команд).
SO (Serial Output) – выход данных (побитно данные/состояние микросхемы).
Интерфейс LPC, как и прежде, поддерживается современными чипсетами и разработчик может подключить чип как LPC, так и SPI интерфейсом. Сфера применения SPI не ограничивается материнками, и успешно используется в TV и прочей микропроцессорной аппаратуре.
Дополнения
Принцип работы флеш-памяти основан на изменении и регистрации электрического заряда в изолированной области (кармане) полупроводниковой структуры. Запись/стирание производится изменением заряда. Чтение выполняется полевым транзистором, для которого "карман" выполняет роль затвора. Потенциал затвора изменяет характеристики транзистора, что и регистрируется цепями чтения.
Запись/чтение ячеек сильно различаются в энергопотреблении: при записи ток большой, при чтении - малый. Этот факт влияет на количество записей в ячейки флеш-памяти: примерно 100 000 раз. В тоже время неидеальна и изоляция "кармана", заряд постепенно изменяется, поэтому срок хранения заряда (информации) - 10..20 лет.
Стирание, запись и чтение Flash-памяти всегда происходит крупными блоками разного размера, при этом размер блока-стирания всегда больше размера блока-записи. Как следствие, все Flash имеют иерархическую структуру: память разбивается на блоки, блоки состоят из секторов, сектора из страниц. Об этом нужно помнить при перепрограммировании Flash.
Подводя итоги, хотелось-бы ещё раз перечислить основные типы Flash-BIOS:
- параллельные DIP32 (серии 28/29/39/49)
- параллельные FWH/LPC (PLCC/TSOP - Intel, SST, Winbond, ST, Atmel, PMC)
- последовательные SPI (серий 25/45 - Atmel, Sanyo, ST, SST, PMC)
БИОС изнутри
Пристегните ремни, идём на посадку!
Под нами - код биоса, размером 512Kb и матрицей 16 х 524287.
В роли "Павлика Морозова" будет выступать мой AMI (ECS P4M800M-v3.0), но для начала нам нужно его задампить/сохранить. Берём "AFUWin", в котором жмём [Save]:
AMIFLASH сообщает, что мы имеем чип "PMC49FL004T-LPC"; размер образа 512Kb, в котором бут-блок занимает 64Kb. Всё ясно! BootBlock - он везде одинаковый (64Kb), а остальное-то что..?
Код BIOS создаётся из отдельных модулей, каждый из которых имеет свой уникальный ID хх и выполняет определённую функцию. В своих разработках производители редко задействуют все возможные функции, приблизительный список которых выглядит так:
Теперь смотрю, какие модули включил производителдь в мою прошивку. Качаю AMIBCP, травлю его на сохранённый образ моей прошивки, и из меню "Файл", делаю репорт:
..вижу, 13 модулей с размерами каждого из них. Количество включённых модулей, определяют поддерживаемые функции моим биосом (и компа в целом). AMIBCP - это редактор AMI'шных биосов. При определённых навыках, при помощи его можно создать уникальный BIOS, именно под свою материнку!
На вкладке "Setup Configuration" программы, в левом окне видны все отображаемые разделы нашего биоса. В правом окне - их состояние. Непонял!!! А чё овер-клокинг выключен? Непорядок - срочно включаем! В колонке "Optimal" правого окна, щёлкаем два раза и выбираем "Enabled":
Проверяем остальные-отключённые функции, и [Файл --> Save].
Текстовые строки можно изменить на вкладке "BIOS Strings". Находим нужную строку и двойным кликом изменяем её. Желательно придерживаться оригинального количества символов. После нажатия [Enter] в окне "BIOS String", строки во всех окнах меняются автоматически.
Но это только интерфейс.. Чтоб изменить программый код BIOS'a, нужно извлечь нужный модуль, дизассемблировать его, внести изменения, и вшить обратно. Для извлечение/запаковки ресурсов служит программа MMTool.
БИОС изнутри (продолжение)
На повестке дня - "хардкор" для начинающих! Попробуем копнуть глубже: вытащим какой-либо модуль, изменим его и впихнём обратно.. Поможет нам в этом MMTool. Цель и задача операции - замена "FullScreen/Small LOGO".
SMALL - это логотип компании-разработчика, который мы видим при включении компьютера в правом углу.
Full Screen Logo - это заставка 640х480, которую (на некоторых машинах) можно вывести на экран, во время прохождения процедуры POST.
Запускаем "MMTool", жмём [Load ROM] и подсовываем свою прошивку. Тулза выводит список и данные имеющихся модулей. Модуль [1A] - SmallLogo - это и есть унылый логотип AMI, который мы подряжаемся заменить. Сначала, узнаём сколько осталось свободного места на флэшке (чтоб не получилось как в том анекдоте про двух "кексов", которые пихали 5-ти дюймовую дискету, в дисковод-3.5). Затем, подготавливаем новое 'LOGO' в формате *.bmp и минут-так ..надцать танцуем с бубном.
Чтоб вычислить свободное простанство чипа, суммируем все значения в колонке "Size in ROM" и отнимаем от общего размера флэшки:
Чип : 524 288 байт (512Kb)
Модули : 360 556 байт (352Kb)
Free : 512 - 352 = 160Kb
М-да, свободного пространства хоть отбавляй! Идём на вкладку "Extract" и выделив модуль [1A] извлекаем его:
Мы получили непонятный файл без расширения, в котором хранится оригинальное 'LOGO'. Как его просмотреть? Ни один графический редактор не распознаёт формат.. Но выход есть! Как известно, любой файл имеет свою сигнатуру, которая находится в самом его начале, и определяет принадлежность к программе. Открываем файл-невидимку в любом 16-тиричном редакторе (WinHex), и смотрим на его сигнатуру:
00000000 47 52 46 58 01 01 08 00 00 00 00 00 4E 00 00 00 GRFX........N...
00000010 00 00 86 00 1F 00 00 80 00 00 10 00 00 49 4D 41 ..†....Ђ.....IMA
00000020 00 00 00 20 00 00 00 20 00 20 20 00 00 00 20 20 ... ... . ...
00000030 00 20 00 20 20 20 20 20 30 30 30 3F 00 00 00 3F . . 000?...?
__"GRFX"....чёто новенькое. Забиваем сигнатуру в поиск - гугл молчит! От млядь, не идёт к Петрову шайба.. Нам нужно создать новое 'LOGO' именно с таким расширением, в противном случае ничё не выйдет.
В поисках ответа зашёл на ROM.BY, где говорили, что биосы хранят логотипы в формате *.EPA.
Программа Advanced BIOS Logo Reader (ABR-2) извлекает и преобразует в *.BMP (и обратно) логотипы биосов таких производетелей как: AWARD, PHOENIX, INTEL, AMI, ASUS, MSI, DELL. Качаем от сюда: http://biosgfx.narod.ru/abr-2/
Осталось на вкладке [Delete] удалить оригинальный модуль [1A] Small Logo(s), и перейдя на [Insert] добавить в прошивку новый логотип. Контрольная сумма при этом, пересчитывается автоматически.
Эксклюзивное LOGO создаётся в любом графическом редакторе (типа 'Photoshop'), с размерами 400х150 (16 цветов), и сохраняется в формате BMP. После того как файл создан, его нужно обязательно пропустить через 'PAINT' с такой-же палитрой. Видимо это глюк фотошопа, т.к. MMTool ругается на фотошоп'овский BMP.
Full Screen Logo меняется похожим образом, только оно хранится в модуле [0E] OEM Logo.
Делаем свою заставку-BMP 640х480x16, запускаем MMTOOL и открываем свой БИОС. В нём, на закладке [Insert] выбираем нашу картинку BMP, ниже (в поле ID) вводим 0E, и жмём [Insert]. Дальше--> Save ROM и прошиваем!
БИОС изнутри (заключение)
После нехитрых манипуляций с модулями, предлагаю рассмотреть общую структуру AMI-BIOS. Здесь имеются нюансы, на которые следует обратить внимание. (нужно сказать, что всё описанное в этой статье применимо только к AMI-8, т.к. имеется ещё 7 и 6 версии, которые отличаются от своего (со)брата).
Так где-же точка в биосе, которая приводит весь механизм в действие?
Значит, код биоса состоит из запакованных модулей и НЕзапакованного бут-блока. Каждый модуль имеет свою сигнатуру и контрольную сумму. Сколько в прошивке модулей - столько и сигнатур с чек-суммами. Но есть ещё одна - основная сигнатура всего биоса, которая определяет версию программного кода (не подпрограммы BIOS-Setup). Для AMI8 - это строка AMIBIOSC08xx.
Чтоб проверить версию своего кода, запускаю в WinHex поиск строки, с волшебным словом "AMI":
0005FFE0 00 00 00 00 00 00 00 00 08 0A 41 4D 49 42 49 4F ..........AMIBIO
0005FFF0 53 43 30 38 30 30 12 B0 21 40 B0 9B 0C 00 83 DF SC0800.°!@°›..ѓЯ
00060000 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF яяяяяяяяяяяяяяяя
В основную сигнатуру я попал с первого выстрела - AMIBIOS 8.00, ..от сюда все "пляшут", и в первую очередь программы-прошивальщики AMIFLASH и UNIFLASH! Дело в том, что каждая версия имеет свои особенности, которые прописываются программистом в код программы-прошивальщика. В частности, это касается адресов расположения модулей, т.е. прошивальщик знает в какой сектор флэш, чё писать. Для этого, достаточно запустить прошивальщик с ключом /?
Теперь про BootBlock. Как известно, его размер 64Kb и расположен он в самом конце пространства. Выходит, что (для 512Kb) начало лежит по адресу 00070000h:
Всего : 00080000h (512Kb)
Бут-блок : 00010000h (64Kb)
Начало : 00070000h
******************************************************************************
00070000 05 E0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .а..............
00070010 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00070020 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00070030 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00070040 41 4D 49 42 4F 4F 54 20 52 4F 4D 00 00 00 00 00 AMIBOOT ROM.....
00070050 00 00 00 00 00 1D 47 00 00 12 50 00 51 49 00 00 ......G...P.QI..
00070060 01 00 00 00 01 00 00 00 00 00 00 00 00 00 00 00 ................
00070070 E9 FD 01 E9 3D 02 E9 A5 10 E9 B0 61 E9 41 65 E9 йэ.й=.йҐ.й°aйAeй
******************************************************************************
Напомню, что это адрес внутри самой прошивки, а не в памяти компьютера. Восьмая версия AMI отличается от своих предшественников тем, что здесь модули (и весь код в целом) располагаются наоборот - от конца к началу!
После окончании сигнала RESET#, процессор выполняет свою первую команду по адресу F000:FFF0 в памяти. Внутри кода (как впрочем и в памяти) это последние 16 байт, от 0 до F:
*******************************************************************************
0007FFD0 00 F0 FF FF 00 00 00 00 00 00 00 00 24 42 54 53 .ряя........$BTS
0007FFE0 31 32 33 34 35 31 32 33 20 05 12 28 15 39 39 00 12345123 ..(.99.
0007FFF0 EA AA FF 00 F0 31 32 2F 32 38 2F 30 35 00 FC 00 кЄя.р12/28/05.ь.
*******************************************************************************
Если диссаммблировать этот участок кода, то мы увидим здесь обычный JMP (прыжок) на участок кода, который запускает весь механизм старта. Вот она - точка опоры! Стартовый код дизассемблированный в программе DEBUG, будет выглядеть так (переход на F000:FFAA в памяти):
1395:0117 3320 XOR SP,[BX+SI]
1395:0119 1109 ADC [BX+DI],CX
1395:011B 27 DAA
1395:011C 21263800 AND [0038],SP
1395:0120 EAAAFF00F0 JMP F000:FFAA
Стартовый код производит первичную инициализацию оборудования и проверяет различные контрольные суммы (их много в биосе), главная из которых - контрольная сумма всех модулей, вместе-взятых. Если она нарушена - в игру вступает механизм самовосстановления. Эта микропрограмма запускает бут-блок, который дёргает флоп в поисках прошивальщика с прошивкой.
Надеюсь, что Вам не придётся копаться в прошивках биоса в поисках модулей, т.к. программа MMTool прекрасно справляется с этим, но всё-же это теория и знать её полезно!
Часть III. Прошивка BIOS
Внимание!!!
Описанные в данной главе действия не носят принудительного характера.
Автор не несёт ответственности за повреждённые биосы и сгоревшие материнки.
Вы всё делаете на свой страх и риск, и только в целях повышения собственной квалификации.
Если Вы дочитали до этого места, значит созрели для непосредственной прошивки своего системного BIOS. Советую сходить на рынок (или к ремонтникам) и приобрести дополнительный чип, который будем использовать к качестве "запасного аэродрома". Лично я нашёл материнку "ASROCK", от куда вытащил чип "SST 49LF004B" и теперь моя душа (как и тело) - в полном спокойствии, что в конечном счёте влияет на положительный исход операции.
Говорят - бережённого, бог бережёт! Делаем резервный чип, в который заливаем свою рабочую прошивку. Это так, про запас... Если вдруг возникнет внештатная ситуация, я просто вставлю резервный чип на место и прошью эксперементальный биос вновь.
т.к. чип у меня от ASROCK'а, то и биос в нём соответственный. Запустить на нём мою материнку Elitegroup неполучится. Придётся делать резервный чип хот-свапом:
1) Подготавливаю дискету с прошивальщиком и оригинальной прошивкой
2) Выключаю компьютер из сети
3) Вытаскиваю (иголками с двух сторон) родной чип из колодки
4) Объвязываю его рыболовной леской (по диагонали) и вставляю на место
5) Гружусь досом на своём чипе
6) Как появится досовское приглашение A:\, тяну за леску и вытаскиваю чип из колодки
7) Машина продолжает работать без чипа, и мигающий курсор ждёт команды
8) Не выключая компьютер, аккуратно вставляю чип ASROCK на место родного
9) Запускаю прошивальщик и шью чип ASROCK прошивкой Elitegroup.
В итоге, получил два чипа с одинаковыми прошивками. Оригинал откладываю в сторону, а на чипе ASROCK (с телом Elitegroup) провожу все эксперименты. Вариантов, конечно-же много.. Например, можно написать autoexec.bat следующего содержания:
echo *** Warning!!! ***
echo Your BIOS has been flashing NOW!!!
echo Press any key for flashing ...
pause
amiflash.exe bios.rom /b /n /-o /-c /-d /-r /v /-i /-k /-e /-g
Тогда перед прошивкой выскочит "варнинг" и просьба нажать любую клавишу. Как-раз в этот момент можно неспеша флешку то и заменить. Естественно AMIFLASH.EXE и BIOS.ROM должны лежать на дискете. Досовское правило 8.3 соблюдать обязательно!
Прошивка BIOS (продолжение)
Итак, замена биос – дело довольно рискованное, хотя и не такое сложное. Надо помнить, что ошибка в процессе смены микропрограммы может привести к печальным последствиям. Иногда во время перепрошивки, как на зло, происходит отключение электроэнергии или зависание системы. В этом случае может помочь лишь хот-свап или программатор. Но нам это не грозит - у нас уже есть резервный чип! Приступим...
Во-первых, нужно определить модель материнки и версию текущего BIOS. Жмём [Win+R]--> cmd--> systeminfo:
******************************************
C:\systeminfo
Изготовитель : ECS
Модель : P4M800-M
Версия BIOS : AMI - 080012
******************************************
Во-вторых, необходимо определить чипсет (м/с Северного и Южного мостов). Дело в том, что код биоса пишется под конкретный чипсет. В частности, это касается регистров Южного моста, с которыми напрямую имеют дело регистры чипа ROM-BIOS.
Один и тот-же BIOS может быть установлен на материнках разных производителей. К примеру мой AMI-ECS стоит и на ASUS'e, с таким-же набором микросхем чипсета. Вообще-то, и Вы можете залить BIOS от материнки другого производителя. Надо лишь проверить соответствие чипсетов, количество PCI-слотов и т.п.
Не принебрегайте этим советом, и скачав биос обязательно проверьте, для того-ли он чипсета (обычно указывается в доках закачиваемого биоса). В противном случае, есть риск убить южный мост навсегда!
С чипсетом дела обстоят чуть сложнее, чем с версией биоса. Можно посмотреть в "Диспетчере устройств", но там только код вендора, поэтому легче скачать софт, типа EVEREST или AIDA. Лично я - не пользуюсь ни тем, ни другим, а юзаю "DR.Hardware", но это уже дело вкуса:
************************************************
Mainboard
Vendor/Model : ECS P4M800-M v1.0
Chipset : VIA Apollo P4M800CE + VT8237 Southbridge VIA 8x V-Link
Bus Type : PCI
Main BIOS
Name : AMI 686-HiFlex-Bios v01.00
ID String : 63-0100-001131-00101111-122805-P4M800CE-P4M800-M
BIOS date : 12/28/05
*************************************************
В поле Chipset указаны Северный и Южный мосты (соответственно), а в поле ID String - идентификационная строка BIOS. Эту-же строку можно увидеть при включении компьютера (в самом низу экрана), пока система проходит POST. В ней так-же указаны производитель, дата, м/с северного моста и модель материнки.
..эту строку с экрана нужно записать на листок, но есть одна проблема! Процедура POST занимает 1-3сек, и записать такое кол-во символов не всегда представляется возможным. Здесь на помощь приходит клавиша [PAUSE]. Эта клавиша приостанавливает выполнение программы DOS. Как только увидим 'ID-string' на экране, сразу жмём паузу и записываем строку на бумагу. Для продолжения загрузки - нажать любую клавишу.
Теперь мы вооружены до зубов! Имеем резервный чип и ID-строку BIOS, знаем м/с чипсета - а больше ничего и не требуется! Забиваем ID-STRING в гугл, и он тычет нас носом в файл биоса. Далее, проверяем чипсет на соответствие и качаем более свежую версию BIOS.
Семь раз отмерь - один раз отрежь!
Скачав новый биос не торопитесь заливать его во флэш - лучше (пере)страховаться, мало-ли чего.. Если файл биоса скачан не с сайта-производителя, то тем паче.. Но как его проверить? А вот как..
Открываем оригинальный файл-биоса в WinHex, и извлекаем из него все текстовые строки (Ctrl+F10). Теперь эту-же операцию проводим и со свежескачанным биосом. При анализе файлов, помимо всякого мусора, будут отчётливо видны текстовые строки. Сравниваем их и делаем выводы:
Оригинал (P4M800M V1.0) |
Скачанный (P4M800-M7 V3.x) |
Скачанный (AMI-ASROCK) |
BIOSLOCKFUNCTION ELITEGROUP |
BIOSLOCKFUNCTION ELITEGROUP |
DGD2PSH |
PCCHIPSP4M800-M V3.X122805 |
PCCHIPSP4M800-M7 V3.X030806 |
ASR69143 |
M952-1 |
M952-1 |
ACFG |
P4M800-M |
P4M800-M7 |
8ACFG |
AMIBIOSC0800 |
AMIBIOSC0800n |
AMIBIOSC0800 |
AMIBOOT ROM |
AMIBOOT ROM |
AMIBOOT ROM |
AMIBIOSCf. |
AMIBIOSCf. |
AMIBIOSCf. |
BootBlock SIO Table |
BootBlock SIO Table |
BootBlock |
SIO Register |
SIO Register |
BBWV22 |
Value |
Value |
RV370 |
BTS12345123 |
BTS12345123 |
BTSASR69143 |
09/27/11 |
03/08/06 |
07/01/08 |
Думаю комментарии здесь излишни. Только слепой не различит сходства.. Нужно добавить, что на моей материнки написано ECS P4M800-M v3.0, а весь софт определяет её как первую версию (v1.0), хотя внутри прошивки указана как и положено v3.x
Прошивка BIOS (продолжение)
Как уже говорилось, BIOS в целом, можно разделить на несколько основных составляющих:
BOOTBLOCK
загрузчик BIOS'а, ответственный за первичную инициализацию чипсета и распаковку основной части BIOS'а в память, также проверяющий ее контрольную сумму и запускающий программу аварийного восстановления;
BIOS.ROM
основной код BIOS'а, осуществляющий инициализацию и тестирование оборудования. Он-же сканирует память в поиске сигнатур всех остальных BIOS'ов - видеокарты, SCSI-устройств и осуществляет их инициализацию. Определяет загрузочный привод и считывает с него загрузочный сектор. Содержит в себе драйвера нижнего уровня, обеспечивающие взаимодействие с основными устройствами ввода/вывода, и программу интерактивной конфигурации, более известную в народе под именем BIOS Setup;
xxxEXT.ROM
различные расширения основной части BIOS'а - в частности, выводящие таблички с конфигурацией оборудования или показания датчиков мониторинга;
CPUCODE.BIN
обновленный набор микропрограмм для процессора, исправляющий ошибки производителя;
ACPI.BIN
низкоуровневые компоненты ACPI (расширенного управления питанием, отвечающего за усыпление/пробуждение устройств);
PnP.BIN
низкоуровневые компоненты PnP-менеджера, распределяющие системные ресурсы между устройствами и предоставляющие операционной системе сведения об аппаратной конфигурации;
CALL-BACK
прочие микропрограммы, вызываемые операционной системой по мере необходимости;
При обновлении прошивки чаще всего перезаписывается лишь MAIN-BLOCK, включающий в себя BIOS.ROM, xxxEXT.ROM, CPUCODE.BIN, ACPI.BIN, PnP.BIN и CALL-BACK модули, или даже небольшая его часть, например, только ACPI.BIN, как наиболее глючный из всех. BOOT-BLOCK при этом не затрагивается, что даёт возможность запустить машину при неудачной прошивке.
Возьмите за правило: Не перешивать исправный бут-блок при прошивке!
ОС не используют BIOS в операциях обмена и весь ввод/вывод гонят напрямую через порты и DMA. BIOS лишь конфигурирует устройства, задавая их начальные параметры и режимы работы. Таким образом, непосредственного влияния на производительность системы - BIOS не оказывает! NT вообще не отображает код BIOS'а на свое адресное пространство, а XP отображает лишь потому, что современные BIOS'ы содержат низкоуровневые компоненты PnP/ACPI-менеджеров, которые виновны во многих глюках и критических ошибках.
Кстати, об ошибках... Столкнувшись с конфликтом оборудования (или BSOD), не торопитесь сваливать вину на BIOS. В подавляющем большинстве случаев он здесь ни при чём. Основной источник ошибок - программное обеспечение сторонних производителей. Попробовать перешить BIOS, конечно-же можно, но скорей-всего это не исправит ситуацию.
Ошибки проектирования BIOS, могут стать источником следующих голубых экранов смерти (BSOD):
********************************************************
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
********************************************************
Аналогичные экраны вызываются неполадками железа, сбоями памяти, дефектными секторами, чрезмерным разгоном, некорректно работающими драйверами и т.д. Обвиняйте BIOS только тогда, когда эти BSOD'ы стабильно появляются даже на свежеустановленной системе с заведомо исправным железом.
Что даёт обновление
Правила этики обязывают прилагать к каждой версии прошивки сопроводительное описание, объясняющее - чем она отличается от предыдущей. А если описания нет? Вот основные категории проблем, которые можно решить обновлением BIOS. Таких моментов всего три:
- Поддержка новых устройств (процессоров, модулей оперативной памяти, накопителей);
- Разблокирование ранее недоступных режимов работы, тактовых частот и таймингов;
- Устранение конфликтов программно-аппаратного обеспечения;
Устройств, действительно нуждающихся в обновлённой версии BIOS, всего два - это проц и ОЗУ.
Чтобы процессор "раскочегарился", он должен быть соответствующим образом сконфигурирован, что осуществляется как аппаратно, так и программно. Встретив незнакомый процессор, BIOS может либо вообще отказаться от его запуска, либо не в полной мере реализовать его возможности (например, технологию Hyper-Threading).
BIOS также отвечает за определение типа установленных модулей памяти и конфигурирования её контроллёра. Помимо ёмкости, модули памяти характеризуются многими служебными параметрами (например, длиной DRAM-страницы), без учета которых контроллер попросту не запустится или будет работать со сбоями. Поэтому если вы воткнули в маму заведомо исправный DIMM, а система его "не видит", видит только половину или работает с ним на пониженной тактовой частоте, то проверьте совместимость и если всё ОК - то пробуйте обновить прошивку BIOS.
Не следует забывать, что BIOS - это всего лишь программа и после обновления прошивки новых контроллёров на материнке не вырастет и её аппаратные возможности останутся прежними со всеми свойственными им ограничениями!
Софт для прошивки
Как показала практика, для обновления FIRMWARE лучше использовать утилиты производителя, а весь процесс осуществлять из-под DOS. Комплект утилит (для любых типов биосов) можно найти на сайте http://www.rom.by или сайтах производителей.
Необходимо помнить, что методы управления напряжением программирования, способы разрешения записи во FLASH, особенности затенения RAM, алгоритмы запрещения кэширования BIOS, у всех чипсетов сильно НЕодинаковые! Например, встречались случаи, когда некоторые производители (Intel, ASUS) вносили в BIOS множество изменений, и в результате чего даже "родные" утилиты переставали с ними работать.
Сейчас рынок всё-больше завоёвывают наши друзья-китайцы, которые модифицируют биосы до такой степени, что с ними перестают работать даже родные утилиты от производителей. На каком форуме не глянь, везде "Ищу BIOS на материнку! Как прошить BIOS!" и т.п.
Встречались гибриды, которые всосали в себя всё лучшее и от AMI, и от AWARD'a и от вообще всех-возможных производителей.. Для таких случаев существуют прошивальщики, поддерживающие практически все известные типы BIOS'ов (конечно если это не биос энтузиаста-одиночки).
Одним из таких прошивальщиков является знаменитый UNIFLASH, но хотелось бы сказать пару-слов не о нём, а о его "старшем брате" FLASHROM (http://www.flashrom.org/)
Особенности программы:
284 семейств чипов flash ROM а также их варианты.
173 поддерживаемых чипсетов
306 поддерживаемых материнских плат
Parallel LPC/FWH и SPI интерфейсы
Специальный код включения прошивки для нестандартных материнских плат
Не нужны загрузочные дискеты, CD-ROM или флешки
Не нужна клавиатура или монитор, просто прошивайтесь через SSH
Горячая перепрошивка (хот-свап)
Поддержка Linux/DOS
Проверяется читабельность чипа перед записью
Поддержка эмуляции SPI-флешек
Назначение ключей программы можно просмотреть по команде "flashrom --help", поддерживаемые устройства и чипы - командой "flashrom -L" (которая выведет пятиметровую портянку, поэтому лучше перенаправлять вывод в файл):
flashrom -L > support.txt
Если в списке FLASHROM нет Вашего устройства, то могу предположить, что Вы обладатель уникального BIOS'a и прошивать его не стОит - место ему в музее!
Горе-прошивальщику, посвящается!
Представим ситуацию, когда наша попытка прошить биос потерпела фиаско! Чё делать дальше, как быть? Не выбрасывать-же материнку в топку.. Может в минуты отчаяния, кто-нибудь найдёт для себя чё полезное в этом посте..
Таким образом, прошивка состоит из двух частей - вышеупомянутого бут-блока и основного кода (SYSTEM BLOCK). Бут-блок занимает последнии 64Kb в микросхеме памяти и содержит инструкции для того, чтобы инициализировать минимум критически-необходимых устройств, таких как проц, память и дисковод гибких дисков.
Область BOOTBLOCK в микросхеме имеет атрибут "только для чтения" и может быть перезаписана при помощи флэш-утилит только с использованием специальных ключей. Данная область присутствует только у тех BIOS, которые имеют размер 256 и более килобайт. Она позволяет восстановить BIOS, поврежденный в процессе его обновления.
Процедуру прошивки BIOS (работы программы - прошивальщика) можно условно разделить на несколько этапов:
- Идентификация чипа (размер и напряжение программирования)
- Идентификация чипсета и типа материнской платы
- Проверка контрольной суммы новой прошивки
- Стирание (00h) основной области чипа. BOOTBLOCK при этом не затрагивается
- Перезапись основной области новым кодом BIOS
- Загрузка в переменные BIOS значений по умолчанию
- Перезагрузка компьютера.
Если сбой происходит в процессе первых 3-х этапов, то прошивальщик может выдать сообщение об ошибке и завершить работу, но это не приведет к порче BIOS. Если-же сбой произойдет на 4-м или 5-м этапах, то информация в системной области BIOS будет испорчена и компьютер не сможет нормально запускаться. При включении, система предпримет попытку загрузки с системной дискеты, чтобы попытаться восстановить BIOS.
Есть 4 реальных метода восстановления испорченного биос:
- Использование BOOTBLOCK для перепрограммирования BIOS
- Использование метода "Горячей замены"
- Прошивка микросхемы на программаторе
- Покупка новой микросхемы с требуемой прошивкой
Здесь мы рассмотрим первые два способа, и начнём с AMI BOOTBLOCK.
Во время загрузки компьютеров, имеющих поврежденный AMI-BIOS (но исправный бут-блок) на экране ничего не отображается, однако индикатор на дисководе (FDD) будет зажигаться и система будет пытаться считать диск. Процедура восстановления из BOOTBLOCK будет предпринимать попытки отыскать на дискете файл с названием AMIBOOT.ROM, и если такой файл будет найден, то он будет записан в системную область BIOS.
Таким образом, для восстановления поврежденного AMI-BIOS надо сделать следующее:
- Отформатируйте дискету 1.44 мб / флэшку
- Скопируйте на неё прошивку BIOS
- Переименуйте этот файл в AMIBOOT.ROM
- Включите компьютер и вставьте подготовленную дискету в дисковод A: / флэшку
Восстановление AWARD BOOTBLOCK
В случае с AWARD BIOS процедура похожа, но есть отличия. Вы должны будете подготовить рабочую дискету с прошивкой BIOS в формате *.BIN, записать на дискету программу - прошивальщик и файл AUTOEXEC.BAT. AWARD BOOTBLOCK не может автоматически восстановить системную область BIOS, поэтому в файл AUTOEXEC.BAT будет необходимо записать команды перепрошивки BIOS. Система запустит этот BAT-файл и таким образом перепрошьёт системную область BIOS.
Процедура восстановления выглядит так:
- Создайте загрузочную дискету / флэшку
- Скопируйте на неё файл BIOS и программу-прошивальщик
- Создайте файл AUTOEXEC.BAT (AWDFLASH BIOSFILE.BIN /py)
- Вставьте дискету в дисковод и включите компьютер
Восстановление методом HOT-SWAP
Ну и на дессерт, остаётся безотказный метод хот-свап! Этим методом можно прошить буквально любой-убитый BIOS.
Он описан в самом начале темы. Одним из распространённых заблуждений является то, что для хот-свапа нужна точно такая-же материнка и с таким-же чипсетом. Бред!!! Чипсет и материнка здесь ни причём. Одно ограничение - точно такой-же чип!
При прошивки этим методом нужно быть предельно осторожным и внимательным, т.к. вся операция проводится под напряжение и в рабочем состоянии материнской платы. К примеру, если при замене чипа у Вас от напряжения и волнения задрожат руки, то можно выронить чип с рук, который замкнёт что-нибудь на материнке. Здесь уместен пятиминутный танец с бубном, для приобретения равновесия духа!
Программный комплекс
Прошивочный комплекс представляет собой радиотехническое устройство, при помощи которого программируются микросхемы памяти, его часто называют программатор. Частенько, это последняя надежда на восстановление убитого напрочь кода биос.
То, что в простонародье называется «флешкой BIOS», на формальном языке звучит как "электрически стираемое перепрограммируемое ПЗУ" (EEPROM). Из чего следует, что флэшка, содержащая прошивку BIOS на материнке, и USB-брелок, что лежит у тебя в кармане – по сути одно и то же! Вот только "материночные" флэшки заметно медленнее, имеют меньший объём и редко могут похвастаться количеством циклов перезаписи. Ну и способ связи с внешним миром (интерфейс), у них свой - специфичный.
Существует 5 основных интерфейсов подключения флэшек к системной логике:
- PP (Parallel Programming). Корпус DIP-32
Древний интерфейс. Шина адреса и шина данных разделены, поэтому ножек много.
- LPC (Low Pin Count). Корпус PLCC-32
Стандарт предусматривал поддержку флэшек ёмкостью до 4Gb, и много других "вкусностей", вроде большей скорости и синхронной передачи данных.
- FWH (FirmWare Hub). Корпус PLCC-32
На жаргоне, такие флэшки называются «хабовыми». Электрически они полностью совместимы с LPC, а вот протокол передачи оказался другим. Протокол изменили для того, чтобы обеспечить возможность установки нескольких устройств, на одну и ту же шину.
Кроме того, протокол FWH предусматривал поддержку до 16-ти параллельно включенных флэшек. Сия возможность обеспечивалась наличием специального сигнала идентификации чипа. Производители флэш-памяти быстро отреагировали на разнообразие интерфейсов и начали выпускать универсальные чипы, которые могут работать в обоих режимах: как LPC, так и FWH. Большинство флэшек, устанавливаемых на современных материнских платах, как раз таковыми и являются.
- SPI (Serial Peripherial Interface). Корпус DIP-8, SOP-8
Последовательный периферийный интерфейс. Для нас они интересны тем, что кол-во выводов, необходимых для связи флэшки с чипсетом, сократилось до восьми (4 для стандарта, 2 служебных и питание с землёй). Так как интерфейс SPI имеет возможность установки нескольких чипов на одну шину, это позволило свести кол-во сигнальных линий к минимуму, и упростить разводку платы.
- i2C (Inter-Integrated Circuit). Корпус DIP-8, SOP-8
Достаточно старый интерфейс (80-е годы). Основное его назначение – соединение низкоскоростных периферийных компонентов. Такие флэшки можно встретить на модулях памяти, их в просторечии называют SPD-шками (Serial Presence Detect). В них храняться дэфолтные значения памяти.
Флэшки наименьшего объёма (встречающиеся на материнках и периферии) – последовательные 93С46 и их сородичи (SOP-8). Эти флэшки вездесущи: сетевухи хранят в них MAC-адреса, ноуты – свои серийники и коды конфигураций, звуковухи и FireWire-контроллёры – свои Vendor_ID и т.д..
Исходя из вышесказанного можно сделать вывод, что для программирования различных типов флэшек, нужен универсальный программатор, который "понимал-бы" все перечисленные интерфейсы! Задача, нужно сказать, не простая и легче приобрести готовый универсальный программатор, чем собирать его в домашних условиях.
Программирование FLASH-микросхем.
Чтоб запрограммировать флэш-память, нужно знать его структуру. Предлагаю окунуться в этот интересный мир.
Отличительной особенностью флэш является то, что она имеет (непосредственно на кристале) встроенный "программатор" - автомат стирания и записи (АСЗ). Все операции АСЗ проводит самостоятельно и незаметно от пользователя, которому остаётся лишь с помощью соответствующей команды сообщить адрес ячейки и код, который следует в неё записать.
Как мы уже знаем, 32-пиновые хабовые флэшки, имеют 18 линий адреса, и 8 линий данных. Кроме шин адреса и данных, к микросхемам подводят три управляющих сигнала: выбор кристала CE#, включение выхода OE# и разрешение записи WE#. Последний - только в том случае, если микросхему необходимо программировать.
Во многих современных микросхемах память разбита на блоки, и стирание данных в одном из них не влияет на хранящиеся в других. Свойства некоторых блоков могут отличаться. Например, для BOOT-блока предусмотрена аппартная защита от стирания и записи. Её включают, подав соответствующий лог.уровень на специальный вывод микросхемы.
Обычно микросхемы выпускают в двух вариантах:
- с индексом "B" (bottom). Здесь блоки расположены начиная с нулевого адреса
- с индексом "T" (top). Блоки расположены в обратном порядке
Любая Flash-микросхема способна сообщить свой тип устройству, в которое она установлена, что позволяет автоматически выбирать нужные алгоритмы записи и стирания данных. Для вкл/выкл режима считывания идентификаторов предусмотрены соответствующие команды. Подав команду по адресу 00h читают ID изготовителя, а по адресу 01h - ID устройства. Команды идентификации указываются в даташите микросхемы.
Перейти в режим чтения идентификатора можно и без команды, подав на адресный вход А9 напряжение +12v. Обычно этот способ используют универсальные программаторы. АСЗ большинства Flash-микросхем воспринимают команды по стандарту JEDEC, хотя есть и исключения (свою систему команд применяет фирма INTEL).
Если говорить об утилитах обновления BIOS, то они разрабатываются для каждого типа системных плат с учётом особенности подключения микросхем к системным шинам. Поэтому попытки воспользоваться утилитой, предназначенной для платы одного типа, чтобы обновить BIOS другой, зачастую приводит к полному отказу компьютера.
Сделай сам! ..или кружок "Умелые ручки".
Тема программирования флэш настолько обширна, что придётся быть предельно кратким.
Начнём со SPI-флэшек, которые программируются сходу! Здесь нет ничего трудного и прошить их сможет даже начинающий пользователь. Зато сколько гордости после успешной операции...
Этот тип флэшек установлен в большинстве современных ноутбуков и стационарных компьютерах. Чип имеет 8 выводов и последовательный интерфейс подключения к системной логике. Для прошивки нам потребуется программатор и софт к нему.
Схема элементарного программатора SPI-флэшек приведена на рисунке, софт - FLASHROM:
С помощью программы 'Flashrom' и LPT-порта компьютера, Вы сможете создать хороший и простой программатор. Этот программатор представляет собой простой кабель от принтера. Следует обратить внимание, что эта схема не имеет промежуточного буфера (гальванической развязки по отношению к LPT-порту), поэтому во избежание выхода из строя порта компьютера, подключать/отключать кабель следует при ВЫКЛюченном компьютере и выключенном питании на плате, где установлен чип. Длина соединительного кабеля не должна превышать пол-метра.
|