Page 11 of 12

Re: APIC

Posted: Sat Mar 24, 2012 2:16 pm
by Mario
А с чего я должен воспринимать вечного болтуна SII и тебя за серьезных дяденек?
SII прямо сказал, что он никогда ничего делать не будет, будет только критиковать вслух. А ты еще реальными делами тоже ничего не доказал и есть большой шанс, что "Будешь как настоящий нехочуха!"

Re: APIC

Posted: Sat Mar 24, 2012 8:48 pm
by some_man
Стас wrote:АПИК можно включить, но мне кажется чтобы сделать нормальный доступ к процам нужно переписать половину оси, или начать её с нуля и перенести туда все готовые функции после отработки работы с несколькими процами, я писал название книги где то в темах в которой есть пример включения апика настройки прерываний таймера и клавы, и работы с несколькими процами. Там написано, что нужно делать семафоры для проверки того, чтобы два проца не писали в один и тот же байт, мне кажется этого делать не надо, а надо думать как чтоб такого небыло.
SII wrote:А единственный правильный путь -- выкинуть вообще всё сделанное и разрабатывать с нуля, причём не сохранять совместимость со старым на уровне API (поскольку этот самый API, доставшийся в наследство от Менуэта -- сплошной идиотизм). Естественно, сразу сделать систему не только с поддержкой SMP, но и 64-разрядной, с виртуальной памятью, PnP, ACPI... Ну а если так хочется сохранить возможность запуска имеющихся программ, слепить прослойку, поддерживающую выполнение прикладного 32-разрядного кода со старым API на новой 64-разрядной системе.
На сколько я понял, товарищи с оседева (Стас и SII), имеющие некоторый опыт в создании ОСей, горят желанием помочь не только морально, теоретически, но и при непосредсвенной реализации данной идеи? :)

В противном случае это рассуждение по негласным правилам форума рискует быть перенесена в хотелки

Re: APIC

Posted: Sun Mar 25, 2012 1:30 am
by Leency
Стас получает бан на день за флуд и систематическое неправильное написание названия проекта.

Re: APIC

Posted: Mon Mar 26, 2012 12:22 pm
by Mario
SII wrote:Стас, в нынешнем виде КОС -- свалка костылей, появившися в первую очередь из-за шедеврально талантливого проекта Вилле. Чтобы внедрить что-то новое, надо либо городить очередную порцию костылей, либо переделывать всё с нуля и самым кардинальным образом. Но если уж идти вторым путём, то надо закладывать сразу всё, а не только какие-то части. Другое дело, что реализовать это "всё" сразу не удастся -- но если не предусматривать такую возможность, то в дальнейшем без костылей опять-таки не обойтись.
И на заметку человеку, которому такие проекты как Колибри на один зуб и он их каждый день с нуля переписывает, на хабре появилась статья в тему Дорабатывать или переписывать
Позволю себе наглость процитировать кусок текста, хотя все могут прочесть оригинальную статью без регистрации!
Ситуэйшн №3: чужой код
Image
Это самый опасный путь, скользкая, мерзкая и пакостная дорожка. Итак, представьте, что свой студенческий проект вы кое как сдали, свой личный проект забросили (извините, конечно же отложили, чтобы вернуться, когда будет время!).

И вот, к вам попадает чужой код в 10-15 тысяч строк. Говнокод. По-вашим представлениям. Внедрение обновлений равносильно выстрелу себе в ногу. Переписываем?

Не торопитесь. Сначала оцените свои возможности. Сколько времени вам потребуется, чтобы это переписать? Как это будет оплачено? Заложено ли нужное время?

Переписывание чужого кода чревато несколькими проблемами.
Первая проблема: код, скорее всего, уже внедрен и работает. В этом случае, вам не только нужно будет заново разработать весь его функционал, но и учесть все костыли, на которые наткнулся бывший говнокодер.
Вторая проблема: вы можете не потянуть проект, начать прокрастинировать, и в конечном итоге, окончательно завалите проект.
Третья проблема: почему вы так уверены, что вы сами не напишите такой же говнокод?
И окончание статьи меня вообще порадовало:
И еще помните, что серьезные люди считают, что переписывание проектов с нуля – это признак непрофессионализма.
Удачи.
У меня лично только 2 проекта которые я написал по сути с нуля: KFM и zSea. Зато я несколько чужих программ переписал (не с нуля естественно!) и ядро так помаленьку поковырял. Почему то я не лазал на http://osdev.ru/ и не обсирал чужие проекты. Я же не лазил в их код 9 лет и не могу судить что там говнокод, а что нет. А самое забавное - идеален тот код который ты никому не показал, потому что никто не может найти там ошибок говнокодера.

