|
Kintsugi OS 0.5.0
x86 Monolithic OS
|
Для Debian/Ubuntu: build-essential binutils nasm python3 qemu-system-x86 dosfstools mtools genisoimage (вместо genisoimage можно использовать xorriso). Предпочтителен кросс-компилятор i386-elf-gcc; при его отсутствии Makefile использует системные GCC/binutils с 32-битным freestanding-режимом, без libc. Выбор: make CROSS=i386-elf- или make CROSS=.
run, run_bin, run_fda, run_hdd, run_fat12 подключают загрузочную дискету и primary IDE master с ФС. QEMU_FLAGS позволяет выбрать дисплей: make run QEMU_FLAGS="-display none -monitor stdio". По умолчанию память — 64 МиБ; MEMORY=16 также достаточно для фиксированной кучи 8 МиБ с адреса 2 МиБ. Автоматического определения доступной RAM пока нет.
bin/kintsugios.bin: bootsector + ядро, дополненное до целых секторов.diskimgs/kintsugi_floppy_i386.img: загрузочная дискета 1,44 МиБ.diskimgs/kintsugi_fat12_hdd.img: FAT12-том 8 МиБ, без MBR/разделов.diskimgs/KintsugiOS.iso: CD с эмуляцией загрузочной дискеты.При первом создании FAT12-диска файлы из test_files/ копируются через mtools. Изменение тестовых файлов не обновляет существующий образ. make disk-create создаёт только отсутствующий диск. Явное пересоздание с удалением данных: make disk-reset CONFIRM=YES. make clean и make clean_all сохраняют записываемые HDD-образы и исходные тестовые файлы. Существующие образы не форматируются при обычном запуске, если они актуальны.
Поддерживаются короткие имена 8.3 (без учёта регистра), файлы корневого каталога, пустые файлы, цепочки кластеров, создание, перезапись и удаление. Неподдерживаемые имена отклоняются, а не обрезаются. Подкаталоги, LFN, MBR, FAT16/32, AHCI/NVMe и журналирование не реализованы. Запись не атомарна при сбое питания: перед работой с ценными данными нужна резервная копия.
Тесты работают только с временными FAT12-дисками и не меняют пользовательский HDD-образ. Через QMP отправляются реальные нажатия клавиш, проверяется VGA, после завершения QEMU содержимое проверяется независимо через mtools и fsck.fat -n. Сценарии: floppy и ISO boot, чтение многокластерного файла, запись/перезапись/удаление, текст из нескольких слов; загрузка 200 секторов через границы дорожек/цилиндров/64 КиБ; отсутствие HDD и повреждённый BPB.
Загрузчик получает длину ядра из сборки, читает по одному сектору с геометрией BIOS, повторяет чтение после reset и выводит реальный статус AH при ошибке. Ядро сохраняется также в ELF с символами; BSS обнуляется перед входом в C.