Kernel code/ru: Difference between revisions
Jump to navigation
Jump to search
No edit summary |
No edit summary |
||
Line 7: | Line 7: | ||
---- | ---- | ||
==== mem_test ==== | ==== mem_test ==== | ||
: | : Проводит тестирование памяти. | ||
Если bios имеет функцию 0xE820, то тестирование не производится и происходит выход из функции. | |||
==== init_mem ==== | ==== init_mem ==== | ||
Line 77: | Line 79: | ||
: Макрос, который вычисляет разность между вторым и первым аргументом и выводит ее на консоль в 16ичной системе счисления во время ассемблирования fasm'ом | : Макрос, который вычисляет разность между вторым и первым аргументом и выводит ее на консоль в 16ичной системе счисления во время ассемблирования fasm'ом | ||
: Первый аргумент - строка с сообщением | : Первый аргумент - строка с сообщением | ||
: Пример: | : '''Пример:''' | ||
: diff16 "cur_saved_data (data32.inc) ", 0, $ | :: diff16 "cur_saved_data (data32.inc) ", 0, $ | ||
: cur_saved_data rb 4096 | :: cur_saved_data rb 4096 | ||
: Во время ассемблирования данного участка кода, fasm выведет "cur_saved_data (data32.inc) 0xЧИСЛО", где 0xЧИСЛО будет адресом cur_saved_data | : Во время ассемблирования данного участка кода, fasm выведет "cur_saved_data (data32.inc) 0xЧИСЛО", где 0xЧИСЛО будет адресом cur_saved_data | ||
==== diff10 ==== | ==== diff10 ==== | ||
Line 105: | Line 107: | ||
: Макрос для объявления структур | : Макрос для объявления структур | ||
---- | ---- | ||
=== fdo.inc === | |||
: Formatted Debug Output (FDO) | |||
: Это набор макросов для повышения удобства отладки приложений. | |||
: Работает подобно функции printf(), выводя на доску отладки форматированные сообщения. | |||
: Доступные спецификаторы формата %s, %d, %u, %x (с частичной поддержкой ширины). | |||
: Использовать обычно нужно только DEBUGF, хотя доступны также и DEBUGS, DEBUGD, DEBUGH. | |||
: '''Примеры:''' | |||
:: DEBUGF 1, "%s - %d (%x)", eax, 123, ch | |||
:: DEBUGF 1, "%d.%d.%d.%d", [ip+0]:1, [ip+1]:1, [ip+2]:1, [ip+3]:1 | |||
:: DEBUGF 1, <"function ", __FNAME__, ": %s - %x - %u">, "text here", [var]:5, [esp+16] | |||
:: DEBUGF 1, "[%d][%d][%d][%d][%d]\n", al, ax, ebx, [eax], [eax]:1 | |||
:: DEBUGF 2, "[%u][%u][%u][%u][%u]\n", al, ax, ebx, [eax], [eax]:1 | |||
:: DEBUGF 3, "[%x][%x][%x][%x][%x]\n", al, ax, ebx, [eax], [eax]:1 | |||
:: DEBUGF 4, "[%s][%s][%s][%s][%s][%s][%s]\n", "string":4, eax, eax:5, [ebx]:5, eax:ecx, eax:[ecx], eax:byte[ecx] | |||
: '''Ширина:''' | |||
:: for %s - any number, register, or in-memory variable | |||
:: for %d - 1, 2, 4 (only for in-memory arguments) | |||
:: for %u - 1, 2, 4 (only for in-memory arguments) | |||
:: for %x - 1 .. 8 | |||
---- | |||
... | |||
== detect/ == | == detect/ == | ||
... | ... |
Revision as of 12:06, 14 May 2021
Ветка trunk ядра KolibriOS. Путеводитель-справочник по исходному коду.
/
Файл init.inc
Содержит функции, необходимые для инициализации системы.
mem_test
- Проводит тестирование памяти.
Если bios имеет функцию 0xE820, то тестирование не производится и происходит выход из функции.
init_mem
- Инициализация системной таблицы страниц
init_page_map
- TODO
init_BIOS32
- TODO
test_cpu
- Получение информации о процессоре.
acpi_locate
- Поиск поиск структуры RSDP (Root System Description Pointer) которая используется в ACPI.
- Функция возвращает указатель на RSDP в регистре eax.
rsdt_find
- В ecx принимает адрес RSDT, в edx сигнатуру таблицы, которую нужно найти (например ACPI_FADT_SIGN)
- В eax возвращает адрес требуемой таблицы
check_acpi
- TODO
init_hpet
- Инициализация HPET (High Perfomance Event Timer)
Файл kernel32.inc
- Этот файл не содержит реализаций и является по сути заголовочным
- Здесь содержатся инклуды .inc файлов почти всех подсистем ядра
Файл proc32.inc
- Содержит макросы для определения и вызова процедур:
stdcall proc
- Directly call STDCALL procedure
invoke proc
- Indirectly call STDCALL procedure
ccall proc
- Directly call CDECL procedure
invoke proc
- Indirectly call CDECL procedure
proc
- ...
Файл macros.inc
- Содержит разные полезные макросы, в том числе для работы со связными списками
$Revision
- Клиент svn при работе с репозиторием после ключевого слова $Revision: подставляет текущую ревизию файла.
В macros.inc из исходников ядра, подключающемся первым, определён макрос fasm'а $Revision, который вычисляет максимум из всех мест, где он встретился (то есть во всех файлах, прямо или косвенно подключаемым к kernel.asm), каковой максимум и является номером самой свежей ревизии ядра (не драйверов).
В конце kernel.asm он присваивается переменной __REV__, ну а boot/bootstr.inc включает значение __REV__ в начальную выводимую строку.
diff16
- Макрос, который вычисляет разность между вторым и первым аргументом и выводит ее на консоль в 16ичной системе счисления во время ассемблирования fasm'ом
- Первый аргумент - строка с сообщением
- Пример:
- diff16 "cur_saved_data (data32.inc) ", 0, $
- cur_saved_data rb 4096
- Во время ассемблирования данного участка кода, fasm выведет "cur_saved_data (data32.inc) 0xЧИСЛО", где 0xЧИСЛО будет адресом cur_saved_data
diff10
- Аналог diff16, только в 10ичной системе.
dbgstr
- Вывод строки на доску отладки.
Макросы для работы со связными списками:
list_init_head
- Создание списка
__list_add
- Добавление в список (внутреннее использование)
list_add
- Вставка в начало списка
list_add_tail
- Вставка в конец списка
list_del
- Удаление из списка
Файл struct.inc
- Содержит макросы для объявления структур и работы с ними
struct
- Макрос для объявления структур
fdo.inc
- Formatted Debug Output (FDO)
- Это набор макросов для повышения удобства отладки приложений.
- Работает подобно функции printf(), выводя на доску отладки форматированные сообщения.
- Доступные спецификаторы формата %s, %d, %u, %x (с частичной поддержкой ширины).
- Использовать обычно нужно только DEBUGF, хотя доступны также и DEBUGS, DEBUGD, DEBUGH.
- Примеры:
- DEBUGF 1, "%s - %d (%x)", eax, 123, ch
- DEBUGF 1, "%d.%d.%d.%d", [ip+0]:1, [ip+1]:1, [ip+2]:1, [ip+3]:1
- DEBUGF 1, <"function ", __FNAME__, ": %s - %x - %u">, "text here", [var]:5, [esp+16]
- DEBUGF 1, "[%d][%d][%d][%d][%d]\n", al, ax, ebx, [eax], [eax]:1
- DEBUGF 2, "[%u][%u][%u][%u][%u]\n", al, ax, ebx, [eax], [eax]:1
- DEBUGF 3, "[%x][%x][%x][%x][%x]\n", al, ax, ebx, [eax], [eax]:1
- DEBUGF 4, "[%s][%s][%s][%s][%s][%s][%s]\n", "string":4, eax, eax:5, [ebx]:5, eax:ecx, eax:[ecx], eax:byte[ecx]
- Ширина:
- for %s - any number, register, or in-memory variable
- for %d - 1, 2, 4 (only for in-memory arguments)
- for %u - 1, 2, 4 (only for in-memory arguments)
- for %x - 1 .. 8
...
detect/
...