Rom recovery на материнской плате что это
Перейти к содержимому

Rom recovery на материнской плате что это

  • автор:

[Материнская плата/Настольный ПК] Как сбросить настройки BIOS?

[Материнская плата/Настольный ПК] Как сбросить настройки BIOS? Примечание: Если настройки BIOS не соответствуют норме или разгон и другие факторы вызывают сбой нормальной загрузки системы, можно использовать следующие методы для сброса BIOS. Перейдите на официальный сайт ASUS, чтобы проверить модель вашей материнской платы, чтобы подтвердить положение контакта CLRTC. Сначала загрузите руководство, соответствующее вашей модели материнской платы, из ASUS Центра загрузок. Введите модель -> щелкните Руководство и Документы. (Пример: модель ROG STRIX B550-F GAMING (WI-FI)) Примечание: Руководство можно получить: Найдите CLR 1. Используйте материнскую плату, чтобы очистить настройки BIOS, в зависимости от материнской платы, будут следующие методы: а. Двухконтактный тип CLRTC, пожалуйста, выключите питание и отсоедините шнур питания, прикоснитесь к двум контактам металлическим предметом, например отверткой, примерно на 5-10 секунд. После повторного подключения питания и загрузки нажмите и удерживайте клавишу удаления или клавишу F2, чтобы войти в BIOS для сброса. (Пример: ROG STRIX B550-F GAMING (WI-FI)) б. На материнской плате есть кнопка CLR_CMOS. Нажмите эту кнопку, когда устройство выключено и шнур питания отключен. После повторного подключения питания и загрузки нажмите и удерживайте клавишу удаления или клавишу F2, чтобы войти в BIOS для сброса. (Пример: MAXIMUS VII RANGER) Примечание: в руководстве можно найти: Найдите CLR C. К вводу-выводу на материнской плате прикреплена кнопка CLR_CMOS. Пожалуйста, нажмите эту кнопку при выключении и отсоединении шнура питания. После повторного подключения питания и загрузки нажмите и удерживайте клавишу удаления или клавишу F2, чтобы войти в BIOS для сброса.
(Пример: ROG MAXIMUS XIII EXTREME) 2. Перезагрузите компьютер, нажмите DEL на клавиатуре, войдите в BIOS и нажмите F5. После появления сообщения «Load Optimized Defaults» выберите Ok, и BIOS вернется к значению по умолчанию. (Пример: модель ROG STRIX B550-F GAMING (WI-FI), настройки по умолчанию с оптимизацией загрузки) Примечание: Двухконтактный метод CLRTC или кнопка CLR_CMOS недоступны. Можно попробовать вынуть встроенный аккумулятор. После очистки CMOS переустановите аккумулятор, войдите в BIOS и нажмите F5. Когда появится «Загрузить оптимизированные значения по умолчанию», выберите «ОК», и BIOS ответит. Значение по умолчанию. Если проблема сохраняется, пожалуйста, обратитесь в сервисные центры: ASUS сервисные центры.

Эта информация была полезной?

Что мы можем сделать, чтобы улучшить эту статью? Отправить Пропустить
Связаться со службой поддержки
Пожалуйста, свяжитесь со службой поддержки, если информация выше не помогла решить Ваш вопрос.
Получить поддержку

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

Продукты и информация

  • Ноутбуки
  • Сетевое оборудование
  • Материнские платы
  • Видеокарты
  • Смартфоны
  • Мониторы
  • Показать все продукты

    Item_other —>
  • Моноблоки (All-in-One)
  • Планшеты
  • Коммерческое сетевое оборудование
  • Серия ROG
  • AIoT и промышленные решения
  • Блоки питания
  • Проекторы
  • VivoWatch
  • Настольные ПК
  • Компактные ПК
  • Внешние накопители и оптические приводы
  • Звуковые карты
  • Игровое сетевое оборудование
  • Одноплатный компьютер
  • Корпуса
  • Компьютер-брелок
  • Наушники и гарнитуры
  • Охлаждение
  • Chrome-устройства
  • Коммерческие

    Commercial_list.Item —>
  • Моноблоки (All-in-One)
  • Информационные панели
  • Ноутбуки
  • Настольные ПК
  • Мониторы
  • Серверы и рабочие станции
  • Проекторы
  • Компактные ПК
  • Сетевое оборудование
  • Материнские платы
  • Игровые станции
  • Data Storage

