Универсальное чтение BIOS из BIOS

Решил вынести в отдельную тему, хотя может можно было кинуть в теоретические вопросы. Ну если что , перекинте... 

Облазил форум, многие темы посвящены конкретной плате, а у меня вопрос следующий.
Очень хочется просто прочитать BIOS. Не перезаписать, а просто прочитать. Да, уточнение, чтение на этапе загрузки, то есть осуществляется из кода BIOS платы расширения. Прочитав умные книги, выяснил, что как минимум у AWARD и AMI BIOS отображается на область памяти (FFFFFFFFh - объем чипа BIOS). То есть возникает резонное предположение о возможности просканировать эту область памяти и соответственно быть отправленным южным мостом в чип BIOS (хотя может он уже в этот момент туда и не отправляет). Однако где-то в этой области возникают непонятки, в смысле, то ли что-то там отображается из внутренних регистров чипа, то ли код распакованного BIOS меняется после каждой загрузки, но в этой области памяти некоторые участки изменяются при перезагрузке, хотя остальные совпадают с образом, скачанным с сайта производителя. Кстати, как отображается память BIOS у других производителей, в том числе IBM? Кто дизассемблировал, подскажите!
В общем, вопрос следующий. Как можно просто прочитать BIOS на этапе работы самого BIOS ( то есть при выполнении  BIOS платы расширения), можно ли разрешить чтение напрямую из флеш-биос путем программирования его регистров, можно ли как-то универсализировать эту процедуру, хотя бы в рамках одного производителя (используются может одни и те же регистры для разрешения чтения)??? Или это вообще гиблое дело???
Пожалуйста, высказывайте мнения, Все интересно!!!

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

BIB

Цитата:
Документация доступна, но к сожалению не всех производителей.

помечтайте. реальный пример - открываем схему (причем референсную!!!) от Интела на 875 и видим сигнал ICH_SYNC. А теперь найдите мне его в даташите на мост. Слабо? Знаете - мне тоже. Зато вот в даташитах на 9-ю линейку чипсетов он есть и вполне документирован... Так что явно, что документация НЕполная.

Цитата:
И насколько я себе представляю программирование железа в этом ключе, то это можно так-же понять раздизасмив код биоса и имея перед носом даташит на чипсет. (тут я могу заблуждаться, так что критика приветствуется )

вообще-то я могу сказать одно - документации КАТАСТРОФИЧЕСКИ не хватает. Чего только стоят MSR. Их ведь намного больше, чем есть в даташитах, которые можно нахаляву скачать с АМД и Интела... даже более того - есть запароленные MSR (для работы с которыми надо сформировать спец. значения в опр. регистрах). И что более печально - не любая NDAшная дока полная... В том смысле, что есть доки для программеров драйверов, есть доки для разрабов плат, а есть доки для разработчиков БИОСов... И чтобы достать сразу полный комплект обычному смертному придется просто вылезти из кожи вон...
Цитата:
Так-же можно исходить из того, что разработчики люди ленивые и будут использовать те-же GPIO , что и в других моделях.

совершенно не обязательно. Реф. дизайн и большинство мамок будут утилизировать одну схемы, а бренды типа ASUS скорее всего придумают что-то свое. на то GPIO и GPIO, что регистры "general purpose", т.е. общего назначения - юзай как знаешь....

Аццкий ромбовод {:€
Я пока не волшебник - я только учусь! :-P

Спасибо всем высказавшимся! Особенно Apple_rom и еще раз ему за поддержку Runiflash!!! То, что он делает достойно самого высшего уважения!!! Respect! ( Кстати, Apple_rom, туда в топик я добавил мамку и вопрос:))

Root, совершенно с тобой согласен по части того, что доки неполные. Это большая проблема и бороться с ней нужно сообща. Кто что откопал в BIOS, кто в похожей дате, кто в схеме. Типа базы знаний.


Пример - есть даташит на 694X, так вот там нету обозначения регистров 50-51 половины, которые конфигурируют работу с процом! А в дате 693A есть волшебная табличка. А в дате 693 ещё пара пунктов в других регистрах. Очевидно, что в более новом 694 это никуда не ушло, не убралось и явно не "не используется". Просто пудрят мозг.

А уж Интел - вообще красавцы! Попробуй в дате на i900 чипсеты найти тайминги вроде Trfc, Trd и подобные. Не можешь? И я не могу

Зато качаем Mobile (!) Intel 915 (или 945) chipset family и видим там всё что нам нужно. А по простому сравнению доступных и там и там таймингов и их значений можно убедиться в полном отсутствии разницы во всей линейке 915, 925, 945, 955, 975 и мобильных 915 и 945. 965 переделан и уже другого поколения, потому есть различия. Но и на старуху найдётся 965 Mobile



