OSDev

для всех
Текущее время: 13 ноя 2018, 08:39

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 10 ] 
Автор Сообщение
 Заголовок сообщения: Определение AHCI контроллера
СообщениеДобавлено: 09 ноя 2018, 13:10 

Зарегистрирован: 04 мар 2018, 21:34
Сообщения: 54
Пытаюсь найти идентификатор AHCI контроллера перебором устройств PCI. На виртуальной QEMU проблем не было (vendor 0x8086 device 0x2922), а на реальном железе что-то не выходит. Как можно определить id? Может можно не программными путями определить? Устройств слишком много на реальном железе находит, и тупо перебором нереально.. А по поводу QEMU буквально 4 устройства определяет, поэтому проблем не было.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Определение AHCI контроллера
СообщениеДобавлено: 09 ноя 2018, 13:26 

Зарегистрирован: 28 окт 2007, 18:33
Сообщения: 1353
Откуда: Зеленоград
Ну, реальные оси в любом случае перебором определяют, какое железо на машине имеется. Возможно, у Вас проблемы с использованием vendor id: вдруг на Вашей машине используется контроллер не от Интела? Ещё один вариант: контроллер сидит на какой-то дочерней шине и надо сначала настроить мост PCI-PCI, чтобы до неё добраться. Но в любом случае я не особый советчик в этих вопросах: сижу на ARMах, поэтому перебирать конфигурационное пространство PCI мне не приходится за отсутствием такового :)

А вообще, попробуйте для интереса построить полное дерево периферии на PCI и вывести его куда-нибудь, чтобы потом спокойно проанализировать, какие устройства были обнаружены и всё такое.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Определение AHCI контроллера
СообщениеДобавлено: 09 ноя 2018, 21:45 

Зарегистрирован: 21 сен 2007, 17:24
Сообщения: 1070
Откуда: Балаково
Есть разные утилиты по определению конфигурации - AIDA64, ASTRA32.
В Windows можно смотреть Диспетчер устройств - Контроллеры запоминающих устройств - Свойства - Сведения - ИД оборудования.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Определение AHCI контроллера
СообщениеДобавлено: 10 ноя 2018, 09:56 

Зарегистрирован: 28 окт 2007, 18:33
Сообщения: 1353
Откуда: Зеленоград
Ага, но то уже сделанное и точно работающее. Но здесь-то нужно своё перечисление, поэтому резонно получить полный список самому -- либо в итоге получишь полный список устройств (и дальше будешь их инициализировать и т.п., как и положено оси), либо увидишь, что список у тебя неправильный (неполный, в частности) -- и будешь искать, где ты ошибаешься.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Определение AHCI контроллера
СообщениеДобавлено: 10 ноя 2018, 11:05 

Зарегистрирован: 04 мар 2018, 21:34
Сообщения: 54
Himik писал(а):
Есть разные утилиты по определению конфигурации - AIDA64, ASTRA32.
В Windows можно смотреть Диспетчер устройств - Контроллеры запоминающих устройств - Свойства - Сведения - ИД оборудования.


Что-то я сразу и н подумал об этом. Буквально месяц назад этим образом драйвера искал)

https://wiki.osdev.org/PCI#Class_Codes здесь есть инфа про некие класс коды. В английском не силён, а переводчик на этой странице сплоховал.Я правильно понял что класс коды для определения типа устройств? И если да, то все до типы устройств так найти могу?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Определение AHCI контроллера
СообщениеДобавлено: 10 ноя 2018, 11:30 

Зарегистрирован: 21 сен 2007, 17:24
Сообщения: 1070
Откуда: Балаково
grenders22 писал(а):
И если да, то все до типы устройств так найти могу?

Да, по Class Code и Subclass определяются типы всех стандартных устройств.
SII писал(а):
и будешь искать, где ты ошибаешься.

Я так понял, что список цифр есть, и осталось в них разобраться.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Определение AHCI контроллера
СообщениеДобавлено: 10 ноя 2018, 11:46 

Зарегистрирован: 28 окт 2007, 18:33
Сообщения: 1353
Откуда: Зеленоград
Himik писал(а):
Я так понял, что список цифр есть, и осталось в них разобраться.


