Как найти Plug and Play BIOS в системе.

Тема в разделе "WASM.NT.KERNEL", создана пользователем Linikn, 13 мар 2007.

  1. Linikn

    Linikn New Member

    Публикаций:
    0
    Регистрация:
    25 авг 2004
    Сообщения:
    12
    Адрес:
    Belarus
    В документации по PnP BIOS сказано что нужно искать сигнатуру "$PnP" в системной памяти начиная с адреса 0xF0000h и закнчивая адресом 0xFFFFFh.Если находим эту сигнатуру то значит и PnP BIOS в системе присутствует. Но это физические адреса. Вопрос собственно состоит в том как в Windows преобразовать физические адреса в линейные, для сканирования этой области в Protected Mode?
     
  2. _BC_

    _BC_ БЦ

    Публикаций:
    0
    Регистрация:
    20 янв 2005
    Сообщения:
    759
    на 9х -- _MapPhysToLinear, на NT/XP -- MmMapIoSpace
     
  3. Linikn

    Linikn New Member

    Публикаций:
    0
    Регистрация:
    25 авг 2004
    Сообщения:
    12
    Адрес:
    Belarus
    MmMapIoSpace похоже то что нужно, хотя ещё не проверял.

    Ещё хотелось бы узнать нужно ли создавать свой сегмент чтобы сканировать описаные
    выше адреса?
     
  4. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    можно просто просканить каталог страниц в CR3 и GDT/LDT =) хотя апи, конечно, лучше.

    посмотри в GDT какие записи есть, может найдешь подходящий себе сегмент там

    А вообще же вроде можно через MDL спроецировать себе в адресное пространство страницы с этих адресов.. тока я хз как задать в MDL физический адрес
     
  5. Nouzui

    Nouzui New Member

    Публикаций:
    0
    Регистрация:
    17 ноя 2006
    Сообщения:
    856
    как вариант открыть \device\physicalmemory
     
  6. Nouzui

    Nouzui New Member

    Публикаций:
    0
    Регистрация:
    17 ноя 2006
    Сообщения:
    856
    кстати,оффтоп: с трудом представляю себе не PnP биос на мамках, выпущенных за последние пять лет
     
  7. _BC_

    _BC_ БЦ

    Публикаций:
    0
    Регистрация:
    20 янв 2005
    Сообщения:
    759
    вообще-то фраза "найти Plug and Play BIOS в системе" имеет другое значение (и назначение) в контексте
     
  8. Nouzui

    Nouzui New Member

    Публикаций:
    0
    Регистрация:
    17 ноя 2006
    Сообщения:
    856
    PnPшную таблицу, что ли
     
  9. Linikn

    Linikn New Member

    Публикаций:
    0
    Регистрация:
    25 авг 2004
    Сообщения:
    12
    Адрес:
    Belarus
    Да именно PnP таблицу. Мне это нужно для получения всех системных устройств расположеных
    на ISA моту. Других способов получить список системных устройств(системные часы,контроллер
    клавиатуры, контроллер прерываний и т.д) я попросту не знаю и есть ли они вообще. Способ конфигурирования устройств изложеный в PCI спецификации ,данные устройства не определяет.

    Кстати на счёт регистра C3 - в нём же физический адрес, т.е опять проблемы!
    Может быть у кого есть примеры на эту тему, т.к теорию я знаю.
     
  10. Y_Mur

    Y_Mur Active Member

    Публикаций:
    0
    Регистрация:
    6 сен 2006
    Сообщения:
    2.494
    А они разве РпР?
    Насколько я помню их конфигурация подробно расписана в ДОС и изменению конфигурированием PCI не подлежит. Или мои сведения устарели?

    Хотя загляни в В. Кулаков. "Программирование на аппаратном уровне", он пишет, что они через PCI доступны и кое какие примеры кода у него найдёшь.
     
  11. Nouzui

    Nouzui New Member

    Публикаций:
    0
    Регистрация:
    17 ноя 2006
    Сообщения:
    856
    потому что они SuperIOшные
    зато вроде действительно PnP
    а зачем те СR3? MmMapIoSpace не подходит?
     
  12. Linikn

    Linikn New Member

    Публикаций:
    0
    Регистрация:
    25 авг 2004
    Сообщения:
    12
    Адрес:
    Belarus
    Я так понимаю при загрузке драйвера для него создаётся селектор и соответственно дескриптор
    с определённым начальным адресом и следовательно функция MmMapIoSpace споецирует адреса
    (наверное) относительно этого начального адреса.

    И вообще MmMapIoSpace возвращает линейные адреса относительно чего? (я имею ввиду
    относительно какого селектора если это правильно) или она попросту прдбирает возвращаемые линейные адреса так что при обращении по ним из драйвера они будут мапиться на необходимые физические? Т.е она возвращает адреса относительно "контекста" процесса который её вызывает??

    Да, что-то я совсем запутался.

    Кстате SuperIOшные это что такое?

    Y_Mur:
    Да они имеют стандартные ISA(EISA) интерфейсы и их можно использовать для програмирования
    конкрктного устройства. Но здесь реч идёт больше о конфигурировании т.е программа должна считать всю информацию об установленном железе, т.е есть ли вообще COM ,LPT порты ,IrD контроллеры и т.д или их нет в системе. Дмаю понятно о чём я. Это как раз и позволяют сделать
    PnP BIOS функции.
     
  13. Nouzui

    Nouzui New Member

    Публикаций:
    0
    Регистрация:
    17 ноя 2006
    Сообщения:
    856
    SuperIO - микросхема, содержащая в себе контроллеры переферийных устройств (мышь, кейборд, флопповод, COM, LPT.. обычно она же содержит CMOS и RTC). Подключается как правило к южному чипсету по LPC

    и перестань париться насчет селекторов, пользуйся уже загружеными в сегментными регистрами.. все предусмотренно
     
  14. Y_Mur

    Y_Mur Active Member

    Публикаций:
    0
    Регистрация:
    6 сен 2006
    Сообщения:
    2.494
    Linikn
    Тогда точно В. Кулаков. "Программирование на аппаратном уровне" глава 3
    там и подробное описание аргументов PCI биос функций и тблица коды классов в которой все перечислено, а даже примеры на асме (хотя и досовые)
     
  15. Linikn

    Linikn New Member

    Публикаций:
    0
    Регистрация:
    25 авг 2004
    Сообщения:
    12
    Адрес:
    Belarus
    Всем огромное спасибо. Используя MmMapIoSpace я всётаки нашёл PnP заголовок. Форум можно вобщем то закрывать, но всётаки есть вопрос который я бы так сказал косается этой темы.
    В документации по Intel сказано что в GDTR содержится "линейный" базовый адрес GDT. т.е опять таки относительно чего?( ведь линейный адрес = седлектор + смещение) и следовательно используя этот базовый адрес в своём
    драйвере приведёт к обращению к "левому" участку памяти (получится
    "левый" участок памяти = селектор драйвера + базовый адрес GDT). Это всё чисто мои предположения может быть я и не прав, но всё же согласно документации получается именно такая картина. Как же тогда правильно считывать GDT?

    Y_Mur:
    А эту книгу где нибудь в сети слить можно(имею в виду электронный вариант)? Хотелось бы взглянуть на то что там написано.
     
  16. Pavia

    Pavia Well-Known Member

    Публикаций:
    0
    Регистрация:
    17 июн 2003
    Сообщения:
    2.409
    Адрес:
    Fryazino
    Linikn
    Линейный адрес это адрес от 0 до 4ГБайт-1Байт, он не относительный он сам по себе. Селекторы, а вернее дескрипторы описываю диапазоны в этом пространстве и их свойства.
    Правда есть еще виртуальная память. Которая задет отображения страниц линейного адресатного пространства в физические адреса.

    Можно.

    Y_Mur
    Да являются PnP. Эта спецификация описывает почти все устройства.

    Их конфигурация стандартеризирована к ДОСу отношения не имеет. Через PCI они не определяются..
    Есть такая, вещь SuperIO контролер часть таких устаревших устройств находятся в нем. Он позволяет настраивать эти устройства.
     
  17. Y_Mur

    Y_Mur Active Member

    Публикаций:
    0
    Регистрация:
    6 сен 2006
    Сообщения:
    2.494
    Pavia
    Тем не менее в таблице у Кулакова их коды перечислены, я сам не пробовал, но наверно "дыма без огня не бывает" :)

    Linikn
    Загляни в личку :)
     
  18. Nouzui

    Nouzui New Member

    Публикаций:
    0
    Регистрация:
    17 ноя 2006
    Сообщения:
    856
    ошибка перевода или неточность терминологии, если ты смотрел оригинал
    физичесий адрес в GDTR, а не линейный
     
  19. Pavia

    Pavia Well-Known Member

    Публикаций:
    0
    Регистрация:
    17 июн 2003
    Сообщения:
    2.409
    Адрес:
    Fryazino
    Nouzui
    Это ты ошибаешься вот строчки из документации от Intel.
    Y_Mur
    Да в документации на PCI они перечислены. Но при сканировании PCI, их нет. Похоже, что при разработки спецификации просто зарезервировали эти коды. А вот разработчики устройств не воспользовались ими.
     
  20. Nouzui

    Nouzui New Member

    Публикаций:
    0
    Регистрация:
    17 ноя 2006
    Сообщения:
    856
    действительно, ошибаюсь..

    Linikn
    понятие "линейный" относится к страничным преобразованиям, а не к сегментной адресации


    SuperIO подключается не через PCI