Материнская плата: причины и решения проблемы сброса биоса

uchet-jkh.ru

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

Во-первых, одним из наиболее распространенных решений является удаление и замена батарейки на плате. Батарейка отвечает за питание биоса, поэтому ее замена может помочь сбросить настройки и восстановить работоспособность. Для этого необходимо отключить компьютер от сети, открыть корпус системного блока и найти место, где расположена батарейка. Используя плоскую отвертку или другие инструменты, осторожно вытащите батарейку и замените ее на новую. Затем соберите системный блок и запустите компьютер, чтобы проверить, была ли проблема решена.

Во-вторых, можно попробовать выполнить сброс настроек биоса с помощью перемычки на материнской плате. Чтобы сделать это, отключите компьютер от сети, откройте корпус системного блока и найдите на плате перемычку «Clear CMOS» или «CLR_CMOS». Убедитесь, что компьютер все еще отключен от сети, затем переставьте перемычку на соседние выводы на несколько секунд. Затем верните перемычку в исходное положение и соберите системный блок. После запуска компьютера проверьте, сбросился ли биос и работает ли система стабильно.

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

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

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

Что делать, если BIOS не сбрасывается на материнской плате?

BIOS (Basic Input/Output System) является программным обеспечением, которое управляет базовыми функциями компьютера, включая конфигурацию аппаратной части. Иногда может возникнуть ситуация, когда BIOS на материнской плате не сбрасывается, что может привести к различным проблемам и ограничениям.

Если вы столкнулись с проблемой, когда BIOS не сбрасывается на вашей материнской плате, рекомендуется предпринять следующие действия:

  1. Перезагрузите компьютер: Попробуйте сначала простое решение — перезагрузка компьютера. Иногда это может помочь сбросить BIOS и восстановить его нормальное функционирование.
  2. Используйте контакты «Clear CMOS»: На некоторых материнских платах есть контакты с надписью «Clear CMOS», которые можно использовать для сброса BIOS. Отключите компьютер от источника питания, а затем коротким замыканием этих контактов на несколько секунд сбросьте BIOS. Подробные инструкции для вашей конкретной материнской платы можно найти в ее руководстве пользователя.
  3. Удалите батарейку BIOS: Внутри материнской платы находится небольшая батарейка, которая питает BIOS даже при выключенном компьютере. Попробуйте извлечь эту батарейку на несколько минут, чтобы полностью сбросить настройки BIOS. Затем вставьте ее обратно и включите компьютер.
  4. Обновите BIOS: Если все предыдущие методы не сработали, попробуйте обновить BIOS до последней версии. Проверьте официальный сайт производителя материнской платы, чтобы найти обновления BIOS. При обновлении BIOS будьте осторожны и следуйте инструкциям производителя, чтобы избежать потенциальных проблем.

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

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

Проверьте подключение материнской платы к источнику питания

Если биос не сбрасывается на материнской плате, первым делом следует проверить подключение платы к источнику питания. Неправильное подключение или проблемы с проводами могут привести к недостаточному питанию и, в итоге, к неспособности сбросить настройки биос.

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

  1. Подтвердите наличие электропитания: Убедитесь, что источник питания подключен к розетке и включен. Проверьте, что индикатор питания на источнике питания горит.
  2. Проверьте подключение кабелей: Убедитесь, что все необходимые кабели (обычно 24-контактный ATX-кабель и 4/8-контактный EPS-кабель) правильно подключены к материнской плате. Проверьте, что кабели не повреждены и надежно закреплены в разъемах.
  3. Проверьте состояние разъема питания: Визуально проверьте разъем питания на материнской плате. Убедитесь, что пины не повреждены, вставлены в разъем и правильно закреплены. При необходимости очистите разъем от пыли и грязи.
  4. Проверьте источник питания: Если все вышеперечисленные шаги не помогли, возможно, проблема связана с неисправностью самого источника питания. Попробуйте подключить другой рабочий источник питания и проверьте, возникает ли проблема при его использовании.

