APIC

Internal structure and you change requests/suggestions
  • Serge,

    запустил /rd/1/drivers/acpi
    убедился, evices.dat есть
    сохранил образ на флешку

    пошла перезагрузка

    Создание процесса ядра
    Инициализация IRQ
    Инициализация PIC
    Инициализация системной v86 машины
    Инициализация системного таймера
    Попытка инициализации APIC
    Включить прерывания 2, 13
    Поиск floppy дисководов
    Запрещение прерывания в контроллере IDE
    Поиск жестких дисков и ATAPI приводов
    Запрещение прерывания в контроллере IDE
    Поиск жестких дисков и ATAPI приводов
    Получение памяти для кэша
    Поиск разделов на дисковых устройствах
    Инициализация системного каталога /sys
    Инициализация рамдиска
    Разрешение прерывания в контроллере IDE
    Установка обработчиков прерываний IDE
    Разрешение прерывания в контроллере IDE
    Установка обработчиков прерываний IDE
    APIC не найден
    Количество оперативной памяти 3500
    Установка настроек окон по умолчанию
    Установка фона
    Резервирование IRQ и портов
    Частота процессора 3200
    Установка мыши

    черный экран и курсор мышки посредине, система ни на что не реагирует.
    Attachments
    ACPI.LOG (13.35 KiB)
    Downloaded 443 times
  • I had a great time enabling kolibri on my relatively new laptop.

    First I tried kolibri.efi from the latest autobuild. It booted but no devices worked except mouse and keyboard.

    Then I prepared DEVICES.DAT file using devman by Serge and put the file to /DRIVERS/ directory. It booted but even mouse and keyboard didn't work.

    It turned out that my laptop has two I/O APICs, what kolibri didn't expect. While parsing MADT table kolibri put the base address of the first I/O APIC to a variable, and then overwrote the variable with the base address of the second I/O APIC. Thus the first one was never set up properly.

    Another issue was that kolibri didn't expect more than 24 interrupts. My laptop has two I/O APICs: one for 24 interrupts and another for 32, i.e. 56 total. It was not enough to just replace 24 with 56 in the corresponding macro because the active interrupt was indicated using a bitmask set/reset via bts/btr instructions, and 56 bits don't fit a single dword. I replaced bts/btr with functions.

    It is interesting that our int 0x40 has the same vector as IRQ0x20 at the moment. In theory, I/O APIC can be programmed to map IRQs 0-0x1f to vectors IRQ+0x20, and IRQs 0x20+ to vectors IRQ+0x21. I didn't implement this, good luck.

    I committed support for more than one I/O APIC and more than 24 interrupts in r7733. For PIC mode nothing should change.

    PCIDEV program has been updated accordingly.

    Unfortunately, neither ethernet nor sound cards work for me. However sata disks do work in native mode using ahci driver.
  • Reboot still doesn't work in Qemu. Is it hard to debug it and fix? Probably if we could fix QEMU then reboot will work on some real devices.
    Attachments
    QEMU.zip (1.26 MiB)
    Downloaded 322 times
    Из хаоса в космос
  • QEMU PC emulator version 0.10.6, Copyright (c) 2003-2008 Fabrice Bellard
    What about a more recent version (4.2.0 at the moment)?
  • dunkaist wrote:
    QEMU PC emulator version 0.10.6, Copyright (c) 2003-2008 Fabrice Bellard
    What about a more recent version (4.2.0 at the moment)?
    In the new QEMU reboot works well.
    Из хаоса в космос
  • dunkaist wrote:I committed support for more than one I/O APIC and more than 24 interrupts
    Отличная работа!
  • Hello Dunkaist!

    Notebook Eee PC 901.
    When I choose shutdown, os stop working, but notebook keep working until I press and hold power button.
    When I choose core restart, system restart, but don,t start again.
    Reset work correctly.
  • Uri,

    Are you sure you report to 'APIC' topic an issue when APIC is enabled?
    If yes, does shutdown work when APIC is disabled?
  • А, можно добавить APIC в сборку KolibriOS для ручной загрузки в Drivers т.к. у меня без него не видны диски в системе.
  • Ранее Serge писал в этой теме viewtopic.php?f=1&t=1195&hilit=devices. ... 105#p37822
    Serge wrote:В ревизии #2231 залил поддержку APIC в основное ядро. Чтобы включить APIC надо:
    1)Скомпилировать и записать в образ ядро #2231+ или скачать свежую ночную сборку.
    2)Скачать и записать в /rd/1/drivers нумератор устройств.
    4)Освободить в образе несколько килобайт для лога ACPI. (У меня 12 Кб)
    5)Загрузить систему и запустить /rd/1/drivers/acpi
    6)Убедиться, что папке /rd/1/drivers присутсвует файл devices.dat
    7)Сделать рестарт ядра
    9)Проверить работу ядра и драйверов
    10)Удалить нумератор устройств и сохранить образ. Теперь APIC будет включаться при каждой загрузке ядра.
    Я обновил запускалку драйвера "acpi" на SVN. Теперь он запускает "acpi.dll" из своей же папки. Больше не нужно очищать место на /rd/1 и копировать туда файлы. Хотя можете, кто ж запрещает... Также лог теперь пришется в /tmp0/1/acpi.log чтобы гарантировано хватило ему места (тут я правил драйвер через HEX редактор).

    И в конце концов я добавил данный драйвер в DRVINST viewtopic.php?f=48&t=3419
    Который что может сам всё сделает, а дальше покажет упрощенный вариант руководства. Даже перевёл на английский.
    http://websvn.kolibrios.org/filedetails ... readme.txt

    Всё для людей :D
    Из хаоса в космос
  • How long time run devman takes?
    to infinity and beyond
  • A second or two.
  • Who is online

    Users browsing this forum: No registered users and 8 guests