По ту сторону RESET-а

Материал из Wiki.

Содержание


 

Что происходит с компьютером сразу после нажатия кнопки включения? Как "начинает жить" вся система? Кто "более первый"? Что делает процессор до снятия сигнала #RESET?

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

Вопросы "электрической" составляющей "жизни до старта" (т.е. до выдачи сигнала PowerGood) здесь опущены, их правильней рассмотреть в отдельной статье.

 


Кто "первый"?

- Странный вопрос - скажете. - А кто же еще - процессор, кто у нас главный? И что, есть еще кто-то в очереди?

Вынужден разочаровать: процессор - самое бесправное существо в системе, он стартует самым последним. А с учетом растущего семимильными шагами интеллекта "периферии" (в первую очередь - видеокарт) и чипсетов, вообще, рискует со временем превратиться в "модуль аппаратной поддержки Windows". :)

Всё просто и сложно одновременно. Прогресс делает свое чёрное дело. Каждый отдельный компонент компьютера усложняется в геометрической прогрессии. В результате, по сути, каждый такой элемент начинает приобретать черты того же компьютера, только "попроще". А какая у компьютера главная микросхема? Только не надо опять про процессор! Конечно же - BIOS. :) Итого, для настройки каждого отдельного элемента платы требуется где-то сохранять (причем желательно/обязательно - энергонезависимо) настройки сего элемента. А много пригодных для этого "мест" у компьютера? Верно, опять - биос. В результате и получается не совсем очевидный, но факт - современная система целиком и полностью зависима от BIOS. Нет, конечно, это было верно и раньше, однако во времена, "когда деревья были большими", мы знали, что от биоса требуется лишь, чтобы по адресу FFFF:FFF0 процессор мог взять первую команду POST. А теперь... Что же "теперь"?

Рассмотрим ситуацию на примере AMD K7 систем. Получив в наследие от Alpha 21264 шину EV6, оные, кроме гигантских плюсов, позволивших впоследствии выбраться "из грязи в князи" и засунуть на несколько лет за пояс саму Intel, получили и отсутствовавющую ранее потребность в инициализации самой шины (здесь и дальше под этим подразумевается установка её - шины - характеристик из энергонезависимой памяти ). А кто должен этим заниматься? Процессор? А каким образом? Ведь мы пару абзацов назад уже выяснили, что процессор - самый "последний", а шину-то как раз нужно проинициализировать в первую очередь. В результате получаем, что до старта процессора кто-то должен "всё подготовить". Так северному мосту пришлось "резко поумнеть". Теперь, после получения PWR_GOOD, через небольшую задержку с северного моста снимается #NB_RESET (сигнал сброса северного моста), в то же время процессор продолжает "отдыхать" (сигнал #RESET не снимается). За это время (до "просыпания" процессора - снятия также и #RESET-а) северный мост должен оперативненько вытащить из биоса нужные ему (т.е. мосту, а не процессору) настройки и подготовиться к запуску. Как только процессор, наконец, зафункционирует, северный мост посылает ему пакет данных (SIP), в котором задаются основные параметры самого процессора (в том числе КУ). И только после отработки этого пакета, северный мост, наконец, вынимает первую команду на исполнение процессору. Обычно (раньше) она находилась по адресу FFFF:FFF0, однако нонче это совершенно не обязательно (в чем можно самому убедиться, просто дизассемблировав "концовку"-boot block любого современного биоса).


Инициализация северного моста.

Попробуем разобраться "на пальцах". Зачем так сделали? Тут понятно: умной системе - умные железки, умным железкам - нужно как-то инициализироваться. Вот это они и делают в самом начале работы, еще в "доресетный" период. А что выйдет, если у северного моста "не получится" проинициализироваться корректно? А ничего и не будет - нули на посткарте. Именно подобную ситуацию мы частенько получаем, когда кажется, что "ну, всё же нормально - биос на месте, процессор и разъём и т.п.", а "не идёт". Кроме того, ежели в системе много всяческих "наворотов" (читай - как у Asus), то запросто может случиться ситуация, когда северный мост откажется работать с флэшками "не его" типа, предпочитая лишь какой-то конкретный тип оных (читай SST). Кроме того, подобные технологии (типо-флэше-зависимость) позволяет продвинутым производителям защищать свою продукцию от копирования "сторонними китайскими платостроителями". Более подробно ситуацию с вариантами защиты своих схемотехнических решений от плагиата рассмотрим в отдельной статье.


Роль Super I/O Chip (SIO)

Обычно все привыкли, что неисправность мультика проявляется на "более позднем" этапе (в процессе POST), обычно это POST-код 05h для Award и т.п. Однако в свете обрисованной выше инициализации моста явно становится видна зависимость последней уже и от мультика, который также напрямую связан с функционированием биоса. А в результате получаем, что в случае проблем с мультиком, мы можем получить не только "обычные 05" на посткарте, но и "непонятные" нули, потому как северный мост не сможет корректно пройти необходимую инициализацию. Соответственно, берем на заметку - при исправности цепей питания, биоса и мостов, нули на посткарте могут быть в том числе и из-за проблемного мультика.

Например у очень популярных м/с IT8712F-A, а также продолжений этой линейки IT8716F и IT8718F, в составе GPIO регистров часть сконфигурирована (по умолчанию) и используется производителями под порты VID-input и VID-output. Имеется флаг разрешения/запрещения копирования из Input в Output (default 0. VID output from input). Таким образом при старте системы на ШИМ-регулятор подается комбинация VID-ов не напрямую с процессора, а через "посредника".

А у остальных более новых плат такой-же процесс инициализирования? У шины P4?