Если после проведения всех этих проверок биос по-прежнему не сбрасывается, возможно, проблема не связана с подключением к питанию и требует дополнительного анализа и ремонта.

Проверьте правильность установки Clear CMOS-джампера

Если биос на материнской плате не сбрасывается, одна из возможных причин может быть неправильная установка Clear CMOS-джампера. Clear CMOS-джампер — это небольшой переключатель на материнской плате, который используется для сброса настроек биоса к значениям по умолчанию.

Чтобы проверить правильность установки Clear CMOS-джампера, выполните следующие шаги:

  1. Выключите компьютер и отсоедините его от источника питания.
  2. Найдите Clear CMOS-джампер на материнской плате. Обычно он находится рядом с батарейкой CMOS.
  3. Убедитесь, что Clear CMOS-джампер установлен в правильном положении. В большинстве случаев это будет положение «Normal» или «Default».
  4. Если Clear CMOS-джампер был неправильно установлен, переключите его в правильное положение.
  5. Подождите несколько секунд и затем верните Clear CMOS-джампер в исходное положение.
  6. Подключите компьютер к источнику питания и включите его.

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

Используйте специализированные программы для сброса биоса

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

  1. Clear CMOS – это программа, которая предназначена исключительно для сброса биоса. С ее помощью вы сможете полностью очистить все настройки биоса до заводских установок. Clear CMOS работает в операционных системах Windows и имеет интуитивно понятный интерфейс.
  2. BIOS/CMOS Password Recovery Tool – это программное обеспечение, которое помогает сбросить пароли биоса. Оно имеет функции восстановления или удаления забытого пароля, а также позволяет сбросить биос до заводских установок. BIOS/CMOS Password Recovery Tool часто используется, если вы забыли пароль биоса и не можете войти в систему.
  3. Flash Memory Toolkit – это программа, которая предназначена для работы с флэш-накопителями, включая биос-чипы на материнской плате. С ее помощью вы сможете сбросить биос и восстановить заводские настройки. Flash Memory Toolkit имеет множество функций, позволяющих работать с флэш-накопителями и проводить различные диагностические операции.

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

Обратитесь за помощью к специалисту

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

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

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

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

Dual BIOS и как заставить материнскую плату Gigabyte загружаться с резервной BIOS?

Иногда при обновлении BIOS для материнской платы возникает ситуация когда после обновления материнская плата не включается, не выдаёт изображение на экран или постоянно циклически перезагружается. Такое происходит довольно редко, однако из своей практики скажу, что примерно 5% случаев обновления или прошивки BIOS материнских плат проходят с подобным результатом. Что же делать? Как восстановить работоспособность материнской платы в случае неудачной прошивки BIOS? Ответ прост если вы обладатель материнской платы с технологией Dual BIOS от Gigabyte.

Материнские платы Gigabyte с технологией Dual BIOS имеют две микросхемы памяти, содержащие BIOS. Для облегчения понимания, назовем их «основная» и «резервная». Если «основная» копия BIOS была повреждена, то «резервная» подменит её при загрузке системы и восстановит за кратчайшее время. При любых повреждениях «основного» BIOS будь то в результате атаки компьютерного вируса или некорректной перепрошивки, «резервная» микросхема подменит её и восстановит. Процесс восстановления «основной» копии BIOS из «резервной» обычно должен запускаться автоматически, однако иногда этого не происходит. В этом случае необходимо запустить процесс восстановления «основной» копии BIOS принудительно. На данных материнских платах есть несколько способов принудительно запустить восстановление «основной» копии из «резервной», вот эти способы:

