Автор: Unknown BIOS (не проверено) , 2 ноября 2007
На плате MSI MS-6380 (KT333+8233, AMIBIOSCORE700) не работает Suspend to RAM под линуксом (под Win2000 работает).
Что бы разобраться, в чем дело открыл бутблок в ИДА.
jnz POST_14 ; jmp if not STR F000:DA13 B0 11 mov al, 11h ; POST 11 F000:DA13 ; Next, checking if End or Ins keys were pressed F000:DA13 ; during power on.Initializing CMOS RAM if the F000:DA13 ; Initialize CMOS RAM in every boot AMIBIOS POST F000:DA13 ; option was set in AMIBCP or the End key was pressed F000:DA15 BE 1B DA mov si, 0DA1Bh F000:DA18 E9 49 02 jmp debug_80 .... POST_13: ; DATA XREF: seg000:off_FDAE6o F000:DAE8 B0 13 mov al, 13h F000:DAEA BE F0 DA mov si, offset loc_FDAF0 ; STR WakeUp routine? F000:DAED E9 74 01 jmp debug_80 F000:DAF0 ; --------------------------------------------------------------------------- F000:DAF0 F000:DAF0 loc_FDAF0: ; DATA XREF: seg000:DAEAo F000:DAF0 EA 97 80 00 B0 jmp far ptr 0B000h:8097h ; STR WakeUp routine? F000:DAF5 ; --------------------------------------------------------------------------- F000:DAF5 F000:DAF5 POST_14: ; CODE XREF: seg000:DA0Fj F000:DAF5 B0 14 mov al, 14h ; 8254 timer test will begin next F000:DAF7 BE FD DA mov si, 0DAFDh F000:DAFA E9 67 01 jmp debug_80

После старта проверяется модус из которого вышел ПК, если не S3, переход (jnz POST_14) к POST_14.
В другом случае исполняется POST 11-13.
И доходит до F000:DAF0 jmp far ptr 0B000h:8097h.
Теперь вопрос.
0B000h:8097 это Video-RAM, или там находится STR WakeUp routine? В ДОС эта область вроде исползуется(смотрел с debug.exe).
У кого есть идеи почему не работает в линуксе? Принцип одинаковый (в FACS записывается WakeUp vektor и т. д.). Или линукс затирает 0B000h:хххх?
Ещё вопрос. Как считает АМИ чексум бутблока? Я пока нашел, что после копирования всех 256кб, проверяется 32-бит-сумма этих 256кб, если не так, то переход к POST E0 (bootblock recovery). Это единствинная проверка?

Ещё просьба, если есть наработки по Reverse Engineering, выложите их. А то сколько раз велосипед изобретается снова, и ещё разных моделей.

Я сам собираюсь выложить, когда время будет (в принципе ничего особенного), например:
write_PCI: ; CODE XREF: seg000:D94Fj ; seg000:D97Bj db 66h ; Function: write dword to PCI bswap edx ; Input: DX = Dev. and Func. ; AH = register; ECX = value ; Destroy: EAX (Highword o.), ; EDX (Highword only) mov dx, ax db 66h bswap edx mov al, 80h ; '� mov ah, dh db 66h bswap eax mov ah, dl db 66h bswap edx mov al, dh and al, 0FCh db 66h bswap edx mov dx, 0CF8h out dx, eax shr eax, 8 mov dx, 0CFCh xchg eax, ecx out dx, eax xchg eax, ecx db 66h bswap edx xchg ax, dx jmp di

Обратите внимание на bswap и xchg, запутаешся, зато AX и DX можно дальше использовать.
Содержимое данного поля является приватным и не предназначено для показа.

BBCode

  • HTML-теги не обрабатываются и показываются как обычный текст
  • You may use the following BBCode tags:
    • [align]
    • [b]
    • [code]
    • [color]
    • [font]
    • [hr]
    • [i]
    • [img]
    • [list]
    • [quote]
    • [s]
    • [size]
    • [spoiler]
    • [sub]
    • [sup]
    • [table]
    • [u]
    • [url]
  • Адреса веб-страниц и email-адреса преобразовываются в ссылки автоматически.