Если так, то да. Просто я не уверен на 100%, что автор смог получить полный список, ведь в ПК устройства висят не на одной шине, а на нескольких, т.е. нужно правильно определить иерархию, при необходимости настроить мосты и всё такое (хотя, возможно, BIOS полную настройку шин делает сама, и остаётся лишь правильно прогуляться по всем конфигурационным пространствам).

В любом случае, следует сравнить свой список с тем, что выдаёт, например, Винда, чтобы убедиться, что само определение устройств было выполнено верно и в полном объёме.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Определение AHCI контроллера
СообщениеДобавлено: 10 ноя 2018, 11:50 

Зарегистрирован: 04 мар 2018, 21:34
Сообщения: 54
SII писал(а):
А вообще, попробуйте для интереса построить полное дерево периферии на PCI и вывести его куда-нибудь, чтобы потом спокойно проанализировать, какие устройства были обнаружены и всё такое.

Нашел такой список, написано в linux используется (но видимо старый он) с именами устройств по id, в qemu нашлись все устройства, а на реальном ни одно.. Но все равно спасибо за подсказку)
И да, список оказался полным.. Ну по крайней мере количество совпало. Мог и не учесть чего либо.

Himik писал(а):
grenders22 писал(а):
И если да, то все до типы устройств так найти могу?

Да, по Class Code и Subclass определяются типы всех стандартных устройств.
SII писал(а):
и будешь искать, где ты ошибаешься.

Я так понял, что список цифр есть, и осталось в них разобраться.

Так точно, список есть. Разбирательством и занимаюсь))
Что-то белиберда получается. То ли я не верно определяю классы, то ли у него список узкий.. В QEMU попытался определить у контроллера AHCI, а получил не существующее.. Приложил код, чувствую я где-то по глупости своей наерундил..

Код:
uint16_t getProgIf(uint8_t bus, uint8_t slot)
{
    return pciReadWord(bus, slot, 0, 0x09);
}

uint16_t getSubClass(uint8_t bus, uint8_t slot)
{
    return pciReadWord(bus, slot, 0, 0x0a);
}

uint16_t getClassCode(uint8_t bus, uint8_t slot)
{
    return pciReadWord(bus, slot, 0, 0x0b);
}

 uint32_t pciReadWord (uint32_t bus, uint32_t slot, uint32_t func, uint8_t offset)
{
    address = (uint32_t)((bus << 16) | (slot << 11) |
              (func << 8) | (offset & 0xfc) | ((uint32_t)0x80000000));

    outportl (0xCF8, address);

    if (offset == 0x24)
        return inportl(0xCFC) ;
    else
        return (uint16_t)( (inportl(0xCFC) >> ((offset & 2) * 8) ) & 0xffff);
}


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Определение AHCI контроллера
СообщениеДобавлено: 11 ноя 2018, 09:01 

Зарегистрирован: 21 сен 2007, 17:24
Сообщения: 1070
Откуда: Балаково
grenders22 писал(а):
Приложил код, чувствую я где-то по глупости своей наерундил..

Код:
    if (offset == 0x24)
        return inportl(0xCFC) ;
    else
        return (uint16_t)( (inportl(0xCFC) >> ((offset & 2) * 8) ) & 0xffff);

Смещение 24 бит ошибочно задано в Hex формате 0x24.
Непонятно, почему для смещения 24 особая формула.
Потом offset не надо ((offset & 2), это уничтожает значение. Умножать на 8 тоже не надо.
Операция & 0xffff для получения 16-битного результата не имеет смысла, надо просто исправить тип функции на uint16_t.
Нужны комментарии, чтобы понять суть вычислений, и чтобы самому не запутаться.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Определение AHCI контроллера
СообщениеДобавлено: Вчера, 07:20 
Аватара пользователя

Зарегистрирован: 16 май 2007, 23:46
Сообщения: 1092
А в биусе контроллёр дисков как настроен? Как AHCI илм как raid или как sata? И да там ещё хитрость что sata может эммулировать IDE.
Так что контроллёр дисков надо искать по всем 4-м кодам.
И воомбще их особо не используют. Используют таблички с PID и VID.

Биос должен настроить все мосты. Хотя бы ради загрузки с usb-дисков. Правда есть ноутбуки где загрузка по usb-запрещена. Так что вероятность отсутсвие настройки мостов всё же есть.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 10 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 4


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB