21 August 2011 г., 05:59
Цитата
L-I-O-N
ну почему, насколько я понял, в АМI биосе есть нестираемая область с этим аварийным загрузчиком, именно по этому я так упорно искал комбинацию ее запуска. А раз флешеры в нее не пишут - то и помочь она может всегда и везде. Ну разве что только при физическом крахе микросхемы не получится
К сожалению, поняли Вы неправильно. Никаких нестираемых областей нет - чип доступен для записи полностью. Если рассмотреть Ваш случай, то выглядит это так:
1) Одна из частей BIOS называется начальный загрузчик (bootloader), он располагается в последних 64 КБ микросхемы. В загрузчике находится "точка входа", с которой процессор начинает выполнение кода после включения питания или сброса. В нём же находится и код этой самой EZ Flash, которая умеет прошивать микросхему.
2) Сама микросхема подключена к интерфейсу SPI EC (Embedded Controller, мультиконтроллер), т.е. прямого взаимодействия с адресным пространством процессора не имеет. Встроенное ПО (прошивка) EC находится в первых 61 КБ той же микросхемы.
3) Сразу после начала работы процессора, код загрузчика инициализирует несколько наиболее важных обработчиков прерываний (в том числе, и клавиатурного), контроллер оперативной памяти и переписывает в память модули BIOS, распаковывая сжатые "на лету" - не "сплошным куском", а разные части BIOS по разным адресам. После этого, доступ к микросхеме прекращается (технология shadow). Таким образом обеспечивается и быстрый доступ к коду/данным BIOS: с переходом на SPI-интерфейс микросхем без shadow всё было бы неприемлемо медленно.
4) Дальше начинается инициализация остального оборудования. Так как модуль BIOS, в котором находится эта процедура, повреждён, завершиться она не может (там нечему завершаться из-за "сдвинутых" адресов!). Поэтому, через непродолжительное время, процессор уходит в состояние отключения (shutdown) - ведь часть точек входа в обработчики прерываний тоже находятся в повреждённом модуле. В общем, "всё висит".
5) Когда Вы нажимаете определённую комбинацию клавиш сразу после включения, загрузчик воспринимает это, как команду перехода в режим восстановления BIOS. Он отказывается от выполнения п. 4), а вместо этого инициализирует доступные дисковые устройства и, используя сильно упрощённый код для работы с FAT16, пытается найти на носителях файл с жёстко определённым именем. Если такой файл найден, он читается в ОЗУ.
6) Осуществив ("в меру сил", учитывая жёсткое ограничение на размер кода) проверку считанной информации на корректность, загрузчик записывает её в микросхему, используя хитроумную методику взаимодействия с ней через EC. Файл записывается целиком, но по частям: сначала основной BIOS, затем bootloader, и, в самом конце - прошивка EC. После этой процедуры, очевидно, необходимо отключение/включение питания для рестарта программы EC и перехода к п. 3). Обычно, в процессе такой прошивки на экран выдаются простые сообщения, в которых рассказывается о том, что в данный момент происходит.
Из этого описания видно, что, теоретически, необратимый (не исправляемый без программатора) вариант будет иметь место только тогда, когда повреждён код загрузчика. Ну и, естественно, если повреждена прошивка EC - в этом случае и говорить не о чем, тогда даже питание памяти и процессора будет некому включить... Наши же модификации, даже с ошибками, не затрагивают ни того, ни другого (кроме ряда моих сборок для T91MT, с изменениями в прошивке EC).
Это - теоретически. На практике же, всё, к сожалению, хуже. Я это объясняю особенностями реализации процедур управления дисковыми устройствами и дисплеем: предполагаю, что в BIOS некоторых моделей часть этих процедур разработчики не смогли вместить в загрузчик (там, действительно, всё очень напряжённо с размером!) и решили поместить их в основной модуль. Поэтому, если он повреждён, то ничего не получается. Другой класс проблем - сбои на носителях, с которых производится прошивка. Некорректное изменение хотя бы одного бита в прошивке EC (начало файла) с вероятностью в 90% приводит к полной неработоспособности аппарата.