К чему я ? Грустно всё это. Приходится потом и кровью добывать нужные знания. А заодно убеждаться, что решаемые проблемы являются искусственными и зачастую специальными ограничениями для стимуляции покупки дорогих и "правильных, безглючных" плат. Что и с VIA было - выпускать быстрые платы на дешёвом чипсете было можно, но это было невыгодно. И специальным торможениям сделали рефлекс по Павлову - хочешь скорость - плати деньги.

Вместе мы - www.ROM.by!

Господа-товарищи, хотелось бы снова поднять эту тему.
Один специалист утверждает, что Bios должен отображаться на область около 4Гб без изменений.
Вроде как новая флеш-память для хранения BIOS так устроена (по SPI, кажется, и одна из 5ти областей там под BIOS и этот BIOS отображается как раз на область около 4Гб).
В принципе, возможно, это так. Я считывал по несколько мегабайт оттуда и при неизменности параметров BIOS в основном ничего не меняется. За исключением одного НО!!!!
Есть платы, на которых меняются несколько (до 100) байт, причём это какие-то счётчики, так как их значения увеличиваются от загрузки к загрузке. Так же существует некоторая датавременная группа, которая меняется, если даже просто зайти в BIOS и выйти, ничего не сохраняя.

Скажите, как сейчас обстоят дела с образом BIOS около 4Гб? И можно ли мне доказать ему (специалисту), что BIOS там не есть точная копия реального bIOS?
И попутный вопрос - так как реально-то меняется от загрузки к загрузке только ничтожно малая от всего BIOS часть байт, то как же всё-таки там (около 4Гб) настроена область памяти на чтение/запись? Ведь не во флеш-память он постоянно заносит изменения после перезагрузок, иначе он совершит небезопасные действия, да и ресурс у флеш-памяти ограничен...

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

По этому поводу в утилите FoxConn LiveUpdate есть ini файл - в котором много интересного.
[COMMON]
OpCOdeCount=1
[SouthBridgeID]
0x2410 = ICH
0x2420 = ICH0
0x2440 = ICH2
0x244C = ICH2
0x24C0 = ICH4
0x24CC = ICH4
0x24D0 = ICH5
0x2640 = ICH6
0x2642 = ICH6
0x27B8 = ICH7
0x27B9 = ICH7
0x27BD = ICH7
0x27B0 = ICH7
0x2810 = ICH8
0x2811 = ICH8
0x2812 = ICH8
0x2814 = ICH8
0x2815 = ICH8
0x2910 = ICH9
0x2911 = ICH9
0x2912 = ICH9
0x2914 = ICH9
0x2916 = ICH9
0x2918 = ICH9
0x3A14 = ICH10
0x3A1A = ICH10
[ICH]
BCRegister=0x4e
SupportSPI=N
[ICH0]
BCRregister=0x4e
SupportSPI=N
[ICH2]
BCRregister=0x4e
SupportSPI=N
[ICH4]
BCRregister=0x4e
SupportSPI=N
[ICH5]
BCRregister=0x4e
SupportSPI=N
[ICH6]
BCRregister=0xdc
SupportSPI=N
[ICH7]
;In LPC PCI configuration space
BCRregister=0xdc
RCBARegister=0xf0
GPIOBaseAddressRegister=0x48
GPIOControlRegister=0x4c
;SPIBARAddress=0x3020
GCSRegister=0x3410
SupportSPI=Y
ProgramData=0x02
ReadData=0x03
ReadStatus=0x05
WriteStatus=0x01
WriteDisable=0x04
WriteEnable=0x06
JEDECID=0x9f

[ICH8]
;In LPC PCI configuration space
BCRregister=0xdc
RCBARegister=0xf0
GPIOBaseAddressRegister=0x48
GPIOControlRegister=0x4c
;
SPIBARAddress=0x3020
GCSRegister=0x3410
SupportSPI=Y
ProgramData=0x02
ReadData=0x03
ReadStatus=0x05
WriteStatus=0x01
WriteDisable=0x04
WriteEnable=0x06
EnableWriteStatus=0x50
JEDECID=0x9f

[ICH9]
BCRregister=0xdc
RCBARegister=0xf0
SPIBARAddress=0x3800
GCSRegister=0x3410
SupportSPI=Y
ProgramData=0x02
ReadData=0x03
ReadStatus=0x05
WriteStatus=0x01
WriteDisable=0x04
WriteEnable=0x06
EnableWriteStatus=0x50
JEDECID=0x9f
нарезка оттуда
вот сам ini
rapidshare.com/files/375775076/FoxConn_LiveUpdate_Config.ini.zip

