OSDev http://osdev.su/ |
|
Определение AHCI контроллера http://osdev.su/viewtopic.php?f=6&t=3489 |
Страница 1 из 2 |
Автор: | grenders22 [ 09 ноя 2018, 13:10 ] |
Заголовок сообщения: | Определение AHCI контроллера |
Пытаюсь найти идентификатор AHCI контроллера перебором устройств PCI. На виртуальной QEMU проблем не было (vendor 0x8086 device 0x2922), а на реальном железе что-то не выходит. Как можно определить id? Может можно не программными путями определить? Устройств слишком много на реальном железе находит, и тупо перебором нереально.. А по поводу QEMU буквально 4 устройства определяет, поэтому проблем не было. |
Автор: | SII [ 09 ноя 2018, 13:26 ] |
Заголовок сообщения: | Re: Определение AHCI контроллера |
Ну, реальные оси в любом случае перебором определяют, какое железо на машине имеется. Возможно, у Вас проблемы с использованием vendor id: вдруг на Вашей машине используется контроллер не от Интела? Ещё один вариант: контроллер сидит на какой-то дочерней шине и надо сначала настроить мост PCI-PCI, чтобы до неё добраться. Но в любом случае я не особый советчик в этих вопросах: сижу на ARMах, поэтому перебирать конфигурационное пространство PCI мне не приходится за отсутствием такового А вообще, попробуйте для интереса построить полное дерево периферии на PCI и вывести его куда-нибудь, чтобы потом спокойно проанализировать, какие устройства были обнаружены и всё такое. |
Автор: | Himik [ 09 ноя 2018, 21:45 ] |
Заголовок сообщения: | Re: Определение AHCI контроллера |
Есть разные утилиты по определению конфигурации - AIDA64, ASTRA32. В Windows можно смотреть Диспетчер устройств - Контроллеры запоминающих устройств - Свойства - Сведения - ИД оборудования. |
Автор: | SII [ 10 ноя 2018, 09:56 ] |
Заголовок сообщения: | Re: Определение AHCI контроллера |
Ага, но то уже сделанное и точно работающее. Но здесь-то нужно своё перечисление, поэтому резонно получить полный список самому -- либо в итоге получишь полный список устройств (и дальше будешь их инициализировать и т.п., как и положено оси), либо увидишь, что список у тебя неправильный (неполный, в частности) -- и будешь искать, где ты ошибаешься. |
Автор: | grenders22 [ 10 ноя 2018, 11:05 ] |
Заголовок сообщения: | Re: Определение AHCI контроллера |
Himik писал(а): Есть разные утилиты по определению конфигурации - AIDA64, ASTRA32. В Windows можно смотреть Диспетчер устройств - Контроллеры запоминающих устройств - Свойства - Сведения - ИД оборудования. Что-то я сразу и н подумал об этом. Буквально месяц назад этим образом драйвера искал) https://wiki.osdev.org/PCI#Class_Codes здесь есть инфа про некие класс коды. В английском не силён, а переводчик на этой странице сплоховал.Я правильно понял что класс коды для определения типа устройств? И если да, то все до типы устройств так найти могу? |
Автор: | Himik [ 10 ноя 2018, 11:30 ] |
Заголовок сообщения: | Re: Определение AHCI контроллера |
grenders22 писал(а): И если да, то все до типы устройств так найти могу? Да, по Class Code и Subclass определяются типы всех стандартных устройств. SII писал(а): и будешь искать, где ты ошибаешься. Я так понял, что список цифр есть, и осталось в них разобраться. |
Автор: | SII [ 10 ноя 2018, 11:46 ] |
Заголовок сообщения: | Re: Определение AHCI контроллера |
Himik писал(а): Я так понял, что список цифр есть, и осталось в них разобраться. Если так, то да. Просто я не уверен на 100%, что автор смог получить полный список, ведь в ПК устройства висят не на одной шине, а на нескольких, т.е. нужно правильно определить иерархию, при необходимости настроить мосты и всё такое (хотя, возможно, BIOS полную настройку шин делает сама, и остаётся лишь правильно прогуляться по всем конфигурационным пространствам). В любом случае, следует сравнить свой список с тем, что выдаёт, например, Винда, чтобы убедиться, что само определение устройств было выполнено верно и в полном объёме. |
Автор: | grenders22 [ 10 ноя 2018, 11:50 ] |
Заголовок сообщения: | Re: Определение AHCI контроллера |
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); } |
Автор: | Himik [ 11 ноя 2018, 09:01 ] |
Заголовок сообщения: | Re: Определение AHCI контроллера |
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. Нужны комментарии, чтобы понять суть вычислений, и чтобы самому не запутаться. |
Автор: | pavia [ 12 ноя 2018, 07:20 ] |
Заголовок сообщения: | Re: Определение AHCI контроллера |
А в биусе контроллёр дисков как настроен? Как AHCI илм как raid или как sata? И да там ещё хитрость что sata может эммулировать IDE. Так что контроллёр дисков надо искать по всем 4-м кодам. И воомбще их особо не используют. Используют таблички с PID и VID. Биос должен настроить все мосты. Хотя бы ради загрузки с usb-дисков. Правда есть ноутбуки где загрузка по usb-запрещена. Так что вероятность отсутсвие настройки мостов всё же есть. |
Страница 1 из 2 | Часовой пояс: UTC + 3 часа |
Powered by phpBB® Forum Software © phpBB Group http://www.phpbb.com/ |