При первом тренировочном заезде возникли некоторые вопросы и комментарии. Буду очень признателен, если кто-то ответит на вопросы, или поправит меня раньше, чем я разберусь в этом самостоятельно
Компиляция ядра KolibriOS приводит к файлу размером около 140кб, в то время как в дистрибутиве примерно 80 кб: в дистрибутиве применено сжатие средствами kerpack/Kpack? Или надо отключить отладочную информацию? Как это сделать? (Я использую /kernel/build.bat в MS WindowsXP, fasm.exe [1.68] просто помещён в C:/MinGW/bin, включённый в PATH. Другими способыми (например, из MSys) собрать ядро KolibriOS мне не удалось.)
В файле /kernel/core/syscall.inc имеется две таблицы: servetable и servetable2. Насколько я понимаю, в первую очередь используется servetable2. Обработчики функций, описанные в этой (новой) таблице, уже
- используют неротированные регистры,
- используют иной способ засылки ответов(на 4 меньше) (для eax: mov [esp+32],eax вместо mov [esp+36],eax, как это было указано в статье из первого выпуска e-zine_2006 «Модификация ядра Kolibri OS. Часть 1. Добавление новых функций в ядро »).
Порядок регистров соответствует порядку их загрузки в стек командой pushad:
eax <- [esp+32]
ecx <- [esp+28]
edx <- [esp+24]
ebx <- [esp+20]
esp <- [esp+16] ; esp на момент перед pushad
ebp <- [esp+12]
esi <- [esp+8]
edi <- [esp+4]
[flat assembler 1.68 Programmer's Manual (Tomasz Grysztar):стр.21 ]
Насколько верны эти утверждения?
Насколько я понял, на данный момент происходит постепенный перевод всех обработчиков на новый стиль и работа уже выполнена примерно на 70%. Поэтому ещё не переведенные на новый стиль обработчики вызываются с использованием servetable, посредством вызова функции cross_order. После окончания этой работы таблица servetable будет удалена.
Также в статье нет никаких рекомендаций по поводу того, где размещать саму функцию – обработчик (пока в соответствии с вышеназванной статьёй):
Code: Select all
$Revision: 0001 $
align 4
sys_serverops:
mov eax,0x00101010
mov [esp+32],eax
mov ebx,0x00202020
mov [esp+20],ebx
mov ecx,0x00303030
mov [esp+28],ecx
mov edx,0x00404040
mov [esp+24],edx
ret
На мой взгляд правильным будет вариант, выражающийся в новой строке файла kernel/kernel32.inc :
Code: Select all
; load server base function
include "mickbase/mickbase.inc"
Таким образом получается, что статья «Модификация ядра Kolibri OS. Часть 1. Добавление новых функций в ядро » нуждается в существенной коррекции.
Может быть уже существует откорректированный - обновлённый вариант этой статьи?
P.S.
(1) Я тестирую KolibriOS на виртуальной машине Oracle VM VirtualBox. Образ диска с разделом FAT виден только если его поместить в виртуальной машине на SATA. Даже собственную дивкету видеть не хочет ... (Версия 0.7.7 ru)
(2) Выход из системы по пункту Home приводит к исключительной ситуации Oracle VM VirtualBox, приводящей к завершению сеанса работы с KolibriOS.