apple_rom

18 лет 3 месяца назад

Цитата:
0B000h:8097 это Video-RAM, или там находится STR WakeUp routine?

Это SMRAM, там располагаются все Power Management процедуры.

Oep

18 лет 3 месяца назад

Скачал материал по SMM, получается a0000-bffff SMRAM (параллельно с VRAM). Линукс вроде SMM не использует, регистры востанавливаются вручную.
В SMRAM находится x86-код, его можно "достать"?
У меня уже была идея, сделать переход на свою процедуру, которая найдёт wakeup vector и сделает переход.
Надо только знать в каком состоянии должен быть процессор.
Надо поковырять другой АМИ, с которым работает, я с АВАРД много не работал. А АМИ иногда слишком умные.
Кстати, есть где описание MSR атлона?

apple_rom

18 лет 3 месяца назад

Цитата:
Линукс вроде SMM не использует

Точно также как и Windows, и любая другая ОС.
Цитата:
В SMRAM находится x86-код, его можно "достать"?

Можно - либо распаковать модуль BIOS, либо скопировавть "ручками" несложной программулькой.
Цитата:
Кстати, есть где описание MSR атлона?

www.amd.com

SWmail (не проверено)

18 лет 3 месяца назад

*** Oep
Дай пожалуйста ссылку на материал по SMM. Тема интересная. У меня те же чипы, та же проблема. Только материнка ноутбучная. Хочу присоединиться к теме.

apple_rom

18 лет 3 месяца назад

Цитата:
0B000h:8097


00008097: jmp 00000A0EA

...

0000A0EA: mov ax,0A000
0000A0ED: mov es,ax
0000A0EF: mov di,01000
0000A0F2: mov ax,03000
0000A0F5: mov ds,ax
...
0000A192: mov ax,0F440
0000A195: call Get_PCI
0000A198: mov edx,ebp
0000A19B: jmp 0F000:0FFF0
0000A1A0: retn

Oep

18 лет 3 месяца назад

TO SWmail:
http://www.rcollins.org/ddj/Mar97/Mar97.html
Там много чего интересного. Всякие там "Developer’s Manual" можно найти через Гугл.


Открывал биос от MSI 865pe-neo2-p(бутблок 64КБ, ужас), тот же jmp far ptr 0B000h:8097h.
Открывал биос от Asus A7V133(AWARD), с которым работает без всякого колдовства.
После АМИ трудновато (многое знакомо), у АМИ открываеш 16КБ бутблока, проходиш его, контроль
переходит к Runtime Interface, Runtime Interface распаковывает Runtime, контроль переходит к Runtime ...
В АВАРД, начало F000:E0xx, потом ROMCALL F000:3xxx ... S3 Resume пока не нашёл.

Я пробовал посмотреть (это был бы лёгкий путь) по адресу B000h:8097h, сразу после STR,
там была какая-то чепуха. Всякие там видео биос видно, а это нет. Читал, что затирается,
наверное чтоб враги не узнали.

А код добыт распаковыванием биоса?
В каком модуле, это делается? Откуда куда копируется/распаковывается?
Конец не интересен,
0000A19B: jmp 0F000:0FFF0
это должен быть soft reset, если S3 resume, не удалось.
А адреса 0000AXXX странные.

apple_rom

18 лет 3 месяца назад

Цитата:
А код добыт распаковыванием биоса?

Ну, явно не запуском на Вашей плате. :) Распаковать модуль из BIOS проще да и прямое чтение из SMRAM не часто востребовано.
Цитата:
В каком модуле, это делается?

Notebook, modul ID = 0Ah.

Oep

18 лет 3 месяца назад

Ну, явно не запуском на Вашей плате.

Ну можно было предположить, что снято на плате с АМИ.
Распаковать модуль из BIOS проще...

Ну кому как, мне иногда проще сделать дамп. А то надо найти модуль и место. Глаз у меня ещё не тот.

А за модуль спасибо (модуль Notebook, никогда бы не подумал, хотя вроде вроде что-то было с Power Management), значит не надо будет портачить в бутблоке. Дома посмотрю.