Чтение секторов SATA HDD

Discussion in 'WASM.ASSEMBLER' started by dess, Oct 14, 2008.

  1. dess

    dess New Member

    Blog Posts:
    0
    Joined:
    Aug 22, 2008
    Messages:
    46
    Всем привет ! Из программы на ассемблере необходимо прочитать сектор HDD подключенного через SATA интерфейс. Пожалуйста, дайте ссылочку на литературу, или подскажите, через какие порты можно получить доступ к жесткому диску. Заранее благодарен :)
     
  2. Partner

    Partner Павел

    Blog Posts:
    0
    Joined:
    Feb 28, 2008
    Messages:
    917
    Location:
    Los Angeles
    Нужно обязательно через порты ? Есть более простые способы прочитать сектор.
     
  3. Pavia

    Pavia Well-Known Member

    Blog Posts:
    0
    Joined:
    Jun 17, 2003
    Messages:
    2,409
    Location:
    Fryazino
    dess
    Читай википедию.
    http://wiki.osdev.ru/index.php/%D0%A0%D0%B0%D0%B1%D0%BE%D1%82%D0%B0_%D1%81_%D0%B6%D0%B5%D1%81%D1%82%D0%BA%D0%B8%D0%BC%D0%B8_%D0%B4%D0%B8%D1%81%D0%BA%D0%B0%D0%BC%D0%B8_%D0%B8_%D0%B8%D1%85_%D0%BA%D0%BE%D0%BD%D1%82%D1%80%D0%BE%D0%BB%D0%BB%D0%B5%D1%80%D0%B0%D0%BC%D0%B8
     
  4. dess

    dess New Member

    Blog Posts:
    0
    Joined:
    Aug 22, 2008
    Messages:
    46
    ...Не обязательно через порты, тем более, если существуют другие, более простые способы. Просто я думал, что порты - единственная возможность "поговорить" с хардом :) Сейчас пытаюсь прочитать сектор через хитрый LBA48, по совету wiki от Pavia, правда не совсем успешно - возвращается сектор заполненый кодом 07Fh, видимо я пока что-то не так делаю. Когда смогу достучаться до wiki.osdev.ru, обязательно гляну исходничек.
     
  5. Pavia

    Pavia Well-Known Member

    Blog Posts:
    0
    Joined:
    Jun 17, 2003
    Messages:
    2,409
    Location:
    Fryazino
    dess
    Что касается LBA48 то эмуляторы его плохо поддерживают. Борщ до определенного момента не поддерживал, но бит о его наличии возрощался. Квими тоже самое. Но борщ в последних версиях исправился и сделал поддержку LBA48(не проверял).
    VMWare вроде корректно эмулирует.

    С жесткими можно пообщаться также используя Int 13h функции с намирами от 40h.
    Называется BIOS Enhanced Disk Drive Services (EDD)
     
  6. dess

    dess New Member

    Blog Posts:
    0
    Joined:
    Aug 22, 2008
    Messages:
    46
    Боюсь, что доступ к функциям возможен только из реального режима, а доступ к харду должен осуществляться из защищенного режима.
    Если я правильно понял, то после начальной загрузки компьютера SATAвский Хард должен видеться через стандартные порты 1F0h, 170h (и так далее), но как от него получить данные я так и не понял.
     
  7. Pavia

    Pavia Well-Known Member

    Blog Posts:
    0
    Joined:
    Jun 17, 2003
    Messages:
    2,409
    Location:
    Fryazino
    dess
    SATA контроллер никому ничего не должен. Порты 1F0h, 170h будут если включен легасити режим. Настраивается в Биосе. Чтобы не мучиться у меня приведен код по поиску контроллера и считывания их портов. Это не так уж и трудно.
    Данные получаются при помощи посылки команд и четения через порт данных.
     
  8. dess

    dess New Member

    Blog Posts:
    0
    Joined:
    Aug 22, 2008
    Messages:
    46
    Pavia
    Спасибо ! Я скачал исходник, буду разбираться :)
     
  9. Partner

    Partner Павел

    Blog Posts:
    0
    Joined:
    Feb 28, 2008
    Messages:
    917
    Location:
    Los Angeles
    Самый простой способ - открыть диск как файл. CreateFile("\\.\PhysicalDrive0", ...)
     
  10. dess

    dess New Member

    Blog Posts:
    0
    Joined:
    Aug 22, 2008
    Messages:
    46
    Partner
    К сожалению фишка в том, что код выполняется в защищенном режиме микропроцессора, а там, боюсь, таких "сладостей" нет :) Возможно там существуют сладости в виде ROM с 32-битным кодом, но я пока не в курсе.
     
  11. Pavia

    Pavia Well-Known Member

    Blog Posts:
    0
    Joined:
    Jun 17, 2003
    Messages:
    2,409
    Location:
    Fryazino
    Редко но встричаюся. К примеру код для работы с PCI.
     
  12. dess

    dess New Member

    Blog Posts:
    0
    Joined:
    Aug 22, 2008
    Messages:
    46
    Да-да-да-да-да..... Как раз сейчас я его и штудирую, спасибо за ссылочку ! Видимо пришло время разобраться с PCI, больно много на нем устройств завязано =) И тогда откроются двери в мир чудес... Короче, думаю оттуда я и дастану харды !
     
  13. Partner

    Partner Павел

    Blog Posts:
    0
    Joined:
    Feb 28, 2008
    Messages:
    917
    Location:
    Los Angeles
    Нет никакой разницы. Этот способ работает в любом режиме. Единственная разница, что в кернел моде вместо CreateFile нужно вызывать NtCtreateFile.
     
  14. dess

    dess New Member

    Blog Posts:
    0
    Joined:
    Aug 22, 2008
    Messages:
    46
    Partner
    Это здорово, но опять-таки, kernel на столько самопальный, что пока-что не понимает таких вещей, как: CreateFile и NtCreateFile. Здесь, видимо, речь идет о некоторой стандартной операционке, которая специально обучена таким приёмам. В моём же случае всё только зарождается :)
     
  15. Partner

    Partner Павел

    Blog Posts:
    0
    Joined:
    Feb 28, 2008
    Messages:
    917
    Location:
    Los Angeles
    Мы говорим о Windows или о чем то другом ?
     
  16. _basmp_

    _basmp_ New Member

    Blog Posts:
    0
    Joined:
    Jul 10, 2005
    Messages:
    2,939
    Partner
    видимо нет. чел похоже свою ось пишет
    dess
    Ну так почему-бы не посмотреть на какой-нить уже существующий несложный пример. Их много. Каждый предложит свой. Я, например, предложу глянуть ядро план9 или инферно. Очень много полезного можно вытянуть из ядра линуха. Есть и другие открытые ядра (миних, кунх), концепции. Имхо писать свою ось имеет смысл только при наличии очень оригинальной и действительно стоящей концепции, иначе проще доработать или просто воспользоваться уже существующей.

    таково мое имхо
     
  17. dess

    dess New Member

    Blog Posts:
    0
    Joined:
    Aug 22, 2008
    Messages:
    46
    Браво !!! В самую точку ! Громко конечно сказано: "пишет свою ось", не ось, пока, а, так, недоразумение :) Но мне интересна тема написания осей, поэтому я экспериментирую, пытаюсь разобраться. Вот, для полного счастья не хватает жесткого общения с диском, ...простите, с жёстким диском общения. Короче сектора прочитать надо с HDD с SATA-вским интерфейсом. С ATA-вским разобрался, так компьютер сгорел. Не успел насладиться :) Так-что это не Виндовс, точно. А план9 и иже с ними я обязательно гляну на днях, если найду и разбирусь в сырцах. Концепции пока нет. Но я думаю, что что-нибудь придумаю :) Благодарю за совет !
     
  18. Pavia

    Pavia Well-Known Member

    Blog Posts:
    0
    Joined:
    Jun 17, 2003
    Messages:
    2,409
    Location:
    Fryazino
    dess
    Если с ATA разобрался, то с SATA разберешься быстро.
    SATA он эмулирует ATA. Просто многии не знают что у ATA есть режим Native. Суть в том что в режим Native - контроллер имеет другии порты, их нужно считать из PCI CFG и все.
    SATA Может работать в режиме Native ATA(порты надо считывать), Legacete ATA (порты известны 1F0h, 170h ).
    И третий режим SATA compatablety - совместимый, суть в том что порты 1F0h, 170h но диски перемешанны вместе SATA и PATA(ATA).

    При определении наличия дисков столкнулся с проблеммами пришлось городить трех уровневую систему проверки.
    Обноружились различия между SATA и ATA.

    Есть еще ACHI - так называемый настоящий SATA, но тут все подругому.
     
  19. dess

    dess New Member

    Blog Posts:
    0
    Joined:
    Aug 22, 2008
    Messages:
    46
    Уже неделю пытаюсь разобраться в теме, но пока безуспешно. С ATA разобрался быстро, благодаря Дзеновским исходникам, а вот SATA - блин - еще тот геморой... Уже и в PCI разобрался, и порты родные вытащил, и в БИОСе режимы менял, а всё одно, происходит ошибка таймаута выполнения команды или готовности данных. Причем исходники Кулакова из "Программирование на аппаратном уровне" прекрасно работают. А вот под себя переделать их не удается. А ведь цепочка проста: запрещаем прерывания, ожидаем освобождения канала, выбираем устройство, ожидаем готовность устройства, загружаем адрес, посылаем команду, ожидаем её выполнение, ожидаем готовность данных, читаем их и разрешаем прерывания !!! И всё !!! Но видимо в какой то момент я что-то не так делаю, возможно самую малость и в результате - таймаут.
     
  20. Pavia

    Pavia Well-Known Member

    Blog Posts:
    0
    Joined:
    Jun 17, 2003
    Messages:
    2,409
    Location:
    Fryazino
    dess
    SATA соблюдает стандарт ATA, но повидения их различается.
    Есть такая вещь как готовность устройства и готовность данных. Может быть данные не готовы, но устройство может принемать команды. С этим надо быть внимательно. Недостаточно проверки одного бита надо проверять нужные.

    Попробуй после тайм аута считать данне. Если слова одинаковые, то команда не выполнилась. Можешь код показать посмотим что нетак.