Меня тоже интересует подробный процесс старта современных плат, особенно плат под LGA775 от Asus, серия P5. Кто нибудь знает?

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

Аватар пользователя Orest

maco : "onik1318
С вашими проблемами нужно не интересоваться процессом старта, а заниматься диагностикой
"
А как onik1318 может "заниматься диагностикой" , если не знаком с "процессом старта"
Вот в качестве учебы создал темку rom.by/forum/Uchimsja_Zapusk_MV


Не Asus , не LGA775 , но достаточно современно ;)
Если хорошо пойдет , продолжим ?

Orest писал(-а):
А как onik1318 может "заниматься диагностикой" , если не знаком с "процессом старта"
Так же, как и остальные - измерять напряжения, которые могут повлиять на работу диагностируемых блоков (они указаны в теме), выкладывать результаты.
Этого для начала обычно хватает, если кому-нибудь захочется заняться анализом.

Не FFFF:FFF0, а F000:FFF0! :)

Цитата:
Не FFFF:FFF0, а F000:FFF0!
Ошибаетесь:). Именно FFFF:FFF0 - Hi:Lo.
F000:FFF0 - Seg:Off ---> 1 Mbyte only.

Аватар пользователя savely

Как-то так

Цитата:

The instruction pointer is set to 0x0000FFF0. The first instruction executed after a reset is actually at 0xFFFFFFF0 because the i386 asserts the upper twelve address until the first intersegment (FAR) JMP or CALL instruction. When a JMP or CALL is executed, the upper twelve address lines are lowered and the processor begins executing in the first megabyte of memory.

F000h:FFF0h - верно для 8086. Сейчас реально все сложнее, но на уровне программной модели - совместимо (например, в смысле обеспечености того, что в реальном режиме JMP на F000:FFF0 попадет на первую инструкцию BIOS, т.е. C-A-D сработает как надо). А вот после аппаратного RESET задачей отдать процессору первую инструкцию там, где он ее ждет, занимается чипсет. А после первого JMP (который сразу) - мы имеем вменяемые CS:IP, указывающие на отмапленный в первый мег адресного пространства кусок BIOSа.

В принципе вообще конкретное состояние адресных ног может не иметь значения. К примеру, просто договорится, что по по первому (или N первых) циклу шины по обращению к памяти (по любому адресу) после аппаратного RESET сдается содержимое флешки с определенного адреса (в смысле адреса во флешке)... Ну, это я фантазирую уже.

А кому счас легко...

savely писал(-а):
А после первого JMP (который сразу)
Не обязательно сразу:). Т.е. инструкция по адресу FFFF:FFF0 не обязана быть jmp'ом.

Можно еще упомянуть о CS selector/base (initial value - F000/FFFF0000).

>Ошибаетесь. Именно FFFF:FFF0 - Hi:Lo.
Какое еще "Hi:Lo"? 32-битные адреса смещения записываются без двоеточия.

Цитата:
Какое еще "Hi:Lo"?
Самые обыкновенные:).

Цитата:
32-битные адреса смещения записываются без двоеточия
Если вы не привыкли к такой записи, то это не страшно:D. Кто-то отделяет старшее слово от младшего пробелом, кто-то точкой, кто-то двоеточием, кто-то не разделяет никак и т.д.

Впервые вижу такое разрезание смещений.
А двоеточие отделяет сегмент/селектор от смещения.

не бейте сильно ногами - но я вам покажу Интел и мы его можем пообсуждать ...

здесь видно, что стартуем мы с FFFFFFF0L адреса (RESET-AMI.JPG)
и уже ч/з пару команд (отчитавшись в порт 80 что "МЫ-ТУТ") проверяем
холодный ли ресет, т.е. на правильность кода по адресу F000:xxxxh

а смысл собственно в чем ... а в том, что при холодном ресете код
и по FFFFFFF0L и F000:xxxxh ОДИНАКОВ , но только до тех пор пока мы в конце (например перед jmp в MBR и пр.) не подкинем 64к RT кода в сегмент F000

если ресет холодный - придется инициализировать ВСЕ
иначе прыгаем (far16 ptr) в F000 сегмент (RT) т.е. все давно проинициализировано и "теплое"

RS:но это Интел, хотя и Atom+SCH (а в нем чипсет SCH инициализирует память ДО первой команды CPU)

ВложениеРазмер
Reset_-_AMI.JPG 81.07 КБ
Reset_-_Cold_Start_-_AMI.JPG 83.46 КБ

... иди туда, незнаю куда, возьми то, не знаю что ... (C) Русские народные сказки

64 кб bootblock'а или дизассемблированный текст (с комментариями) интереснее 160 кб картинок:).

bios71 писал(-а):
при холодном ресете код и по FFFFFFF0L и F000:xxxxh ОДИНАКОВ
Одинаковость кода не спасает от первого обращения по FFFFFFF0 - это достаточно хорошо описано в документации:).

"Одинаковость кода не спасает от первого обращения по FFFFFFF0 " - я собственно и сам в этом и глубоко убежден, иначе глупость получается, мы находясь в сегмнте F000 проверяем "а что в нем лежит?" , еслибы там был теплый код - то в нем по F000:FFF0 EA 5B E0 00 F0 jmp far16 ptr f000:e05B, т.е. то куда мы уходим из FFFFFF41L

и только сейчас заметил - far16

... иди туда, незнаю куда, возьми то, не знаю что ... (C) Русские народные сказки

Отправить комментарий

Содержание этого поля является приватным и не предназначено к показу.
  • Разрешённые HTML-теги: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd> <img>
  • You can use BBCode tags in the text. URLs will automatically be converted to links.

Подробнее о форматировании текста

Антибот - введите цифру.
Ленты новостей