Способ 1
  1. Выключите питание компьютера (материнской платы) удерживая кнопку включения питания «Power» в течение пяти секунд;
  2. Нажмите и удерживайте кнопку включения питания «Power», компьютер запустится и держите кнопку «Power» пока компьютер снова не выключится;
  3. Нажмите кнопку включения питания «Power» снова (теперь уже не удерживая), теперь компьютер включиться с «резервной» BIOS и перезапишет микросхему «основной» BIOS если она содержит не такое же содержимое как в микросхеме «резервной» BIOS.
Способ 2
  1. Выключите питание компьютера (материнской платы) удерживая кнопку включения питания «Power» в течение пяти секунд;
  2. Нажмите и удерживайте кнопку включения питания «Power» и кнопку «Reset» примерно 10 секунд, затем отпустите эти кнопки;
  3. Теперь после включения загрузка должна произойти с «резервной» копии BIOS.
Способ 3
  1. Замкните пинцетом контакты 1 и 6 на микросхеме «основного» BIOS (контакт 1 обычно расположен около круглой метки на микросхеме, контакт 6 расположен вторым от противоположного по диагонали угла, смотрите ниже на картинке);
  2. Попросите друга нажать кнопку включения питания «Power», вы в это время должны держать замкнутыми контакты 1 и 6;
  3. Разомкните контакты 1 и 6 сразу после того как материнская плата включиться и вы услышите единичный звуковой сигнал из спикера;
  4. Загрузка произошла с «резервной» копии BIOS.

Вот и всё! Удачных вам ремонтов!

Пишем свой ROM BIOS

Со стародавних времён хотел попробовать создать собственный ROM BIOS, который будет записан в отдельную микросхему и будет выполнять какие-то полезные действия. Например, ROM BIOS установлен в видеокартах (по крайне мере старых), контроллерах дисков и много где ещё — это фактически расширения обычного BIOS. Понимаю, что это всё старьё и тягаться с возможностями современного UEFI бессмысленно, но мне очень хотелось создать свой собственный образ, который находится физически в отдельной микросхеме и работает при старте системы. Поэтому пришлось даже для этих целей найти старый комп.

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

В этой статье мы с вами разберём создание своего ROM BIOS, дальше я расскажу про тонкости и нюансы, напишу низкоуровневый «Hello world», сделаю настоящий интерпретатор BASIC ROM, который стартует при включении компьютера, как в первых IBM PC.

❯ Теория работы расширения BIOS

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

Если говорить об архитектуре IBM BIOS, то он может быть расширен отдельными модулями, и всё будет работать как единый код. Поэтому в персональную ЭВМ могут быть добавлены дополнительные микросхемы ПЗУ, которые будут включать в себя эти модули.

Многие из вас видели эти микросхемы на сетевых картах, но они также присутствуют в видеокартах VGA Video BIOS, системный (основной) BIOS, BIOS IDE жёсткого диска и многие другие.

Для того чтобы системный BIOS нашёл дополнительный модуль в памяти, есть специальная процедура, которая позволяет его найти. Во время самотестирования POST, после загрузки векторов прерывания в ОЗУ, резидентный код BIOS начинает проверять ПЗУ на наличие специальных байтов заголовка, которые помечают начало дополнительного модуля BIOS. Поиск этих заголовков идёт в диапазоне абсолютных адресов 0C8000h — 0F4000h .

Заголовок имеет определённый вид:

  • Два байта обозначают начало секции: 0x55 и 0xAA .
  • Сразу за двумя первыми байтами заголовка, следует третий байт, который содержит длину дополнительного кода BIOS. Это количество блоков, длиной 512 байт, необходимых для хранения этого кода. Это ещё значит, что раздел кода расширения BIOS не может быть длиннее:

После того как заголовок был найден, проверяется — является ли последующий раздел настоящим расширением BIOS. Для этого выполняется проверка целостности для указанного количества блоков по 512 байт. Значения каждого байта в блоке суммируются сложением по модулю 0x100 — эффект такой же, как при делении суммы всех байтов на 4096(d). Остаток 0 указывает, что расширение BIOS содержит корректный код. Проще говоря, последний байт должен хранить контрольную сумму, сумма всех предыдущих байтов, с которой даёт нуль.

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