Потому я по прежнему утверждаю, что у меня есть триллион баксов и скоро я куплю Эпл.
(Зря Кирилл похерил тот мой коммент!)
И попробуйте, блять, это опровергнуть!

Re: APIC

Posted: Mon Mar 26, 2012 9:49 pm
by Leency
Марат, вот тебе надо эти батлы со школотой по поводу у кого пиписька длиннее? Мы делаем проект известный во всём мире и поэтому у него полюбому будут критики.
Короче, не флудить. Тебя это тоже касается.

Re: APIC

Posted: Mon Mar 26, 2012 9:50 pm
by Mario
Тащемто мистер SII давно как не школота. :mrgreen: Но тролль 99 уровня - Дмитрий Завалишин завидует. :wink: Я кстати тоже завидую - мне бы так доебываться уметь.

Re: APIC

Posted: Mon Mar 26, 2012 9:55 pm
by Leency
Я про Стаса. SII наш старый умный и хитрый идеологический противник.

Re: APIC

Posted: Tue Aug 07, 2012 10:24 am
by XVilka
Дабы разбавить последние нетехнические сообщения техническим - выкладываю документ об APIC и прерываниях в процессорах SandyBridge, надеюсь будет полезным.

Re: APIC

Posted: Sun Sep 16, 2012 11:32 pm
by abcd0081
Leency wrote:Стас получает бан на день за флуд и систематическое неправильное написание названия проекта.
что то я флуда у него не заметил. он как и все выразил свое мнение. и я бы его поддержал.

Re: APIC

Posted: Mon Sep 17, 2012 9:41 pm
by Leency
abcd0081 wrote:
Leency wrote:Стас получает бан на день за флуд и систематическое неправильное написание названия проекта.
что то я флуда у него не заметил. он как и все выразил свое мнение. и я бы его поддержал.
Очень круто поднимать темы которым уже полгода :) Флуд был удалён, наверно, не перечитывал.

Re: APIC

Posted: Mon Sep 17, 2012 9:49 pm
by Mario
Necromancer 80 lvl

Re: APIC

Posted: Fri Jun 07, 2013 12:07 pm
by CleverMouse
Serge wrote:Не понятно, почему завис ASRock M3A770DE. Хороший лог, правильный devices.dat.
До r3613 обращение из APIC_init к таблице FAT рамдиска приводило к непредсказуемым последствиям, ибо таблица FAT рамдиска на тот момент ещё не была преобразована из 12-бит в 16-бит. Если devices.dat был длиннее 512 байт, то зависание неудивительно и с железом не связано.
Я это словила по другой причине - в drivers/ появилось много всего, и при отсутствующем devices.dat в таблицу FAT лез уже код обхода папки - с теми же последствиями: на реальной машине ядро стало зависать при загрузке на стадии инициализации APIC. После чего было уже несложно выяснить, в чём дело.

Re: APIC

Posted: Fri Jun 07, 2013 1:35 pm
by Serge
CleverMouse
Спасибо, это конечно я лажанулся, вызывать load_file до calculatefatchain.

Re: APIC

Posted: Fri Jun 07, 2013 9:16 pm
by Serge
Скачал свой архив двухлетней давности http://kolibri-pe.googlecode.com/files/devman.zip и решил проверить.
Внезапно всё работает !
Spoiler:PCI_8086_101 bus:0 devfn: 8 pin 1 bios irq: 5 acpi irq: 16
PCI_8086_102 bus:0 devfn: 10 pin 1 bios irq: 5 acpi irq: 16
PCI_8086_1c3a bus:0 devfn: b0 pin 1 bios irq: 5 acpi irq: 16
PCI_8086_1c2d bus:0 devfn: d0 pin 3 bios irq: 10 acpi irq: 18
PCI_8086_1c20 bus:0 devfn: d8 pin 1 bios irq: 7 acpi irq: 22
PCI_8086_1c10 bus:0 devfn: e0 pin 1 bios irq: 5 acpi irq: 16
PCI_8086_1c1c bus:0 devfn: e6 pin 3 bios irq: 10 acpi irq: 18
PCI_8086_1c1e bus:0 devfn: e7 pin 4 bios irq: 11 acpi irq: 19
PCI_8086_1c26 bus:0 devfn: e8 pin 1 bios irq: 4 acpi irq: 23
PCI_8086_1c02 bus:0 devfn: fa pin 2 bios irq: 11 acpi irq: 19
PCI_8086_1c22 bus:0 devfn: fb pin 3 bios irq: 10 acpi irq: 18
PCI_1002_683d bus:1 devfn: 0 pin 1 bios irq: 5 acpi irq: 16
PCI_1002_aab0 bus:1 devfn: 1 pin 2 bios irq: 3 acpi irq: 17
PCI_10ec_8168 bus:3 devfn: 0 pin 1 bios irq: 10 acpi irq: 18
PCI_1b6f_7023 bus:4 devfn: 0 pin 1 bios irq: 11 acpi irq: 19

Devices:

PCI_8086_100 bus:0 devfn: 0

PCI_8086_101 bus:0 devfn: 8
APIC IRQ: 16

PCI_8086_102 bus:0 devfn: 10
MMIO range fb800000 - fbbfffff
MMIO range d0000000 - dfffffff
IO range ff00 - ff3f
APIC IRQ: 16

PCI_8086_1c3a bus:0 devfn: b0
MMIO range fbfff000 - fbfff00f
APIC IRQ: 16

PCI_8086_1c2d bus:0 devfn: d0
MMIO range fbffe000 - fbffe3ff
APIC IRQ: 18

PCI_8086_1c20 bus:0 devfn: d8
MMIO range fbff4000 - fbff7fff
APIC IRQ: 22

PCI_8086_1c10 bus:0 devfn: e0
APIC IRQ: 16

PCI_8086_1c1c bus:0 devfn: e6
APIC IRQ: 18

PCI_8086_1c1e bus:0 devfn: e7
APIC IRQ: 19

PCI_8086_1c26 bus:0 devfn: e8
MMIO range fbffd000 - fbffd3ff
APIC IRQ: 23

PCI_8086_244e bus:0 devfn: f0

PCI_8086_1c4a bus:0 devfn: f8

PCI_8086_1c02 bus:0 devfn: fa
IO range fe00 - fe07
IO range fd00 - fd03
IO range fc00 - fc07
IO range fb00 - fb03
IO range fa00 - fa1f
MMIO range fbffc000 - fbffc7ff
APIC IRQ: 19

PCI_8086_1c22 bus:0 devfn: fb
MMIO range fbffb000 - fbffb0ff
IO range 500 - 51f
APIC IRQ: 18

PCI_1002_683d bus:1 devfn: 0
MMIO range e0000000 - efffffff
MMIO range fbe80000 - fbebffff
IO range ee00 - eeff
MMIO range 0 - 1ffff
APIC IRQ: 16

PCI_1002_aab0 bus:1 devfn: 1
MMIO range fbefc000 - fbefffff
APIC IRQ: 17

PCI_10ec_8168 bus:3 devfn: 0
IO range de00 - deff
MMIO range fbdff000 - fbdfffff
MMIO range fbdf8000 - fbdfbfff
APIC IRQ: 18

PCI_1b6f_7023 bus:4 devfn: 0
MMIO range fbcf8000 - fbcfffff
APIC IRQ: 19

PCI0
Address range 00-03f
IO range 0cf8-0cff
Address range 00-0cf7
Address range 0d00-0ffff
Address range 0a0000-0bffff
Address range 0c0000-0dffff
Address range 0fed40000-0fed44fff
Address range 0cfa00000-0febfffff

SYSR
IO range 010-01f
IO range 022-03f
IO range 044-04d
IO range 050-05f
IO range 062-063
IO range 065-06f
IO range 074-07f
IO range 091-093
IO range 0a2-0bf
IO range 0e0-0ef
IO range 04d0-04d1
IO range 0290-029f
IO range 0800-0805
IO range 0290-0294
IO range 0880-088f

PIC
IO range 020-021
IO range 0a0-0a1
IRQ 2

DMA1
DMA channel 4
IO range 00-0f
IO range 080-090
IO range 094-09f
IO range 0c0-0df

TMR
IO range 040-043

HPET
IRQ 0
IRQ 8
Memory range 0fed00000-0fed003ff

RTC
IO range 070-073

SPKR
IO range 061-061

COPR
IO range 0f0-0ff
IRQ 13

PS2M
IO range 060-060
IO range 064-064
IRQ 12

PMIO
IO range 0400-04cf
IO range 04d2-04ff

PTMD
IO range 01000-0107f
IO range 01080-010ff
IO range 01100-0117f
IO range 01180-011ff

CWDT
IO range 0454-0457

EXPL
Memory range 0f4000000-0f7ffffff

MEM
Memory range 0d2800-0d3fff
Memory range 0f0000-0f7fff
Memory range 0f8000-0fbfff
Memory range 0fc000-0fffff
Memory range 0cafa0000-0cafdffff
Memory range 00-09ffff
Memory range 0100000-0caf9ffff
Memory range 0cafe0000-0caffffff
Memory range 0fec00000-0fec00fff
Memory range 0fed10000-0fed1dfff
Memory range 0fed20000-0fed8ffff
Memory range 0fee00000-0fee00fff
Memory range 0ffb00000-0ffb7ffff
Memory range 0fff00000-0ffffffff
Memory range 0e0000-0effff
Memory range 020000000-0201fffff
Memory range 040000000-0400fffff
Memory range 0cb000000-0cf9fffff

FWH
Memory range 0ffb80000-0ffbfffff
Пошел дальше по инструкции viewtopic.php?f=1&t=1195&start=105#p37822 и опять всё заработало. Правая колонка цифр - номера irq в hex
Spoiler:PCI Version = 3.00; Last PCI Bus = 5
User MMIO channel = 0F.F:F
Number of PCI units = 12h

VenID DevID Bus# Dev# Fnc Rev Class Subclass/ IRQ Company Description
Interface
----- ----- ---- ---- --- --- ----- --------- --- ------------------------------------------ --------------------------------
8086 0100 00 00 00 09 06 00 00 00 Intel Corp. Bridge - CPU/PCI
8086 0101 00 01 00 09 06 04 00 10 Intel Corp. Bridge - PCI/PCI
8086 0102 00 02 00 09 03 80 00 10 Intel Corp. Display - misc
8086 1c3a 00 16 00 04 07 80 00 10 Intel Corp. Communication - misc
8086 1c2d 00 1a 00 05 0c 03 20 12 Intel Corp. Serial Bus - USB2 Enhanced HC
8086 1c20 00 1b 00 05 04 03 00 16 Intel Corp. Multimedia - High Definition Audio
8086 1c10 00 1c 00 b5 06 04 00 10 Intel Corp. Bridge - PCI/PCI
8086 1c1c 00 1c 06 b5 06 04 00 12 Intel Corp. Bridge - PCI/PCI
8086 1c1e 00 1c 07 b5 06 04 00 13 Intel Corp. Bridge - PCI/PCI
8086 1c26 00 1d 00 05 0c 03 20 17 Intel Corp. Serial Bus - USB2 Enhanced HC
8086 244e 00 1e 00 a5 06 04 01 -- Intel Corp. Bridge - Subtract.Decode PCI/PCI
8086 1c4a 00 1f 00 05 06 01 00 00 Intel Corp. Bridge - PCI/ISA
8086 1c02 00 1f 02 05 01 06 01 13 Intel Corp. Storage - Serial ATA
8086 1c22 00 1f 03 05 0c 05 00 12 Intel Corp. Serial Bus - SMBus
1002 683d 01 00 00 00 03 00 00 10 ATI TECHNOLOGIES INC Display - VGA-compatible c.
1002 aab0 01 00 01 00 04 03 00 11 ATI TECHNOLOGIES INC Multimedia - High Definition Audio
10ec 8168 03 00 00 06 02 00 00 12 REALTEK SEMICONDUCTOR CORP. Network - Ethernet
1b6f 7023 04 00 00 01 0c 03 30 13 Unknown Serial Bus - USB/USB2
Usb работает, звук есть, ahci подключился. Значит код apic в полном порядке.

Рекомендую тем, у кого были проблемы с прерываниями и usb.

Re: APIC

Posted: Mon Jun 10, 2013 2:10 pm
by CleverMouse
Dell Vostro: "как есть" не завелось, часы тикают, система работает, но на внешние раздражители в лице PS/2 и USB не отзывается. Методом научного тыка я выяснила, что всё начинает нормально работать при применении любого из двух диффов

Code: Select all

Index: apic.inc
===================================================================
--- apic.inc	(revision 3631)
+++ apic.inc	(working copy)
@@ -82,7 +82,7 @@
 @@:
         mov     ebx, eax
         call    IOAPIC_read
-        mov     ah, 0x09; Delivery Mode: Lowest Priority, Destination Mode: Logical
+        mov     ah, 0x08; Delivery Mode: Fixed, Destination Mode: Logical
         mov     al, cl
         add     al, 0x20; vector
         or      eax, 0x10000; Mask Interrupt

Code: Select all

Index: apic.inc
===================================================================
--- apic.inc	(revision 3631)
+++ apic.inc	(working copy)
@@ -96,7 +96,8 @@
         inc     eax
         mov     ebx, eax
         call    IOAPIC_read
-        or      eax, 0xff000000; Destination Field
+        and     eax, not 0xff000000; Destination Field
+        or      eax, 0x01000000
         xchg    eax, ebx
         call    IOAPIC_write
         inc     eax
Дальше я ковыряться не стала.