Дрессируем коров :)

А поконкретнее... Что это мне даёт...
Что-то я не силён... И если не привязываться к FoxConn...

lsvmo писал(-а):
Что это мне даёт
Адреса регистров и необходимые данные для действий с флешкой.

lsvmo писал(-а):
И если не привязываться к FoxConn
В общем-то Foxconn тут как пример приведен. Привязка в данном случае идет к чипсетам от Intel:).

По поводу отображения содержимого флешки на область в конце 4 Гб - это в самом начале, потом по этим адресам может быть доступно все, что угодно. IMHO стоит почитать документацию на те же Intel'овские чипсеты (как наиболее доступную и полную).

Цитата:
По поводу отображения содержимого флешки на область в конце 4 Гб - это в самом начале, потом по этим адресам может быть доступно все, что угодно

Дело в том, что человек этот (спец мой) прочитал кучу этих интеловских документов. И он говорит, что область возле 4 Гб резервируется под флеш память на всё время работы. Другой вопрос, что Bios занимает не всю флеш, а только часть. Другие части могут быть отведены под изменяющиеся вещи. Но BIOS не должен изменяться....
Скажите, а чипсет определяет отображение памяти побайтно или областями. я к тому , что может один байт определён на чтение (отображение байта BIOS), следующий нет, а потом опять байт на чтение...

lsvmo писал(-а):
Дело в том, что человек этот (спец мой) прочитал кучу этих интеловских документов. И он говорит, что область возле 4 Гб резервируется под флеш память на всё время работы.
Что-нибудь этакое - документ за №316966-002 (Intel® 3 Series Express Chipset Family):
Цитата:
3.3 PCI Memory Address Range (TOLUD – 4GB)
This address range, from the top of low usable DRAM (TOLUD) to 4 GB is normally mapped to the DMI Interface.
........

Figure 3-4. PCI Memory Address Range

FFFF_FFFFh ----------- 4 GB
High BIOS
FFE0_0000h ----------- (4 GB – 2 MB)
..............

3.3.4 High BIOS Area
The top 2 MB (FFE0_0000h – FFFF_FFFFh) of the PCI Memory Address Range is reserved for System BIOS (High BIOS), extended BIOS for PCI devices, and the A20 alias of the system BIOS. The processor begins execution from the High BIOS after reset. This region is mapped to DMI Interface so that the upper subset of this region aliases to 16 MB – 256 KB range. The actual address space required for the BIOS is less than 2 MB but the minimum processor MTRR range for this region is 2 MB so that full 2 MB must be considered.

3.4.1 Memory Re-claim Background
The following are examples of Memory Mapped IO devices are typically located below 4 GB:
• High BIOS
• HSEG
• TSEG
• Graphics stolen
• XAPIC
• Local APIC
• FSB Interrupts
• Mbase/Mlimit
• Memory-mapped I/O space that supports only 32 B addressing
The (G)MCH provides the capability to re-claim the physical memory overlapped by the Memory Mapped IO logical address space. The (G)MCH re-maps physical memory from the Top of Low Memory (TOLUD) boundary up to the 4 GB boundary to an equivalent sized logical address range located just below the Intel ME's stolen memory.

3.4.2 Memory Reclaiming
An incoming address (referred to as a logical address) is checked to see if it falls in the memory re-map window. The bottom of the re-map window is defined by the value in the RECLAIMBASE register. The top of the re-map window is defined by the value in the RECLAIMLIMIT register. An address that falls within this window is reclaimed to the physical memory starting at the address defined by the TOLUD register. The TOLUD register must be 64 MB aligned when RECLAIM is enabled, but can be 1 MB aligned when reclaim is disabled.
Т.е. резервирование наличествует, но в некоторых случаях чипсет может обеспечить ремап памяти. Хотя я могу не совсем верно интерпретировать кусок документации.

lsvmo писал(-а):
чипсет определяет отображение памяти побайтно или областями
Областями:). Побайтно - это сильно роскошно, регистров не хватит:).

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

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

Откройте ему (специалисту вашему) дамп BIOS и область памяти в верхних адресах каким-нибудь RW Everything или HWDirect - пусть сравнит сам.
WinHex тоже можно вроде.
Или Norton diskeditor под DOS наложите скопированный из верхних адресов оперативки дамп на тот же BIOS в файле - изменения подсветятся..

Дрессируем коров :)

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

Содержание этого поля является приватным и не предназначено к показу.
  • Разрешённые 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.

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

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