Дальше, когда код был выполнен, управление вновь передаётся к резидентному BIOS, и поиск в памяти дополнительных блоков BIOS продолжается. Этот процесс завершается, когда достигается абсолютный адрес 0F4000h , после которого уже и начинается загрузка с диска.

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

Например, в большинстве систем тех лет, есть три стандартных BIOS, которые, как правило, всегда расположены в одном и том же месте:

  • Системный BIOS: основной системный BIOS расположен в блоке памяти размером 64 КБ от F0000h до FFFFFh .
  • VGA Video BIOS: это BIOS, который нужен для инициализации и управления видеокартой. Обычно он находится в блоке размером 32 КБ от C0000h до C7FFFh . Находится непосредственно на плате видеокарты.
  • BIOS жёсткого диска IDE: BIOS, который управляет жёстким диском IDE, если в вашей системе есть IDE, расположен от C8000h до CBFFFh . На старых платах расположен на плате контроллера жёстких дисков, на новой системе, как я понимаю, непосредственно на материнской плате.

Просмотр памяти BIOS реальной видеокарты

Переходим по смещению C000h , что как раз соответствует физическому адресу C0000h . Можно сразу увидеть два «магических» числа заголовка: 55h и AAh , затем идёт число 7Ch , которое говорит нам, что это расширение занимает 63488 байта.

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

В общем-то, этой информации должно быть достаточно, чтобы взять и написать свой BIOS.

❯ Пишем «Hello Wold» в расширении BIOS.

Когда начинал искать информацию по теме, наткнулся на следующую PDF, которая и стала кладезем информации. Это какая-то презентация, как собирать BIOS-расширения. В конце неё даётся ссылка на репозиторий с прекрасным примером и описанием. Это замечательный пример того, для чего можно было создавать свои расширения в BIOS — защищённая загрузка на жёсткий диск с паролем. Да, во времена UEFI всё это потеряло всякий смысл. Но мы хотим разобраться с этой частью.

Попробовал это расширение, оно у меня высыпалось с ошибкой. Но я понял, что оно работает, потому что оно запустилось и напечатало ошибку. Значит можно взять код, который выводил ошибку и сделать из него «Hello World».

Обкорнав этот пример, получилось настоящий «Привет мир». Сам ассемблеровский код разбирать не буду, он достаточно очевиден, но обращу внимание на некоторые моменты. Код весь можно посмотреть в моём репозитории. Программа собирается транслятором nasm, на мой взгляд, самый удобный и простой транслятор для начинающих, работает как в DOS, Windows, так и в Linux. Для удобства сборки написал Makefile.
Пробежимся по коду hello.asm:

org 0 rom_size_multiple_of equ 512 bits 16 ; PCI Expansion Rom Header ; ------------------------ db 0x55, 0xAA ; signature db rom_size/512; initialization size in 512 byte blocks entry_point: jmp start start:

Начинаем работать с нулевого смещения. Вначале мы определяем define rom_size_multiple_of equ 512 , который содержит размер блока. Bits 16 говорит, что NASM должен генерировать код для процессора, работающего в шестнадцати битном режиме.

db 0x55, 0xAA — это заголовок, магические числа, которые обозначают начало область начала расширения BIOS.
db rom_size/512 — это один байт, который определяет размер секторов нашей программы. Рассчитывается автоматически с помощью макроса, для этого в конце программы добавлен следующий макрос:

rom_end equ $-$$ rom_size equ (((rom_end-1)/rom_size_multiple_of)+1)*rom_size_multiple_of

Макрос rom_end — получает размер программы в байтах. Далее идёт расчёт размер памяти, кратно блоку 512 байт и сохраняется в макрос rom_size . И это значение уже подставляется в байт в памяти, где рассчитывается количество блоков. Надеюсь, вы не запутались, тут просто происходит рекурсивная трансляция.

После того как заголовок определён, идёт команда jmp start , которая осуществляет прыжок на начало исполнения программы. В конце кода программы, перед макросами расчёта её размеров, резервируется 1 байт для расчёта контрольной суммы:

db 0 ; reserve at least one byte for checksum

В качестве способа ввода-вывода используется стандартное прерывание BIOS int 10h , которое расписывается в любой книжке по ассемблеру, поэтому не вижу смысла подробно на этом останавливаться. Многие студенты пишут подобные опусы на лабораторках в институте.

Самое интересное — расчёт контрольной суммы, и он осуществляется с помощью дополнительной программы addchecksum.c. Её исходники я также позаимствовал из проекта AHCI BIOS Security Extension. Код этой программы тоже стоит разобрать, потому что он интересен и полезен. Не так много работающих примеров, которые умеют считать контрольные суммы для расширения BIOS.

. int main(int argc, char *argv[]) < . FILE *f=fopen(argv[1], "r+"); . fseek(f, 0, SEEK_END); int f_size=ftell(f); fseek(f, 0, SEEK_SET); unsigned char sum=0; int i; for(i=0;ifputc((0x100-sum)&0xff, f); . >

С помощью перехода в конец файла fseek(f, 0, SEEK_END); мы получаем размер файла int f_size=ftell(f); . Далее с начала файла образа читаем побайтно и суммируем полученные значения в однобайтовой переменной sum (то есть отбрасывая бит переноса). После чего инвертируем полученное значение и записываем его в последний байт нашей программы fputc((0x100-sum)&0xff, f); , где мы заранее зарезервировали нулевой байт данных. В результате, если просуммировать весь код программы, он должен быть равен нулю, вместе с нашей контрольной суммой (последний байт хранит отрицательное число контрольной суммы).

Собрать это всё можно следующими двумя командами:

gcc addchecksum.c -o addchecksum nasm hello.asm -fbin -o hello.rom ./addchecksum hello.rom || rm hello.rom

Результатом всех операций, если вы всё сделали правильно, будет файл hello.rom . Осталось найти способ протестировать работоспособность этого бинарника.

❯ Способы отладки BIOS Extension

Самый очевидный и проблемный способ — это прошить программатором микросхему ПЗУ, вставить в специальную панельку на плате ISA или PCI, затем эту карту вставить в комп, включить его и убедиться, что ничего не работает. Есть вообще путь настоящего джедая — это встроить код прям в BIOS на материнской плате, но всё это долго, муторно и неудобно. Есть более простые и удачные решения.

Всё хорошее придумано для нас — это виртуальные машины, в данном случае использовал VirtualBox и qemu. Второй вариант быстрее и проще, первый — доступен в Windows, а поскольку большую часть времени работаю в wsl под Windows, для меня это актуально. Да, я знаю, что qemu есть для Windows, но таков путь.

VirtualBox

Для того чтобы протестировать ROM BIOS Extension, я создал пустую виртуальную машину. Там не требуется даже подключать жёсткий диск, он не нужен. Далее необходимо подключить данный образ к виртуальной машине. В Windows делал следующим образом, запускаю PowerShell и выполняю:

cd "C:\Program Files\Oracle\VirtualBox\" .\VBoxManage.exe setextradata testrom "VBoxInternal/Devices/pcbios/0/Config/LanBootRom" "c:\tmp\hello.rom"

После этого можно просто подменять файл c:\tmp\hello.rom и всё будет работать. В Linux тоже всё работает, команда такая же, разве что не требуется лезть по явному пути, так как путь до VBoxManage уже содержится в переменной PATH.

Копирую файл hello.rom в c:\tmp\ и пробую запустить виртуальную машину.

Тестирование образа ROM в VirtualBox

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

Запуск BIOS в qemu

Протестировать в виртуальной машине qemu можно одной командой, прямо из папки с получившимся бинарником:

qemu-system-i386 -net none -option-rom hello.rom
  • -net none говорит, что сети у нас нет.
  • -option-rom — указывает образ ROM-файла.

Запускаем тестирование программы из Makefile

Оба инструмента имеют право на жизнь, но мой выбор — это qemu, плюс там удобно будет ещё и посмотреть, что происходит с моей программой.

❯ Тестирование на реальном железе

Если первая часть статьи показалась вам сложной, то нет — это была самая простая часть проекта. Самая сложная часть, которая отняла у меня большую часть времени — это запуск всего на реальном железе.

Вообще, не так много способов установить свой собственный ROM в память компьютера, самый простой – это подобрать сетевую карту, у которой есть кроватка для установки ROM. Вроде бы прошивай ПЗУ, устанавливай в кроватку и вперед, но как обычно, путь был тернист.

Попытка на 386 машине

Изначально планировал весь проект реализовать на 386 машине, железо которой мне было любезно предоставлено spiritus_sancti.

386 материнская плата

Чтобы оживить его, пришлось пройти настоящий квест по разворачиванию DOS на Compact Flash, оказалась не такая простая задачка, с танцами. О чём подробно описал у себя в ЖЖ. Все эти мытарства были нужны для того, чтобы увидеть образ ПЗУ в памяти ЭВМ.

Для прошивки взял микросхему M2764, программатор долго её не хотел видеть, всё давал ошибки ножек. Но всё же дал её прошить.

Прошивка микросхемы

После прошивки вставил её в панельку сетевой карты и стал ждать чуда.

ПЗУ M2764 в панельке сетевой карты

Но чуда не произошло, сколько я не плясал с бубном, но видел при загрузке только такую картину:

BIOS найден не был, попытка загрузиться на дискетку

Тогда я тщетно пытался разыскать свой код в памяти с помощью утилиты debug (для этого и ставил DOS). Но безуспешно, в результате решил взять железо посвежее для своих опытов.

Pentium 4 и сетевая карта Realtek RTL8139

Поскребя по сусекам в своём гараже, обнаружил там системный блок с Pentium 4, который долгое время стоял под дождём, но оказался живым. И подумал, что он вполне может подойти для моих целей. Винт был мёртв и хрустел французской булкой, но меня это не волновало, главное, чтобы работал BIOS и PCI.

Потрошка подопытного, все шлейфы отключены, во избежание

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

Старт, всё живое, дисков нет

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

Включаем исполнение кода на сетевой карте

Есть верный способ сделать что-то хорошо — это повторить за кем-то. Поэтому, решил взять не только куски кода из проекта AHCI BIOS, но и рекомендации по выбору сетевой карты:

This one uses the Realtek RTL8139 controller, which is my recommendation. Network cards with the RTL8139 are easy and cheap to find on the second hand market. The network card should come with an unpopulated DIP-28 socket, so you will also need to get a DIP-28 EEPROM as the actual option ROM. Any ROM that sells as 28C64 should be compatible.

Вместо 28C64 решил использовать микросхему M2764, которая у меня уже была в наличии. Карта очень распространённая и купить её не проблема, главное следить, чтобы в ней была панелька.

Как я узнал из статьи «Boot manager для 486-го компьютера», для работы BOOT ROM сетевую карту нужно конфигурировать. Нашёл с трудом драйвера для RTL8139 под ДОС и даже настроил, чтобы всё корректно работало.

Настройка сетевой карты в драйверах

Ставлю прошитое ранее ПЗУ в эту сетевую карту, ииии…

Установленное ПЗУ. Железка снята для удобства многократной установки платы

Устанавливаю её в системный блок, загружаюсь и ничего. Как я не бился, как ни крутился, что не делал — не получается. Именно тогда я озадачился поиском программы просмотра памяти. С помощью RAMVIEW смотрел всю память, но так и не встретил там участка с моим образом (ключевое слово «Hello Word» в начале сегмента).

Стало понятно, что нужно брать сетевую карту, у которой уже есть настоящий, живой Boot ROM и смотреть как же он работает. Это сетевые карты типа PXE.

Рабочий вариант: сетевуха с образом PXE

Идея простая, найти сетевую карту с рабочим ПЗУ, затем посмотреть, как оно устроено. Отпаять с неё микросхему ПЗУ, зашить свою прошивку и припаять обратно. Но потом я подумал: а зачем отпаивать, если можно поставить просто панельку. Так я и поступил.

PXE-сетевые карты стоят на досках объявлений дешевле, чем микросхемы ПЗУ в магазине. Поэтому, купил сразу несколько плат, чтобы было место для экспериментов. Выбор пал на распространённую модель: 3Com 3C905C-TXM.

Сетевая карта с PXE

Ставлю её в компьютер, и, о чудо, она грузится!

PXE ROM успешно обнаружен!

Можно даже посмотреть, как выглядит образ PXE ROM в памяти компьютера, с помощью утилиты RAMVIEW.

Образ PXE ROM в памяти компьютера

Здесь для меня была ценная информация, где я смогу найти образ своей программы в памяти компьютера. Всё точно так же, магические два числа и размер образа в секторах.

Дело стало за малым: отпаять микросхему и припаять панельку. На деле оказалась не такая простая процедура, как я думал, даже пришлось носить к профессиональному монтажнику (благо есть такая возможность), но у меня всё получилось.

Снимаем микросхему ПЗУ

Монтируем панель для микросхем

Прошиваем

Устанавливаем микросхему на своё законное место. Для сравнения плата с панелькой и микросхемой, запаянной штатно:

Всё, теперь всё готово к тестированию. Вставляем плату в компьютер, и всё работает!

Суровый аппаратный Hello World

Этот удивительный момент даже заснял на видео.

Теперь даже можно проверить, что в памяти видно эту программу. Обратите внимание на строку «Hello world.» в конце.

По адресу PXE теперь живёт «Привет мир»

Всё это конечно прикольно, но хочется чего-то более полезного и функционального, ведь умение делать свой ROM BIOS дарит много новых возможностей. А давайте сделаем настоящий ROM BASIC?

❯ BIOS ROM BASIC

Старожилы помнят, что в первых персональных компьютерах IBM интерпретатор BASIC был встроен в ROM BIOS. И мне показалась забавной загружаться вместо ОС в интерпретатор BASIC.

Главная задача, которая стояла предо мной — это найти хорошие исходники BASIC, написанные на ассемблере. Может показаться забавным, но Microsoft официально, в своём репозитории выложила исходники GW-BASIC. Однако, внимательно посмотрел на них, почитал статьи тех, кто пытался их собрать, например, и понял, что дело гиблое. В результате я отказался от идеи использовать этот исходник, хотя, конечно, это было бы очень аутентично.

Мне же посоветовали исходники bootBASIC, который занимает всего 512 байт, и рассчитан для работы в загрузочном секторе жёсткого диска. По счастливому стечению обстоятельств, в качестве транслятора там тоже использовался nasm.

Я сделал клон этого проекта, за пару часов добавил функционал, чтобы он компилировал ещё образ для ROM сетевой карты: добавил в начале магическое число, размер и в конце контрольную сумму — теперь вы всё знаете и сами умеете.

Осталось только собрать образ ROM простой командой:

make basic.rom

И проверить его:

make runqemurom

Но всё это не спортивно, интересно попробовать в реальном железе. И таки да, оно работает!

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

❯ Заключение

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

Очень много этапов экспериментов не вошло в статью, как минимум у меня около десятка различных вариаций «Hello world», написанных в разной стилистике ассемблера. Поле для экспериментов просто непаханое. Несмотря на то, что это старьё, такой опыт полезен для разработки на голом железе и может быть использован при программировании других модулей.

Хоть литературы по теме немного, создавать свой ПЗУ BIOS совершенно несложно. Это не сильно отличается от примеров создания загрузчика в бутсектор жёсткого диска. Просто нужно помнить, что есть ещё контрольная сумма, которую тоже нужно уметь считать и записывать в конец образа ROM.

❯ Полезные ссылки

  1. Краткое описание что такое BIOS Extension.
  2. Презентация, которая сдвинула меня с мёртвой точки.
  3. Репозиторий проекта AHCI BIOS Security Extension.
  4. Мой репозиторий BIOS «Hello world.».
  5. Оригинальный репозиторий bootBASIC.
  6. Мой репозиторий, который умеет грузиться в ROM BIOS.
  7. Интересная статья по теме «Boot manager для 486-го компьютера».

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *