определения всех HDD в системе

Тема в разделе "WASM.OS.DEVEL", создана пользователем AntiB, 19 апр 2007.

  1. AntiB

    AntiB New Member

    Публикаций:
    0
    Регистрация:
    23 мар 2007
    Сообщения:
    393
    Здраствуйте кодеры, у меня два вопроса:
    1) как можно определить все HDD в системе, используя тока порты или может в памяти чтото есть записано о них?
    2) как найти все логические диски? я знаю что искать основные можна считав MBR и посмотреть в структуре дисков, а как найти дригие? (основных может быть тока 4)
    Зарание благодарен
     
  2. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    вся информация о разбивке лежит в MBR. Там можно записать более чем 4. Читай описание MBR.
    Ну в данных BIOS'a AFAIR это есть.
     
  3. AntiB

    AntiB New Member

    Публикаций:
    0
    Регистрация:
    23 мар 2007
    Сообщения:
    393
    Наскока я знаю, то в MBR может быть описано 4 основных раздела. Я ето читал на многих сайтах, а другие типы разделов - както по другому знаходят. В системе может быть много самых разделов, но тока 4 основных!

    можеш поточнее?
     
  4. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    Ну да. максимум 4 основных раздела. А всего разделов может быть достаточно много. И все они описаны в MBR.
     
  5. AntiB

    AntiB New Member

    Публикаций:
    0
    Регистрация:
    23 мар 2007
    Сообщения:
    393
    Вполне возможно, но где? можеш дать присер или алгоритм?а то я невидел там описаных дисков, так как там места на 4 записи
     
  6. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    attach
     
  7. AntiB

    AntiB New Member

    Публикаций:
    0
    Регистрация:
    23 мар 2007
    Сообщения:
    393
    n0name СПАСИБО ТЕБЕ ОГРОМНОЕ! Я розобрался в етом вопросе, если можеш помоги ищо в втором, ты говорил что:
    можеш дать инфу по етому?
     
  8. Pavia

    Pavia Well-Known Member

    Публикаций:
    0
    Регистрация:
    17 июн 2003
    Сообщения:
    2.409
    Адрес:
    Fryazino
    Можешь почитать "Программирование на аппоратном уровне" Владимер Кулакова .
    Лично я пока придерживаюсь такой схемы, полученна из изучения мануэлов.

    Поиск дисков не только HDD но и оптических. Для начала нам нужно найти все контролеры дисков, затем получить от них диапазоны портов для каждого из каналов. После чего на каждом из каналов нужно будет выставить диск мастер или подчиненный. Выполнить команду сброса RESRET =08h подождать 2 миллисекунды и проверить BSY. Если он выставлен в 1, то устройства нет. Если он выставлен в 0, то устройство присутствует. Далее вызывать команду для получения параметров жестких дисков IDENTIFY DEVICE=ECh. Если к контролеру подключен оптический дисковод, то после RESET должна выставиться сигнатура поддержки пакетных устройств
    Sector Count 01h
    Sector Number 01h
    Cylinder Low 14h
    Cylinder High EBh

    После вызова IDENTIFY DEVICE=ECh контролер сообщит об ошибки, что команда не поддерживается, но сигнатуру не затрет. Поэтому если есть сигнатура, то следует вызвать команду IDENTIFY PACKET DEVICE=A1h для получения параметра дисковода.

    Если SATA(нашел это в документации на сата диски) контролер вернул в регистр статуса 7Fh, а в других FFh то устройство не позволяет записывать в регистры. То есть устройство отсутствует.
    Еще нужно учитывать что контролер SATA не различает диск мастер или подчиненный.
     
  9. AntiB

    AntiB New Member

    Публикаций:
    0
    Регистрация:
    23 мар 2007
    Сообщения:
    393
    Pavia можеш дать о SATA больше инфы? буду очень благодарен, так как у меня есть етот тип диска и хотел бы ищо с ним роботать.
    Зачем? можна использовать стандартные порты: 0х1f0 (и дальше) для первого канала и 0х170(и дальше) для второго. Я так делал - всьо работает, ищо осталось найти логические диски =). Пожалуста дай больше инфы об SATA
     
  10. Pavia

    Pavia Well-Known Member

    Публикаций:
    0
    Регистрация:
    17 июн 2003
    Сообщения:
    2.409
    Адрес:
    Fryazino
    Дело в том что в системе может быть несколько контролеров встроенных и подключенных в качестве плат расширения.
    Так что в системе помима двух базовых каналов 1f0h, 170h могут существовать и др.

    Работа с SATA дисками почти не отличается от работы с обыкновеными ATA/IDE дисками. У SATA контролера бывает режим в которым он полностью идентичен ATA.
    Так как SATA(I и II) всетаки отличается от ATA, то возникают проблеммы. Какие именно не знаю.
     
  11. AntiB

    AntiB New Member

    Публикаций:
    0
    Регистрация:
    23 мар 2007
    Сообщения:
    393
    Если не тежело можеш дать кусок кода по алгоритму что ты предлогал в 20:39:15, и ищо посмотри код:
    Код (Text):
    1. find_hdd:
    2.     push    edx
    3.     push    es
    4.  
    5.     xor     dx, dx
    6.     mov     es, dx
    7.  
    8.     mov     edx, [es:0x46]
    9.     mov     [time], edx
    10.  
    11.     shl     si, 0x01
    12.  
    13.     mov     dx, [base_port_addr+si]
    14.     mov     [port], dx
    15.  
    16.     add     dx, 0x07
    17. f_bsy1:
    18.     mov     eax, [es:0x46c]
    19.     sub     eax, [time]
    20.     cmp     eax, wait_time
    21.     ja      error1
    22.  
    23.     in      al, dx
    24.     test    al, 0x80
    25.     jnz     f_bsy1
    26.  
    27.     mov     dx, [port]
    28.     add     dx, 0x06
    29.     mov     al, 0xe0
    30.     out     dx, al
    31.  
    32.     mov     dx, [port]
    33.     add     dx, 0x07
    34.  
    35. f_bsy_drdy1:
    36.     mov     eax, [es:0x46c]
    37.     sub     eax, [time]
    38.     cmp     eax, wait_time
    39.     ja      error1
    40.  
    41.     in      al, dx
    42.     test    al, 0x80
    43.     jnz     f_bsy_drdy1
    44.     test    al, 0x40
    45.     jz      f_bsy_drdy1
    46.  
    47.     mov     dx, [port]
    48.     add     dx, 0x07
    49.     mov     al, 0xec
    50.     out     dx, al
    51.  
    52.     jmp     g_exit
    53. .................
    54. error1:
    55.     mov     ax, 0x01
    56.     jmp     exit
    57.  
    58. error2:
    59.     mov     ax, 0x02
    60.  
    61. g_exit:
    62.     mov     ax, 0x00
    63.  
    64. exit:
    65.     pop     es
    66.     pop     edx
    67.  
    68.     ret
    69. ..........
    70.  
    71. time        dd  0x00
    72. base_port_addr  dw  0x1f0, 0x170
    73. port        dw  0x00
    74. wait_time   =   0x02
    что в ньом нетак? у меня всьо время на всех каналах (канал 1 и 2, Master и Slave) ax=0001, но почему? у меня 1 HDD на IDE, поетому должен быть найденым - но нет, почему?
    P.S: у тебя есть icq?
     
  12. VaStaNi

    VaStaNi Member

    Публикаций:
    0
    Регистрация:
    1 июн 2004
    Сообщения:
    203
    Адрес:
    Ukraine
    Полезно по форуму искать, однако :)
    http://www.wasm.ru/forum//viewtopic.php?id=16740
    http://www.wasm.ru/forum//viewtopic.php?id=16109
     
  13. AntiB

    AntiB New Member

    Публикаций:
    0
    Регистрация:
    23 мар 2007
    Сообщения:
    393
    VaStaNi интересные обсуждения, а ты бы немогу поделиться кодом (если у тебя он есть)или хоть точной что куда пхать чтобы работало? буду очень благодарен, так как давно хотел поюзать SATA
     
  14. VaStaNi

    VaStaNi Member

    Публикаций:
    0
    Регистрация:
    1 июн 2004
    Сообщения:
    203
    Адрес:
    Ukraine
    нет, т.к. все это временно заброшено/отложено...
     
  15. AntiB

    AntiB New Member

    Публикаций:
    0
    Регистрация:
    23 мар 2007
    Сообщения:
    393
    ну что нашел ктото ошыбку в моем коде? если да - то напишыте пожалуста где она, буду очень благодарен
     
  16. Pavia

    Pavia Well-Known Member

    Публикаций:
    0
    Регистрация:
    17 июн 2003
    Сообщения:
    2.409
    Адрес:
    Fryazino
    AntiB
    Код не было время потестировать. А ошибка в 5 строчке
    mov edx, [es:0x46]
    Не из той ячейки читаем.
    Зато свой протестировал. Да, оказываеться есть ряд случиев, которые я не учел. Определяет все, но в некоторых случаех находит лишнее.
     
  17. AntiB

    AntiB New Member

    Публикаций:
    0
    Регистрация:
    23 мар 2007
    Сообщения:
    393
    точно, а я чтото незаметил, спасибо - буду тестить
     
  18. AntiB

    AntiB New Member

    Публикаций:
    0
    Регистрация:
    23 мар 2007
    Сообщения:
    393
    я исправил свой код и додал ищо проверку в конце на BSY и DRQ, но результатов ноль - тоесть у меня al = 0x00 даже если ХДД нету на етом канале, может есть ищо ошыбки?
     
  19. AntiB

    AntiB New Member

    Публикаций:
    0
    Регистрация:
    23 мар 2007
    Сообщения:
    393
    Pavia - можеш выложыть ту часть кода, которая отвечает за нахождения HDD, хочу узнать что я делаю нетак
     
  20. AntiB

    AntiB New Member

    Публикаций:
    0
    Регистрация:
    23 мар 2007
    Сообщения:
    393
    Ладно, я уже сам разобрался в определения HDD, а как узнать или ето HDD или CD-привод? и может ктото может помоч с SATA? А то я непонимаю до конца что и как делать