Расширение bios как средство замыкания программной среды
Внимание! Информация, приведенная в этой статье, носит ознакомительный характер. Редакция журнала «Игромания» не несет ответственности в случае возникновения необратимых последствий и выхода из строя оборудования после повторения описанных ниже действий.
Такое вот получилось суровое вступление. На самом деле речь сегодня пойдет всего-навсего о BIOS материнской платы и о том, как его можно обновить. Вы узнаете все нюансы данного таинства, ознакомитесь с возможными ошибками (лучше учиться на чужих) и узнаете, зачем нужно менять прошивку.
Микропрограмма материнской платы BIOS (Basic Input/Output System — базовая система ввода-вывода) хранится в ПЗУ (в новых платах используется flash-память) и дает возможность изменять и сохранять настройки компьютера.
BIOS нужен для взаимодействия компьютера с операционной системой. Настройки отдельных узлов ПК (в основном это интегрированные в материнскую плату устройства) изменяются именно в BIOS. Эта программа есть не только в материнской плате, но и в видеокарте, жестком диске, оптическом приводе и т.д. BIOS разных устройств выполняют разные задачи. Например, в BIOS видеокарты прописаны тактовые частоты памяти, графического ядра, количество действующих конвейеров и так далее.
Чем может быть вызвана принудительная смена BIOS в материнской плате? Причин не так и много. Обладатели старых материнских плат нередко сталкиваются с ситуацией, когда прошивка просто не содержит определенных настроек или не поддерживает новые процессоры и другие устройства. Устаревшие материнские платы часто могут быть несовместимы с жесткими дисками большой емкости или не поддерживают загрузку с оптического привода.
В случае с платформой Socket A ситуация следующая. На многих материнских платах невозможно было запустить новые процессоры серии Sempron. Проблема решалась в одну минуту обновлением BIOS. После этого плата без проблем опознавала «камень» и рапортовала при загрузке о его реальной частоте и рейтинге производительности. Оверклокерам же придутся по душе прошивки, открывающие новые возможности для разгона процессора и памяти.
Разработчиками материнских плат предусмотрено немало способов перезаписи BIOS материнских плат. Прошивку практически любой платы можно заменить, загрузив с дискеты MS-DOS, а зачастую и через Windows XP. Такой способ менее распространен по той причине, что в Windows XP отсутствует «прямой» доступ к аппаратному обеспечению.
Некоторые производители предлагают альтернативные способы. К примеру, прошивку многих моделей материнских плат от EPoX, ASUS и GIGABYTE можно сделать перед загрузкой системы. В таком случае понадобится лишь дискета с новой версией BIOS.
В случае проблем с новой версией прошивки и для борьбы с вирусами на плату иногда устанавливают два чипа BIOS. Такой подход позволяет вернуть старую версию прошивки в случае неудачного обновления или вирусной атаки.
В BIOS сосредоточены все настройки системы.
По каким-то причинам вы решили сменить/обновить текущую прошивку на более свежую и/или более стабильную версию. Проделать эту операцию можно одним из нескольких доступных способов. Их количество зависит от конкретной модели материнской платы. Рассмотрим самые распространенные из них.
Обновление BIOS через DOS
Самым надежным и проверенным временем способом является прошивка через DOS. Для этого понадобятся:
— Специальное программное обеспечение для обновления BIOS. Если в комплекте поставки с материнской платой таких утилит не было, придется загрузить их с сайта производителя. Как правило, это awdflash.exe.
— Дискета, отформатированная в файловой системе FAT, или же компакт-диск (в случае, если у вас есть навыки создания мультизагрузочных дисков).
— Желателен источник бесперебойного питания. Бывает так, что во время обновления прошивки может произойти перепад напряжения в сети (причиной тому может быть что угодно: ремонт у соседей, проблемы электросети и т. д.) — от этого никто не застрахован. В таком случае компьютер перезагрузится и после этого материнскую плату будет очень тяжело оживить.
Технологии типа DualBIOS позволяют избежать многих неприятных моментов.
Пример обновления BIOS через DOS
Сначала подготовим загрузочную дискету. На ней должны быть системные файлы, autoexec.bat, awdflash.exe и новая версия BIOS. awdflash.exe — программа для обновления прошивки. Загрузочный файл autoexec.bat должен содержать следующие строки:
— AWDFLASH [filename1] [filename2]
где filename1 и filename2 — имя новой прошивки (имя файла) и старой (не должно совпадать с именем файла с новой прошивкой) соответственно. Есть и другие возможности работы с awdflash.exe. Для их просмотра следует запустить программу с ключом «/?».
Загрузившись с подготовленной дискеты или загрузочного компакт-диска, вам остается лишь набрать слово autoexec.bat. Все, дело сделано.
Обновление BIOS через Windows
Каждая программа от производителей материнской платы для обновления BIOS через Windows имеет уникальный интерфейс со своими особенностями и нюансами. Поэтому мы не сможем вам детально рассказать о перепрошивке этим способом — вариантов много. Рекомендуем внимательно изучить руководство пользователя, если оно не сохранилось — скачайте электронный вариант с сайта производителя.
Мы ограничимся общими рекомендациями по обновлению BIOS в среде Windows:
— перезагрузите компьютер в режим защиты от сбоев (во время загрузки нажмите F8 и выберите пункт «Безопасный режим» или Safe Mode);
— выгрузите все ненужные программы из памяти и трея (оставить только системные процессы);
— по возможности используйте источник бесперебойного питания.
Теперь можно начинать. В большинстве случаев интерфейс программы для прошивки BIOS интуитивно понятен, так что проблем возникнуть не должно.
Во многих случаях BIOS можно обновить через Windows с помощью фирменных утилит.
Самая серьезная (и самая распространенная) проблема, с которой вы можете столкнуться, — это зависание или отключение питания ПК во время обновления BIOS. Специально для этих случаев мы и предложили сделать резервную копию старой версии прошивки (файл filename2). Впоследствии ею можно будет воспользоваться и восстановить BIOS. Еще могут возникнуть проблемы, если вы использовали BIOS от другой платы или же нестабильную/неудачную версию. И здесь снова очень пригодится старая прошивка. Но если компьютер не включился после обновления, то кроме сервисного центра вам уже никто не поможет.
Возможна еще одна, менее распространенная проблема, даже экзотичная. Некоторые версии BIOS автоматически устанавливают свой пароль и таким образом блокируют доступ к настройкам. Для исправления этого воспользуйтесь одним из стандартных паролей.
С 1998 года компания Intel начала продвигать технологию EFI (Extensible Firmware Interface) — своего рода промежуточный интерфейс между BIOS материнской платы и операционной системой. EFI состоит из блоков данных, содержащих информацию об аппаратной части компьютера. Информация сообщается загрузчику операционной системы, и в зависимости от нее ОС вызывает или блокирует определенные службы. Спецификация EFI будет использоваться на следующих поколениях архитектур IA-32 и Itanium. Если все пойдет по плану Intel, то EFI будет активно вытеснять с главных ролей BIOS, чему вряд ли обрадуются компании Award и AMI.
Для защиты от несанкционированного входа в персональную компьютерную систему могут использоваться как общесистемные, так и специализированные программные средства защиты.
К общесистемным средствам относится утилита Setup , входящая и состав BIOS и предназначенная для настроек аппаратных параметров компьютера. Для реализации рассматриваемого вида защиты необходимо с помощью данной утилиты установить следующие параметры загрузки компьютера:
порядок загрузки операционной системы (ОС), задающий первичную загрузку с жесткого диска (устройство С:);
запрос пароля перед загрузкой операционной системы. Установка первичной загрузки с жесткого диска необходима для предотвращения возможности загрузки ОС с дискеты или компакт-диска, так как некоторые устаревшие версии BIOS позволяют осуществить загрузку с дискеты без запроса пароля. Если используемая версия BIOS при установленном пароле загрузки обеспечивает запрос пароля и при загрузке с дискеты, что, как правило, реализовано в современных версиях базовой системы ввода-вывода, то изменять порядок загрузки для защиты от несанкционированного входа в компьютерную систему нет необходимости.
Запуск утилиты Setup выполняется, как правило, нажатиями клавиши Del после активизации процесса загрузки операционной мы, т. е. после включения компьютера или перезапуска после нажатия кнопки Reset в процессе сеанса работы пользователя.
После запуска утилиты необходимо войти в пункт меню « BIOS Features Setup » (« Advanced CMOS Setup ») и с помощью клавиш PgUp и PgDn установить следующие переключатели: «Boot Sequence» («System Boot Up Sequence») - в положение « С , А » или « С , CDROM, A»; «Security Option» («Password Checking Options») - а положение «System».
Далее следует задать пароль входа в систему с помощью пункта меню « Password Setting » (« Change Password »), а потом сохранить сделанные изменения и выйти из утилиты с помощью пункта меню « Save & Exit Setup ».
После указанных действий загрузка компьютера будет выполняться только после ввода правильного пароля.
При необходимости изменения пароля следует активизировать утилиту Setup , изменить пароль с помощью пункта меню « Password Setting » (« Change Password »), а потом сохранить сделанные изменения и выйти из утилиты с помощью пункта меню « Save & Exit Setup »
Недостатком реализации защиты от несанкционированной загрузки компьютера с помощью утилиты BIOS Setup является то, что установленная с помощью данной утилиты защита может быть преодолена путем принудительного обнуления содержимого энергонезависимой памяти компьютера ( CMOS -памяти) после вскрытия его корпуса.
Наиболее надежное решение проблемы ограничения физического доступа к компьютеру – использование аппаратных средств защиты информации от НСД, выполняющихся до загрузки операционной системы. Средства защиты данной категории называются «электронными замками».
Теоретически, любое программное средство контроля доступа может подвергнуться воздействию злоумышленника с целью искажения алгоритма работы такого средства и последующего получения доступа к системе. Поступить подобным образом с аппаратным средством защиты практически невозможно: все действия по контролю доступа пользователей электронный замок выполняет в собственной доверенной программной среде, которая не подвержена внешним воздействиям.
На подготовительном этапе использования электронного замка выполняется его установка и настройка. Настройка включает в себя следующие действия, обычно выполняемые ответственным лицом – Администратором по безопасности:
- Создание списка пользователей, которым разрешен доступ на защищаемый компьютер. Для каждого пользователя формируется ключевой носитель (в зависимости от поддерживаемых конкретным замком интерфейсов – дискета, электронная таблетка iButton или смарт-карта), по которому будет производиться аутентификация пользователя при входе. Список пользователей сохраняется в энергонезависимой памяти замка.
- Формирование списка файлов, целостность которых контролируется замком перед загрузкой операционной системы компьютера. Контролю подлежат важные файлы операционной системы, например, следующие:
- системные библиотеки Windows;
- исполняемые модули используемых приложений;
- шаблоны документов Microsoft Word и т. д.
Контроль целостности файлов представляет собой вычисление их эталонной контрольной суммы, например, хэширование по алгоритму ГОСТ Р 34.11-94, сохранение вычисленных значений в энергонезависимой памяти замка и последующее вычисление реальных контрольных сумм файлов и сравнение с эталонными.
В штатном режиме работы электронный замок получает управление от BIOS защищаемого компьютера после включения последнего. На этом этапе и выполняются все действия по контролю доступа на компьютер (см. упрощенную схему алгоритма н ), а именно:
- Замок запрашивает у пользователя носитель с ключевой информацией, необходимой для его аутентификации. Если ключевая информация требуемого формата не предъявляется или если пользователь, идентифицируемый по предъявленной информации, не входит в список пользователей защищаемого компьютера, замок блокирует загрузку компьютера.
- Если аутентификация пользователя прошла успешно, замок рассчитывает контрольные суммы файлов, содержащихся в списке контролируемых, и сравнивает полученные контрольные суммы с эталонными. В случае, если нарушена целостность хотя бы одного файла из списка, загрузка компьютера блокируется. Для возможности дальнейшей работы на данном компьютере необходимо, чтобы проблема была разрешена Администратором, который должен выяснить причину изменения контролируемого файла и, в зависимости от ситуации, предпринять одно из следующих действий, позволяющих дальнейшую работу с защищаемым компьютером:
- пересчитать эталонную контрольную сумму для данного файла, т.е. зафиксировать измененный файл;
- восстановить исходный файл;
- удалить файл из списка контролируемых.
- Если все проверки пройдены успешно, замок возвращает управление компьютеру для загрузки штатной операционной системы.
Поскольку описанные выше действия выполняются до загрузки операционной системы компьютера, замок обычно загружает собственную операционную систему (находящуюся в его энергонезависимой памяти – обычно это MS-DOS или аналогичная ОС, не предъявляющая больших требований к ресурсам), в которой выполняются аутентификация пользователей и проверка целостности файлов. В этом есть смысл и с точки зрения безопасности – собственная операционная система замка не подвержена каким-либо внешним воздействиям, что не дает возможности злоумышленнику повлиять на описанные выше контролирующие процессы.
Информация о входах пользователей на компьютер, а также о попытках несанкционированного доступа сохраняется в журнале, который располагается в энергонезависимой памяти замка. Журнал может быть просмотрен Администратором.
При использовании электронных замков существует ряд проблем, в частности:
Программирование расширения ROM BIOS персонального компьютера
В настоящее время в персональных компьютерах (ПК) широко применяются дополнительные PCI и PCI-Express устройства, имеющие ПЗУ с расширением ROM BIOS (далее PCI ROM BIOS). Расширение PCI ROM BIOS относится к т.н. firmware, т.е. к программному обеспечению, встроенному в «железо». Расширение PCI ROM BIOS содержит программные компоненты, не входящие по разным причинам в системный BIOS. Как правило, это код инициализации периферийного устройства, выполняемой до загрузки операционной системы (далее ОС). Кроме того, в PCI ROM BIOS может содержаться код поддержки функций устройства для некоторых ОС, если это невозможно обеспечить стандартным образом с помощью драйвера. Функции, выполняемые расширением PCI ROM BIOS, зависят от конкретного физического устройства, и их описание не является темой статьи. Ниже рассмотрена методика разработки расширения PCI ROM BIOS, упрощающая процесс разработки и уменьшающая количество потенциальных ошибок. Предлагаемая методика актуальна как для PCI-устройств, так и для устройств PCI-Express, т.к. их программная модель конфигурации и расширения ROM BIOS совместима с программной моделью PCI-устройств.
Расширение PCI ROM BIOS: структура и особенности
Расширение PCI ROM BIOS размещается в ПЗУ на плате устройства. В общем случае ПЗУ устройства может одновременно содержать несколько кодовых фрагментов для процессоров с различной архитектурой, расположенных последовательно и выровненных по границе кратной 512 байт. Программный модуль расширения PCI ROM BIOS включает в себя заголовок ПЗУ, структуру данных PCI-устройства, модуль инициализации и модуль рабочего кода. Заголовок ПЗУ служит идентификатором при поиске расширений PCI ROM BIOS. Структура данных PCI-устройства играет роль дополнительного идентификатора firmware конкретного устройства. Модуль инициализации выполняет первичную настройку параметров устройства. А модуль рабочего кода служит своего рода программным драйвером устройства.
Модуль расширения PCI ROM BIOS может занимать весь объём ПЗУ, но чаще всего используется только его часть. Байты контрольной суммы представляют собой контрольную сумму кода соответствующего сегмента от начала ПЗУ. Структура расширения PCI ROM BIOS PC/AT-совместимых ПК (т.е. для одного типа процессора) приведена на рисунке 1 и подробно описана в спецификации шины PCI [1].
Рисунок.1 - Структура расширения PCI ROM BIOS PC-совместимого ПК
Расширение PCI ROM BIOS начинается с заголовка, структура которого приведена ниже в таблице 1. Заголовок ПЗУ расширения PCI ROM BIOS, в отличие от заголовка ROM BIOS ISA-устройства, содержит указатель на структуру данных PCI-устройства. Эта структура считывается программой POST, входящей в системный BIOS. Структура данных PCI-устройства располагается в пределах 64 Кбайт от точки входа в программу расширения PCI ROM BIOS и имеет вид, приведённый в таблице 2.
Смещение | Длина, байт | Значение | Назначение |
---|---|---|---|
0h | 1 | 55h | Сигнатура ПЗУ расширения ROM BIOS |
1h | 1 | AAh | Сигнатура ПЗУ расширения ROM BIOS |
2h | 1 | xx | Размер модуля инициализации, кратный 512 байт |
3h | 3 | xx | Точка входа |
6h | 18 | xx | Резерв |
18h | 2 | xx | Указатель на структуру данных PCI-устройства |
Смещение | Длина, байт | Назначение |
---|---|---|
0h | 4 | Сигнатура (строка “PCIR”) |
4h | 2 | Идентификатор производителя |
6h | 2 | Идентификатор устройства |
8h | 2 | Резерв |
Ah | 2 | Длина структуры данных PCI-устройства |
Ch | 1 | Версия структуры данных PCI-устройства |
Dh | 3 | Код класса PCI-устройства |
10h | 2 | Длина кодового сегмента |
12h | 2 | Версия кода расширения PCI ROM BIOS |
14h | 1 | Тип кода |
15h | 1 | Индикатор |
16h | 2 | Резерв |
Каждое PCI-устройство имеет программно доступное пространство конфигурации, которое определяет используемые устройством ресурсы памяти, порты ввода/вывода и особенности протокола шины PCI/PCI-Expess данного устройства. Некоторые поля структуры данных PCI-устройства идентичны значениям пространства конфигурации PCI-устройства.
Идентификатор производителя (Vendor Identification) должен совпадать с одноимённым полем в пространстве конфигурации PCI-устройства.
Идентификатор устройства (Device Identification) должен совпадать с одноимённым полем в пространстве конфигурации PCI-устройства.
Код класса (Class Code) должен совпадать с одноимённым полем в пространстве конфигурации PCI-устройства.
Тип кода (Code Type) определяет тип процессора, для которого предназначен код данного расширения BIOS:
- 0 – Intel x86, PC-AT совместимый.
- 1 – стандарт Open Firmware.
- 2 – PA RISC процессоры фирмы Hewlett-Packard.
- 3 ( 0FFh – резерв.
Длина кодового сегмента (Image Length) равна сумме длин заголовка, структуры данных PCI-устройства, модуля инициализации и модуля рабочего кода, и определяется в блоках по 512 байт.
Индикатор (Indicator) определяет, является ли данный кодовый сегмент последним. Если бит 7 равен единице («1»), то это последний кодовый сегмент. Биты 0-6 зарезервированы.
Длина структуры данных PCI-устройства (PCI Data Structure Length) определяет длину этой структуры.
Расширение PCI ROM BIOS начинает функционировать при запуске или перезагрузке ПК, еще до загрузки ОС. Происходит это следующим образом. При запуске ПК программа POST (Power On Self Test), входящая в состав системного BIOS, выполняет поиск и проверку ресурсов материнской платы, поиск периферийных устройств и распределение системных ресурсов (портов ввода/вывода, памяти, прерываний) между ними [2]. Затем программа POST выполняет поиск и активизацию расширений PCI ROM BIOS периферийных устройств:
- Сканирование ОЗУ и поиск с шагом 512 байт сигнатуры расширения ROM BIOS, равной 0AA55h.
- Чтение заголовка расширения ROM BIOS и определение его длины.
- Вычисление и проверка контрольной суммы расширения PCI ROM BIOS.
- Чтение указателя на «структуру данных» PCI-устройства.
- Чтение «структуры данных» PCI-устройства и сравнение значений идентификатора производителя, идентификатора устройства и кода класса с одноимёнными полями в пространстве конфигурации данного PCI-устройства.
- Проверка типа кода на соответствие архитектуре используемого процессора.
- При успешном выполнении двух предыдущих пунктов загрузка расширения PCI ROM BIOS из ПЗУ в ОЗУ ПК, обычно в область адресов 0С0000h – 0DFFFFh.
- Передача управления процессором на точку входа программы расширения PCI ROM BIOS.
- Ожидание возврата управления.
Расширение PCI ROM BIOS: методика разработки
Для программирования расширения PCI ROM BIOS предпочтительней использовать ассемблер. Все языковые инструменты имеют как положительные, так и отрицательные стороны. Однако при решении поставленной задачи ассемблер имеет несколько преимуществ по сравнению с другими инструментами. Расширение PCI ROM BIOS имеет строго заданную структуру заголовка ПЗУ, которую удобнее всего реализовать с помощью ассемблера. Объём расширения PCI ROM BIOS сильно ограничен (максимум 128 Кбайт), что несколько затрудняет использование языков высокого уровня. Расширение PCI ROM BIOS предназначено для непосредственной работы с аппаратурой, т.е. для взаимодействия с регистрами, разрядами регистров и с прерываниями. В этом случае ассемблер наиболее удобен по сравнению с любыми языками высокого уровня.
В данном случае в качестве инструмента использовался Turbo Assembler (версия 3.1), входящий в состав пакета Borland C++ (версия 3.1) фирмы Borland. Этот продукт был популярен у отечественных программистов, и для него существует большое количество библиотек. Программировать и отлаживать расширение PCI ROM BIOS лучше всего либо в среде DOS, либо в среде Windows 95/98/Me в режиме командной строки, что упрощает непосредственное обращение к аппаратным ресурсам и использование прерываний системного BIOS. В Windows NT/2000/ХР таких возможностей у программиста нет. Кроме того, Turbo Debugger лучше функционирует в режиме командной строки, чем когда ОС работает в графическом режиме.
Расширения PCI ROM BIOS представляет собой bin-файл. Этот файл не является исполняемым файлом, что обусловлено его структурой отличной от исполняемого com- и exe-файла. Несмотря на его сходство с com-файлом, его нельзя получить простым переименованием com-файла потому, что все коды и данные com-файла начинаются со смещения 100h, в то время, как в bin-файле расширения PCI ROM BIOS коды и данные начинаются со смещения 0h. Более того, com-файл нельзя запустить под отладчиком и выполнить отладку, т.к. при сборке com-файла линкер исключает из него всю отладочную информацию. Поэтому для отладки программы требуется exe-файл.
Предлагается следующая технология программирования и отладки расширения PCI ROM BIOS. Сначала разрабатывается программа расширения PCI ROM BIOS (пусть файл исходного текста называется bios-exp.asm). Затем выполняется ее компиляция и сборка стандартного exe-файла. Командная строка для создания exe-файла должна иметь следующий вид:
Далее выполняется отладка программы, после чего производится небольшая модификация исходного текста и создание двоичного bin-файла, записываемого в ПЗУ. Командная строка имеет следующий вид:
При разработке программы расширения PCI ROM BIOS необходимо обратить внимание на следующие важные моменты.
Рекомендуется использовать единый исходный файл для получения exe- и bin-файла. Исполняемый exe-файл используется для отладки, а bin-файл записывается в ПЗУ. Эти файлы отличаются друг от друга не только форматом, но и функциональностью. Для получения двух различных файлов из одного исходного текста используется условная компиляция, что позволяет свести к минимуму синтаксические и функциональные ошибки, возникающие в процессе программирования.
Адресное пространство данных и кода в программе расширения PCI ROM BIO едино, поэтому необходимо использовать модель памяти « TINY ». При работе с пакетом Turbo Assembler желательно использовать режим « IDEAL » вместо стандартного режима « MASM ». Режим «IDEAL» позволяет более свободно обращаться со структурами данных, и его исходный текст более «читабелен», что уменьшает возможность появления синтаксических и функциональных ошибок в процессе программирования. Также рекомендуется использовать директиву « LOCALS », что позволяет использовать одинаковые названия меток, начинающихся с символов @@ в различных подпрограммах. Это значительно упрощает жизнь программиста при поиске имён меток.
Необходимо обратить внимание на точку входа в программу расширения PCI ROM BIOS. Это четвёртый элемент структуры заголовка ПЗУ, длина которого составляет 3 байта и представляет собой переход на код инициализации, с помощью команды JMP . Здесь кроется один подвох. Команда JMP может иметь длину от 2 до 5 байтов в зависимости от длины перехода и формируется ассемблером при компиляции исходного файла. При этом ассемблер пытается сократить исполняемый код, где только возможно. Даже прямое указание ассемблеру типа перехода NEAR для гарантированного получения трёхбайтной команды JMP не поможет, если адрес перехода лежит в пределах 128 байтов, что достаточно часто встречается. В тоже время длина команды JMP обязательно должна быть равна 3 байтам, иначе нарушится структура заголовка расширения PCI ROM BIOS, и, соответственно, нарушится указатель на структуру PCI-данных устройства. Решается эта проблема несколькими способами, из которых лучше использовать непосредственное резервирование данных:
Необходимо обратить внимание на инициализацию сегментных регистров DS, SS при старте программы. Даже при использовании модели памяти TINY в exe-файле значение сегмента данных отлично от значения кодового сегмента. Аналогично дело обстоит и со стековым сегментом. Поэтому в exe-файл нужно включить следующие команды:
В то же время в bin-файле (com-файле) значения сегментных регистров для кода, данных и стека должны совпадать, для чего необходимо выполнить следующие команды:
При использовании директив, автоматически выделяющих память под стек, Turbo Linker сообщает об ошибке « Fatal: cannot generate COM file: stack segment present ». Чтобы избежать этого, необходимо вручную выделить память для стекового сегмента. Тогда Turbo Linker сообщит об отсутствии стека « Warning: No stack », но сгенерирует двоичный файл. Память под стек должна выделяться в конце сегмента программы, причем в начале программы необходимо инициализировать указатель стека регистр SP:
Заголовок расширения PCI ROM BIOS должен содержать структуру данных PCI-устройства, значения определённых элементов которой должны совпадать со значениями одноимённых полей в пространстве конфигурации PCI-устройства. Это касается «Идентификатора производителя», «Идентификатора устройства» и «Кода класса».
Как правило, длина программы не кратна 512 байт. Поэтому созданную программу необходимо дополнить произвольными байтами до величины, кратной 512 байт, причем необязательно до полного объёма, используемого ПЗУ. Не запрограммированные байты ПЗУ имеют значения 0FFh и будут проигнорированы при сканировании программой POST.
Байт контрольной суммы подсчитывается путём сложения всех байтов программы с игнорированием знака переноса и дополнением полученной суммы до нуля. Размещается байт контрольной суммы не после последних байтов программы, как в работе [4], а после байтов, дополняющих программу до величины кратной блоку 512 байт. В противном случае контрольная сумма расширения PCI ROM BIOS будет неверной, и программа POST не передаст ему управление. Значение байта контрольной суммы можно вписать в исходный файл программы и повторно выполнить компиляцию, а можно с помощью любого HEX-редактора внести изменения в уже готовый двоичный файл.
Для корректного завершения работы exe-версии программы расширения PCI ROM BIOS необходимо выполнять стандартный возврат в DOS (даже если отладка производится в среде Windows 95/98/Me). Соответствующие строки кода выглядят следующим образом:
С другой стороны, после окончания инициализации программы расширения PCI ROM BIOS выполняется возврат управления процессором программе POST, что реализуется одной командой:
Существенной особенностью расширения PCI ROM BIOS является то, что оно выполняется не из ПЗУ устройства, а предварительно загружается в оперативную память ПК. Ранее в ISA-устройствах расширение ROM BIOS выполнялось непосредственно из ПЗУ периферийного устройства. Расширение PCI ROM BIOS, загруженное в ОЗУ, выполняет код инициализации. После инициализации данный код, как правило, не требуется и может быть выгружен из ОЗУ весь или частично. Далее управление процессором возвращается программе POST. Оставленный в ОЗУ модуль рабочего кода будет функционировать до перезагрузки/выключения ПК и выполнять роль драйвера PCI-устройства. Но, как правило, эту возможность не используют, предпочитая DOS/Windows-драйверы, полностью выгружая из ОЗУ код расширения PCI ROM BIOS. Полная выгрузка программы из памяти реализуется следующим образом:
Одновременно с передачей управления процессором программе расширения PCI ROM BIOS программа POST передаёт ей в регистре АХ координаты данного устройства на шине PCI, которые необходимо сохранить. В регистре АН передаётся номер шины PCI (Bus Number). В старших 5 битах регистра AL передаётся номер устройства PCI (Device Number), а в младших 3 битах регистра AL передаётся номер функции (Function Number) данного устройства. Передача этих параметров упрощает конфигурирование ПК при наличии нескольких шин PCI, нескольких одинаковых устройств PCI и/или многофункциональных устройств, размещённых на одной плате расширения. Эти координаты позволяют получить доступ к пространству конфигурации PCI-устройства, т.е. к его параметрам и, главное, к его регистрам «Базового адреса». Регистр базового адреса PCI-устройства определяет доступ ко всем внутренним ресурсам устройства, для инициализации которых собственно и предназначена программа расширения PCI ROM BIOS. В ISA-устройствах базовый адрес постоянный и задается с помощью джамперов. В PCI-устройствах базовый адрес переменный и задается программным способом (первично BIOS в соответствии с процедурой Plug’n’Play при включении компьютера).
Перед использованием функций PCI BIOS необходимо убедиться в его наличии. Подробное описание программных функций PCI BIOS приведено в документе [3].
Наконец, необходимо напомнить, что расширение PCI ROM BIOS выполняется в то время, когда не загружена ещё никакая ОС. В то же время очень велик соблазн использовать некоторые «привычные для программиста» прерывания и системные переменные. Необходимо (!) проверить, что они находятся под юрисдикцией BIOS, особенно это касается системного таймера.
Ниже приведен листинг шаблона программы расширения PCI ROM BIOS, суммирующий все особенности программирования, рассмотренные выше. Константа BIN_TYPE_FILE используется при условной компиляции. Если константа BIN_TYPE_FILE определена, то выполняется компиляция двоичного bin-файла расширения PCI ROM BIOS. В противном случае выполняется компиляция exe-файла, используемого для отладки программы.
Заключение
Практически единственной статьей на русском языке, описывающей основы функционирования расширения ROM BIOS и методику его программирования, является работа [4]. Также можно обнаружить почти полное повторение этой работы [5], датированное 2000 г. К сожалению, работа [4,5] касается ROM BIOS ISA-устройств, к тому же имеет несколько неточностей и не описывает особенностей расширения PCI ROM BIOS.
В конце 2007 г. из печати вышел перевод книги Д. Салихана [6] в которой, в числе прочих, рассмотрен вопрос программирования расширения PCI ROM BIOS. Для решения этой задачи Д. Салихан использует механизмы Plug’n’Play и IPL BIOS, а также точку входа для загрузки BEV (Bootstrap Entry Vector). В результате получается достаточно сложное решение. При этом используется операционная система Linux и соответствующие ей инструменты. Пока же большинству схемотехников, да и программистов, привычнее среда DOS/Windows. Тем не менее, книга Д. Салихана является хорошим источником информации и методик программирования.
BIOS (basic input/output system) — базовая система ввода-вывода — это встроенное в компьютер программное обеспечение, которое ему доступно без обращения к диску. На PC BIOS содержит код, необходимый для управления клавиатурой, видеокартой, дисками, портами и другими устройствами.
Обычно BIOS размещается в микросхеме ПЗУ (ROM), размещенной на материнской плате компьютера (поэтому этот чип часто называют ROM BIOS). Эта технология позволяет BIOS всегда быть доступным, несмотря на повреждения, например, дисковой системы. Это также позволяет компьютеру самостоятельно загружаться. Поскольку доступ к RAM (оперативной памяти) осуществляется значительно быстрее, чем к ROM, многие производители компьютеров создают системы таким образом, чтобы при включении компьютера выполнялось копирование BIOS из ROM в оперативную память. Задейтвованная при этом область памяти называется Shadow Memory (теневая память).
В настоящее время, почти все материнские платы комплектуются Flash BIOS, BIOSом, который в любой момент может бытть перезаписан в микросхеме ROM при помощи специальной программы.
BIOS PC стандартизирован, поэтому, в принципе менять его, также как, например, операционные системы нет необходимости. Дополнительные возможности компьютера можно использовать только использованием нового программного обеспечения.
BIOS, который поддерживает технологию Plug-and-Play, называется PnP BIOS. При использовании этой технологии BIOS должен быть обязательно прошит во Flash ROM.
– Как определить, что установленный на материнской плате BIOS, прошит во Flash ROM?
- 28Fxxx — 12V Flash память
- 29Cxxx — 5V Flash память
- 29LVxxx — 3V Flash memory (раритет)
- 28Cxxx — EEPROM, почти то же, что и Flash память
- 27Cxxx — с окошком. EPROM: только для чтения, требует программатор для записи и ультрафиолетовую лампу для стирания
- PH29EE010: SST ROM Чип — перепрошиваемый
- 29EE011: Winbond чип — 5V Flash память
- 29C010: Atmel Chip — 5V Flash память
– Зачем необходима перепрошивка новых версий BIOS?
Существует несколько причин, по которым это приходится делать. Основная из них — Windows 95 не всегда хорошо конфигурируется, если используются старые версии BIOS.
В настоящее время используются жесткие диски объемом более 528Мбайт. Для работы такого диска в системе необходимо поддержка LBA со стороны BIOS. Если BIOS не поддерживает LBA, то для работы с большими жесткими дисками приходится применять специальные утилиты. Применение таких утилит вызовет работу Windows 95 в compatible mode, что отрицательно сказывается на быстродействии.
Полная поддержка Plug-and-Play со стороны Windows 95 возможна только в случае применения PnP BIOS. Это очень веская причина для перепрошивки BIOS.
Кроме вышеуказанного, в новых версиях BIOS исправляются мелкие ошибки и недоработки. Новые версии могут содержать новые возможности, как то загрузка с CD ROM, SCSI перед IDE и т.п.
– Где можно скачать новые версии BIOS?
Во-первых новые версии BIOS доступны на сайтах их производителей. Во-вторых обычно производители материнских плат предлагают BIOSы для своих изделий. Так что, если знать производителя и название материнской платы, проблем не возникнет.
В принципе, название материнской платы можно и не знать. Обычно допускается прошивка BIOS от других плат, если на них установлен такой же чипсет и контроллер ввода-вывода. Однако такой возможностью следует пользоваться только в случае крайней необходимости, так как возможны другие несоответствия, например в количестве слотов и т.п., а прошивка неправильного BIOS может привести к тому, что материнскую плату придется выкидывать.
– Что делать, если производителя и название материнской платы определить не удается?
Чаще всего, производителя и название материнской платы можно определить по идентификационной строке, которую выдает BIOS сразу при включении компьютера.
Для AMI BIOS эта строка имеет вид, похожий на
51-0102-1101-00111111-101094-AMIS123-P или 40-01S5-ZZ1124-10101111-060691-OPWBSX-F,
где производитель определяется третьей группой цифр. Далее необходимо найти свой идентификационный номер в таблице соответствия номеров и названий производителей. Определить название материнской платы можно по всей идентификациолнной строке, пользуясь тем же документом.Идентификационная строка Award BIOS имеет вид
2A59CQ1CC
и позволяет определить чипсет (первые пять цифр и букв — 2A59C), производителя материнской платы (следующие два символа — Q1) и модель материнской платы (оставшаяся часть строки — CC). Далее необходимо посмотреть обозначения чипсетов, производителей и моделей в идентификационных строках.
– Как перепрошить Flash BIOS?
- awdflash xxx.bin (для Award BIOS)
- amiflash xxx.bin (для AMI BIOS)
- mrflash xxx.bin (для MRBIOS)
- Большинство программ прошивки при запуске спрашивают, сохранить ли текущую версию BIOS. На этот вопрос рекомендуется ответить положительно, так как новый BIOS может работать не так как хотелось бы.
- Некоторые производители материнских плат могут предлагать свои собственные программы-прошивальщики. В таком случае лучше пользоваться ими.
- Перед прошивкой новой версии BIOS выключите опцию System BIOS Cacheable в Setup.
- Если в Вашей системе процессор разогнан, то на время перепрошивки BIOS поставьте его на штатную частоту.
- В Setup в разделе Chipset Features Setup, отключите Video Bios Cacheable.
- Выйдете из Setup.
- Перезагрузитесь под чистым DOS (нажав F8 и выбрав Safe Mode Command Prompt only)
- Перепрошейте BIOS и перезагрузитесь
- Войдите в Setup и установите опцию Video Bios Cacheable в Enable.
– Что будет, если запортить BIOS или прошить неправильную версию?
Скорее всего, компьютер не будет грузиться, даже не подавая признаков жизни.
– Как восстановить поврежденный BIOS?
- Беpем любую pаботающую мать, поддеpживающую флэш (совеpшенно необязательно, чтоб она была на том же чипсете, на котоpый pассчитан BIOS, котоpый мы хотим записать). Можно пpосто найти флэш или ПЗУ от матеpи, аналогичной той, флэш из котоpой мы будем пеpеписывать, и вpеменно поставить его (пеpеставив, если нужно, джампеpа типа флэша). Или, если есть пpогpамматоp, только он не умеет писать флэш — найти ПЗУ подходящего pазмеpа и записать его.
- Вынимаем флэш или ПЗУ из этой матеpи, обвязываем его с двух концов двумя кольцами нитки (чтоб можно было его легко извлечь) и неплотно втыкаем назад в панельку.
- Загpужаемся в "голый" ДОС, выдеpгиваем за эти два кольца стоящий в матеpи флэш или ПЗУ (все pавно он нужен только пpи загpузке), если нужно, пеpеставляем джампеpа типа флэша, и вставляем флэш, котоpый нужно записать. Главное тут — ничего не замкнуть :)
- Запускаем пpогpамму записи, pассчитанную на мать, на котоpой пишем, BIOS с котоpым гpузились и флэш, котоpый нужно записать (пpогpамма должна уметь пеpеписывать флэш целиком, напpимеp, из комплекта mr-bios или asusовский pflash). Пишем, выключаем питание и вынимаем готовый флэш. Все.
- Извлечь PCI-видеокарту (все нижеописанное не будет работать с PCI-видео, так как для инициализации PCI необходим BIOS)
- Установить старую ISA-видеокарту и подключить монитор
- Вставить загрузочную дискету в дисковод А:
- Включить компьютер
- Компьютер заработает благодаря Award Boot Block
- Вставить предварительно созданную дискету с прошивальщиком и правильным BIOS
- Перепрошить BIOS
- Перезагрузиться
- Выключить компьютер и поменять видеокарту обратно. Все — теперь можно работать
- Установить Flash Recovery jumper в положение recovery mode (к сожалению, такую возможность имеют не все платы)
- Вставить загрузочную bootable upgrade дискету, которой комплектуется каждая интеловская плата, в дисковод A:
- Перезагрузиться
- Во время этой процедуры экран будет оставаться темным, так как в непрошиваемой boot block area не содержатся функции работы с видео. Эта процедура может контролироваться только пищанием спикера и миганием лампочки дисковода. Когда компьютер пискнеть и лампочка дисковода загорится, можно считать, что система копирует необходимые данные во Flash ROM. Как только лампочка дисковода погаснет, прошивка закончится.
- Выключить компьютер
- Вернуть Flash Recovery jumper обратно в положение по умолчанию
- Вынуть дискету из дисковода и включить компьютер
– Что такое PROM, EPROM и ЕEPROM и чем они отличаются?
PROM (programmable read-only memory — программируемая память только для чтения) — это чип памяти, данные в который могут быть записаны только однажды. То что записано в PROM, не вырубишь топором :) (хранится в нем всегда). В отличии от основной памяти, PROM содержит данные даже когда компьютер выключен.
Отличие PROM от ROM (read-only memory — память только для чтения) в том, что PROM изначально производятся чистыми, в тот время как в ROM данные заносятся в процессе производства. А для записи данных в чипы PROM, применяются специальные устройства, называемые программаторами.
EPROM (erasable programmable read-only memory — стираемая программируемая память только для чтения) — специальный тип PROM, который может очищаться с использованием ультрафиолетовых лучей. После стирания, EPROM может быть перепрограммирована. EEPROM — по сути похожа на PROM, но для стирания требует электрических сигналов.
EEPROM (electrically erasable programmable read-only memory — электрически стираемая программируемая память только для чтения) — специальный тип PROM, который может быть очищен электрическим разрядом. Подобно другим типам PROM, EEPROM содержит данные и при выключенном питании компьютера. Аналогично всем другим типам ROM, EEPROM работает не выстрее RAM.
Специальный тип EEPROM, называемый Flash memory или Flash EEPROM, может быть перезаписан без применения дополнительных устройств типа программатора, находясь в компьютере.
– Как сбросить установки BIOS (включая пароль) в значения по умолчанию из DOS?
Так как не все материнские платы оборудованы джампером для сброса установок BIOS или этот джампер может быть недоступен, то существует метод очистки BIOS из DOS, при помощи команды debug. Загрузившись в DOS (не в DOS-box под Windows!) необходимо набрать:
Метод 1 (Award и AMI BIOS):DEBUG -O 70 17 -O 71 17 Q
Метод 2 (Phoenix BIOS):DEBUG -O 70 FF -O 71 17 Q
– Как подобрать (снять) пароль на Setup (загрузку)?
Если забыт паpоль на Setup, можно воспользоваться pазличными пpогpаммами для снятия паpоля или одним из заводских паролей.
Заводские пассворды для AWARD BIOS следующие:
AWARD_SW, TTPTHA, aPAf, HLT, lkwpeter, KDD, j262, ZBAAACA, j322, ZAAADA, Syxz, %шесть пpобелов%, Wodj, %девять пpобелов%, ZJAAADC, 01322222, j256, ?award
Один из этих паролей должен подойти. Однако в новых AWARD BIOS (версии 4.51) инженерные пароли отсутствуют. Однако существует программка для снятия/определения установленных паролей в таких BIOS.Для AMI BIOS стандартных паролей нету. Единственный случай: если вы только приобрели материнскую плату то пароль может быть AMI.
Существуют программы для определения установленного на Setup пароля. Вы можете скачать здесь эти утилиты для Award BIOS и AMI BIOS.
Hа некотоpых AMI BIOS можно сpазу после включения деpжать нажатой клавишу Ins — пpи этом в CMOS-память загpужаются стандаpтные паpаметpы.
– Как аппаратно сборосить CMOS (вместе с паролями)?
Почти на всех совpеменных системных платах pядом с батаpейкой есть пеpемычка для сбpоса CMOS-памяти (обычно — 4 контакта, ноpмальное положение — 2-3, сбpос — 1-2 или 3-4; иногда — 3 или 2 контакта).
Выпаивать и тем более замыкать батаpейку не имеет смысла — это чаще всего не пpиводит к успеху из-за констpукции схемы питания CMOS-памяти, а замыкание батаpейки сильно сокpащает сpок ее службы.
Если на плате нет батаpейки, нужно поискать пластмассовый модуль с надписью "DALLAS" (это монолитный блок с батаpейкой и микpосхемой CMOS) — пеpемычка может быть возле него.
В случае, если перемычка для очистки CMOS-памяти отсутствует, то сначала попробуйте отключить или отсоединить батарейку. При этом также рекомендуется отключить провода от блоки питания, так как заряд на его конденсаторах может сохраняться и успешно поддерживать питание CMOS RAM (ей очень мало надо) более суток.
Если это не помогло, то остается только замыкать соответствующие ножки у микросхемы CMOS-памяти, добиваясь ее очистки. Найдите, какой из перечисленных ниже чипов установлен у Вас и следуйте приведенным рекомендациям.
P82C206 Chip (квадратный) (старый)
Этот чип включает в себя всю мелкую логику AT — контроллеры DMA, прерываний, таймер а также clock chip. CMOS RAM на этом чипе очищается при замыкании контактов 12 и 32 или 74 и 75 на несколько секунд (при выключенном питании). gnd 74 _|____________________ 5v 75--| | | | | | | CHIPS | 1 * | | | P82C206 | | | |_____________________| ||||||||||||||||||||| | | | gnd | 5v 12 32F82C206 Chip (прямоугольный)
Аналогичен предыдущему. CMOS RAM на этом чипе очищается при замыкании контактов 3 и 26 на несколько секунд (при выключенном питании). 80 51 ______________________________ 81 | | 50 | | | | | OPTi | | | | F82C206 | | | 100 |______________________________| 31 |||||||||||||||||||||||||||||| 1 | | 30 | | 3 26Dallas DS1287, DS1287A, Benchmarq bp3287MT, bq3287AMT
Dallas DS1287, DS1287A с совместимые Benchmarq bp3287MT и bq3287AMT чипы имеют встроенную батарею. Эта батарея расчитана как минимум на 10 лет. На материнских платах с этим чипом не должно быть дополнительных батарей. Если батарея вышла из сторя, необходимо заманить весть чип.CMOS RAM может быть очищена на 1287A и 3287AMT чипах закорачиванием ножек 12 и 21 (при выключенном питании).
1287 (и 3287MT) отличаются от 1287A тем, что CMOS RAM не может быть очищена. И в случае если Вы забыли пароль необходимо заменить микросхему. В этом случае рекомендуется заменять на 1287A. Все также применимо к Dallas 12887 и 12887A, однако они содержат вдвое большую CMOS RAM. ___________ 1 -| * U |- 24 5 volts DC 2 -| |- 23 3 -| |- 22 4 -| |- 21 RCL (RAM Clear) 5 -| |- 20 6 -| |- 19 7 -| |- 18 8 -| |- 17 9 -| |- 16 10 -| |- 15 11 -| |- 14 Ground 12 -|__________|- 13
Motorolla MC146818AP или совместимые
Обычно это прямоугольный 24 контактный DIP chip, обычно в панельке. Совместимые производятся несколькими компаниями, напимер Hitachi HD146818AP или Samsung KS82C6818A. Номер чипа должен оканчиваться на 6818. Хотя этот чип и совместим по выводам с Dallas 1287/1287A, в нем нет встроенной батареи. Это означает, что CMOS RAM может быть очищена просто выниманием чипа из панельки на некоторое время и установкой обратно.Для уменьшения риска повреждения микросхемы рекомендуется закорачивать ножки 12 и 24 на несколько секунд при выключенном питании ___________ 1 -| * U |- 24 5 volts DC 2 -| |- 23 3 -| |- 22 4 -| |- 21 5 -| |- 20 6 -| |- 19 7 -| |- 18 8 -| |- 17 9 -| |- 16 10 -| |- 15 11 -| |- 14 Ground 12 -|__________|- 13
Dallas DS12885S или Benchmarq bq3258S
CMOS RAM на этом чипе очищается замыканием контактов 12 и 20 при выключенном питании. Также можно попробовать 12 и 24. (5Volts) 24 20 13 | | | | | | | | | | | | ----------------------------------- | | | DALLAS | |> | | DS12885S | | | ----------------------------------- | | | | | | | | | | | | 1 12 (Ground)
– Что означают аварийные звуковые сигналы, выдаваемые AMI BIOS при загрузке?
Звуковые сигналы
Число сигналов | Описание проблемы | Решение |
---|---|---|
1 | DRAM refresh failure | Вставьте память еще раз. Если не помогает, то это проблема с памятью. |
2 | Parity Circuit Failure | |
3 | Base 64K RAM failure | |
4 | System Timer Failure | Материнская плата неработоспособна |
5 | Processor Failure | |
6 | Keyboard Controller / Gate A20 Failure | Вытащите и вставьте чип контроллера клавиатуры. Если не помогает, замените контроллер клавиатуры. Если и это не помогает, проверьте клавиатуру и ее кабель |
7 | Virtual Mode Exception Error | Материнская плата неработоспособна |
8 | Display Memory Read/Write Failure | Ошибка памяти видеоадаптера. Переисталлируйте видеокарту и память на ней. Если не помогает, замените видеокарту. |
9 | ROM BIOS Checksum Failure | Ошибка в микросхеме BIOS. Попробуйте вытащить и вставить заново этот чип. Если не помогает, необходимо перепрошить его содержимое или заменить микросхему. |
10 | CMOS Shutdown Register Read/Write Error | Материнская плата неработоспособна |
1-2 | Search for option ROM (video configure fails) | |
1-3 | Video failure | Переинсталлируйте видеокарту. Если не помогает, придется ее заменить |
1-2-2-3 | BIOS ROM checksum | |
1-3-1-1 | Test DRAM refresh | |
1-3-1-3 | Test keyboard controller | |
1-3-4-1 | Test 512K base address lines | |
1-3-4-3 | Test 512K base memory | |
1-4-1-1 | Test memory bus | |
2-1-2-3 | Check ROM copyright notice | |
2-2-3-1 | Test for unexpected interrupts | |
1 | POST passed. | Все идет по плану |
– Что означают аварийные звуковые сигналы, выдаваемые Award BIOS при загрузке?
Звуковые сигналы
Число сигналов | Проблема | Решение |
---|---|---|
1 длинный 2 коротких | Video error | Переинсталлируйте видеокарту. Проверьте видеопамять. Замените карту |
Короткие сигналы | Memory error | Проблемы с памятью. Попробуйте заменить модули памяти. |
– Что означают аварийные звуковые сигналы, выдаваемые Phoenix BIOS при загрузке?
Читайте также: