Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Таблицы ACPI

51K
12 октября 2009 года
Тануки
15 / / 11.10.2009
Народ, требуется помощь.
Необходимо из ПМ прочитать таблицы ACPI.

Жду советов и предложений.
Заранее благодарен.
551
12 октября 2009 года
Pavia
357 / / 22.04.2004
А в чем проблема? Взял и прочитал. Используя операцию чтения. Какие тут еще могут быть советы.
349
12 октября 2009 года
Phantom-84
656 / / 27.10.2005
Pavia, вопрос в том, по какому адресу (адресам) читать :~)
260
12 октября 2009 года
Ramon
1.1K / / 16.08.2003
Цитата: Phantom-84
Pavia, вопрос в том, по какому адресу (адресам) читать :~)



А на этот вопрос есть только один ответ - RTFM.

51K
12 октября 2009 года
Тануки
15 / / 11.10.2009
Если нечего написать, то и писать не стоит.
Я спросил не потому, что мануал не читал, а потому, что не понял.
260
13 октября 2009 года
Ramon
1.1K / / 16.08.2003
Цитата: Тануки
Если нечего написать, то и писать не стоит.
Я спросил не потому, что мануал не читал, а потому, что не понял.



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

Итого: Возвращайтесь после прочтения, енотег.

51K
05 ноября 2009 года
Тануки
15 / / 11.10.2009
Есть у кого-то программа реализующая вход в PM и возврат в RM.
Очень прошу поделиться кодом.
349
05 ноября 2009 года
Phantom-84
656 / / 27.10.2005
Ищи по форуму. Лично я здесь уже несколько раз нечто подобное выкладывал. Вот одно из недавних, но уже на сисбине.
А вообще:
Код:
cli

  mov al,8Fh
  out 70h,al
  in al,71h

  mov eax,cr0
  or al,1
  mov cr0,eax ; вошли в PM

  and al,0FEh
  mov cr0,eax ; вернулись в RM

  mov al,0Fh
  out 70h,al
  in al,71h

  sti

  hlt
  jmp $-1

Поэтому будь точнее в озвучивании "тех. задания".
51K
05 ноября 2009 года
Тануки
15 / / 11.10.2009
Спасибо.
Меня больше интересует подготовка дескрипторов и разбиение сегментов(конкретно интересует сегмент стека) для этого....
Чем проще будет написано, тем лучше...
349
06 ноября 2009 года
Phantom-84
656 / / 27.10.2005
Сейчас все проще простого - сегмента стека как такового нет вообще. FLAT-модель памяти - слышал про такую? - это когда управление памяти фактически выполняется через механизм страничной переадресации. Соответственно основные дескрипторы настраиваются так, чтобы охватывать максимально возможное пространство, т.е. для 32-разрядной архитектуры - 4 гига (правда, есть такое понятие как локальные данные процесса/потока, для обращения к которым может использоваться дополнительный сегментный регистр, но это уже тонкости). Механизм фиксации переполнения и расширения стека реализуется через страничное исключение или в крайнем случае для стека ядра через аппаратный вызов новой служебной задачи. Хотя в принципе при использовании 32-разрядной архитектуры ты можешь "поиграть с сегментами". К примеру я как вариант использую ограничение прикладных сегментов с помощью поля лимита, хотя вместо этого может быть задействован и чисто страничный механизм защиты ядра. Короче тема обширная. Если вопросы не будут слишком скучными, могу и ответить.
51K
06 ноября 2009 года
Тануки
15 / / 11.10.2009
Можешь выложить код на асме - вход в РМ и возврат в RM?
Чтоб мне чётко понять сегменты и конструирование дескрипторов для обоих режимов.

Заранее благодарен.
297
06 ноября 2009 года
koodeer
1.2K / / 02.05.2009
Цитата: Тануки
Можешь выложить код на асме - вход в РМ и возврат в RM?
Чтоб мне чётко понять сегменты и конструирование дескрипторов для обоих режимов.

Заранее благодарен.



Нужный вам код (вход в защищённый режим и выход из него) имеется в книге "Основы языка ассемблера", К. Г. Финогенов.

51K
07 ноября 2009 года
Тануки
15 / / 11.10.2009
Большое спасибо.
349
07 ноября 2009 года
Phantom-84
656 / / 27.10.2005
Цитата:
Можешь выложить код на асме - вход в РМ и возврат в RM?

Сказал же, ищи по форуму. Делал это неоднократно. Сейчас возврат в RM не использую, поэтому подходящих исходников нет.

Цитата:
Чтоб мне чётко понять сегменты и конструирование дескрипторов для обоих режимов.

Ну, Ё! Возьми руководство Intel и посмотри. А вообще описание дескрипторов в сети не найдет только ленивый.

http://forum.codenet.ru/showthread.php?t=36150
http://forum.codenet.ru/showthread.php?t=42032&page=8

Все шаги для перехода в PM и для возврата в RM опять-таки можно найти в руководстве Intel. Учти, что для полной инициализации нужно также настроить регистры IDTR и TR. В LDTR можно загрузить NULL, т.к. LDT сейчас практически не используется.

51K
08 ноября 2009 года
Тануки
15 / / 11.10.2009
GDTR я настроил - с этим проблем нет.
Я не могу разобраться, как сформировать стек для РМ.
18K
08 ноября 2009 года
logree
102 / / 27.09.2008
Цитата:
как сформировать стек для РМ.



тут обсуждалось

349
08 ноября 2009 года
Phantom-84
656 / / 27.10.2005
Цитата:
Я не могу разобраться, как сформировать стек для РМ.

Сразу скажу, что растущие вниз сегменты для стеков сейчас практически не используются. Если тебя все-таки интересует, как правильно определить именно такой сегмент для стека, то могу рассказать. Если нет, то остается либо FLAT-модель (об этом я уже рассказывал), либо сегментная. В последнем случае просто определяешь сегмент данных, помещаешь его селектор в ss, устанавливаешь esp на его вершину. Это все.

18K
08 ноября 2009 года
logree
102 / / 27.09.2008
Цитата:
Сразу скажу, что растущие вниз сегменты для стеков сейчас практически не используются.

:eek:

Почему?

349
08 ноября 2009 года
Phantom-84
656 / / 27.10.2005
Потому что их использование противоречит FLAT-модели памяти В-)
349
08 ноября 2009 года
Phantom-84
656 / / 27.10.2005
На самом деле ты можешь сделать растущий вниз сегмент под границей 4 гига, тогда внутрисегментные адреса будут совпадать с линейными. Я когда-то использовал подобную разметку, но отказался от нее по той простой причине, что она не дает практически никаких преимуществ, а еще из-за введения поддержки многопоточности в режиме ядра, т.к. стеки ядра были перенесены совсем в другое место. Из нечетырехгигабайтных сегментов остались только прикладные сегменты кода и данных, ограничивающие своим лимитом прикладное пространство сверху. И то это лишь один из возможных вариантов защиты пространства ядра. При перекомпиляции можно указать и чисто страничный механизм защиты ядра.
51K
12 ноября 2009 года
Тануки
15 / / 11.10.2009
Ребята, есть следующий вопрос.
Таблица RSDT содержит адреса таблиц, а в поле длина указано количество этих таблиц. Я его читаю и там написано 003h.
Вопрос 1: Они считали с 0, т.е. таблиц - 4 или с 1(3 таблицы)?
Вопрос 2: Может кто знает, какие из таблиц - основные(Преподаватель сказал, что я 4 должен распечатать)?
260
12 ноября 2009 года
Ramon
1.1K / / 16.08.2003
Так уже лучше однако стандарт вы все равно не открывали ибо:

Цитата:

5.2.7 Root System Description Table (RSDT)

...

Length, in bytes, of the entire RSDT. The length implies the number of Entry fields (n) at the end of the table.



PS: Осознайте наконец необходимость чтения мануала ибо писан он именно для этого.

51K
12 ноября 2009 года
Тануки
15 / / 11.10.2009
Читал я его!!!!
Просто препод мне сказал, что их 4!!! основных должно быть.
В RSDT(поле длина) записано, что их 3..., а если просто подряд поля входов, то их вообще 5, но это, скорее всего, связано с тем, что не все таблицы есть в RSDT, а некоторые так просто "валяются"...
Но что-то мне подсказывает, что основные должны быть в RSDT.

В этом и вопрос. Если их там 3(т.е. он считаются с 1), то может ли RSDT считаться вместе с ними, а если их 4, то действительно ли они - основные...

Мне просто нужно узнать сигнатуры основных 4-х таблиц ACPI....
Какие из таблицы 5-5!!! и 5-6!!! основные в мануале не написано.
260
13 ноября 2009 года
Ramon
1.1K / / 16.08.2003
Те таблицы что идут со ссылками на внешние документы обязательными быть наверняка не могут ведь так? И еще, таблица же не будет присутствовать без того, что она описывает?

Так же там есть раздел:
Цитата:
5.1 Overview of the System Description Table Architecture

349
13 ноября 2009 года
Phantom-84
656 / / 27.10.2005
Цитата:
В RSDT(поле длина) записано, что их 3..., а если просто подряд поля входов, то их вообще 5, но это, скорее всего, связано с тем, что не все таблицы есть в RSDT, а некоторые так просто "валяются"...

Что значит 003h? Тебе же привели выдержку из руководства, в которой четко написано, что длина задается в байтах, включая заголовок. Т.е. если поле Length=40, то таблица одна, 44 - две, 48 - три и т.п. Задание насчет основных таблиц сформулировано весьма мутно, поэтому почему бы тебе упрепода не уточнить, что именно он имел в виду. Есть такое понятие как обязательные (т.е. всегда присутствующие) таблицы, но основные - ???

51K
13 ноября 2009 года
Тануки
15 / / 11.10.2009
Длина - Длина, в байтах, всего RSDT. Длина подразумевает число полей Entry (n) в конце таблицы. Т.е что-то мне подсказывает, что в этом поле записано число входов, т.е. таблиц, адреса которых записаны в RSDT.
Спросить у него не могу, т.к. в универ. нес сейчас не пускают.
Возможно, я не совсем корректно сформулировал.
Обязательные таблицы.
349
13 ноября 2009 года
Phantom-84
656 / / 27.10.2005
Что-то тебе подсказывает неправильно. Правильно так, как я сказал.
Цитата:
длина задается в байтах, включая заголовок


Если у тебя поле Length=3, то ищи ошибку, потому что для корректной RSDT этого в принципе быть не может, т.к. только заголовок занимает 36 байт.

349
13 ноября 2009 года
Phantom-84
656 / / 27.10.2005
Вот в качестве доказательства моих слов дамп из бокса.
 
Код:
Offset(h) 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F

01FF0000  52 53 44 54 2C 00 00 00 01 01 42 4F 43 48 53 20  RSDT,.....BOCHS
01FF0010  42 58 50 43 52 53 44 54 01 00 00 00 42 58 50 43  BXPCRSDT....BXPC
01FF0020  01 00 00 00 2C 00 FF 01 38 09 FF 01 46 41 43 50  ....,.я.8.я.FACP

Вариантов два: либо в боксе таблицы ACPI реализованы неправильно, что мало вероятно, либо я прав. Как видно, RSDT имеет размер 2Сh=44 байт (что указано в поле Length). И действительно после 44 байт уже начинается другая таблица - FACP.
51K
13 ноября 2009 года
Тануки
15 / / 11.10.2009
mov ecx,dword ptr ds:[ebx+4]
shr ecx,4

Я считал поле длины в есх.
Как там расположены данные? Просто, может, что у меня там 30h записано...

Но в любом случае, я опирался на описание из спецификации, т.е. я согласен, что могу быть неправым, но там же написано, что это число входов....
Length, in bytes, of the entire RSDT.
!The length implies the number of Entry fields (n) at the end of the table.!

И всё же, какие из таблиц являются обязательными? Я просто их выведу...
349
13 ноября 2009 года
Phantom-84
656 / / 27.10.2005
Ну, Ё, "входов" - это "entries". "entire" - это "весь". "imply" - здесь явно означает "включает".
А потом как ты считаешь кол-во входов! Правильно так:
 
Код:
sub ecx,36
  shr ecx,2
51K
13 ноября 2009 года
Тануки
15 / / 11.10.2009
Я со всем согласен, но есть два "но":
!The length implies the number of Entry fields (n) at the end of the table.! - вот это пояснение

Вот код. Если правильный, то я запутался и он выдает неадекватное число, если - нет, то как правильно?
mov ecx,1FFFFFh
mov ebx,000E0000h
RSDP_Scan:
cmp DWORD PTR ds:[ebx],' DSR'
jnz RSDP_Next
cmp DWORD PTR ds:[ebx+4],' RTP'
jz RSDP_Found
RSDP_Next:
inc ebx
cmp ebx,000FFFFFh
jnz RSDP_Scan
jmp RSD_NFound
RSDP_Found:
mov eax,DWORD PTR ds:[ebx+16]
mov ebx,eax
mov di,510
cmp DWORD PTR ds:[ebx],'TDSR'
jnz RSD_NFound
mov di,510
mov ax,0b800h
push ax
pop es
mov ecx,DWORD PTR ds:[ebx+4]
shr ecx,4
sub ecx,36
shr ecx,2
add esi,36
RSDT_Read:
mov edx,DWORD PTR ds:[ebx+esi]
mov ah,1Bh
mov al,BYTE PTR ds:[edx]
mov es:[di],ax
add di,2
mov al,BYTE PTR ds:[edx+1]
mov es:[di],ax
add di,2
mov al,BYTE PTR ds:[edx+2]
mov es:[di],ax
add di,2
mov al,BYTE PTR ds:[edx+3]
mov es:[di],ax
add di,2
mov al,'|'
mov es:[di],ax
add di,2
mov al,' '
mov es:[di],ax
add di,2
add esi,4
loop RSDT_Read
st1:
jmp st1
260
13 ноября 2009 года
Ramon
1.1K / / 16.08.2003
 
Код:
mov ecx,DWORD PTR ds:[ebx+4]
[COLOR="Red"]shr ecx,4[/COLOR]
sub ecx,36
shr ecx,2
add esi,36
RSDT_Read:


Нафег нужно, скажем дружно?

Цитата:
Length, in bytes, of the entire RSDT. The length implies the number of Entry fields (n) at the end of the table.



читать как

Цитата:
Длина в байтах всего RSDT. Длина включает массив полей Entry (в количестве n) в конце таблицы.

51K
13 ноября 2009 года
Тануки
15 / / 11.10.2009
Спасибо, был неправ, но осознал свою ошибку.:)
349
13 ноября 2009 года
Phantom-84
656 / / 27.10.2005
Во, мы тут уже и как переводчики засветились. Теперь от поклонников вообще отбоя не будет :~)

В коде присутствует как минимум еще одна неточность. RSDP нужно искать не только в диапазоне 0xE0000-0xFFFFF, но еще и в первом килобайте EBDA, причем RSDP должен начинаться на границе параграфа (16 байт), поэтому будет значительно эффективнее использовать шаг в 16 байт, а не как у тебя. Впрочем, лучше см. руководство.
51K
14 ноября 2009 года
Тануки
15 / / 11.10.2009
Ясно, уж переделал.
Но вопрос остаётся в силе...
Какие таблицы - обязательные?
349
14 ноября 2009 года
Phantom-84
656 / / 27.10.2005
Я знаю точно, что FACP (FADT) является обязательной, в ней вроде бы - Differentiated Table, естественно RSDT, RSDP в принципе тоже является таблицей. Можешь вообще реализовать навигацию по всем присутствующим таблицам. Уверен, преподаватель это оценит :~)
51K
14 ноября 2009 года
Тануки
15 / / 11.10.2009
Я, вообще, тоже думаю, что имелись ввиду FACP(а в ней FADT и FACS), ну а вместе с RSDT - 4...
В общем, всем большое спасибо.
55K
25 ноября 2009 года
RobinzonMoscow
1 / / 20.11.2009
Нашел скриптец вывода данных из таблицы прикрутил - пашет, а потом решил сделать рандовизированный вывод 15 любых записей из таблицы - не получается. По вебу искал примеры - ниче не нашел, что можно было бы адаптировать
Код следующий:

Код:
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог