Kintsugi OS 0.5.0
x86 Monolithic OS
Loading...
Searching...
No Matches
Сборка, диски и проверка

Зависимости

Для 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=.

make -j4
make run_bin # полноценный floppy-образ + FAT12-диск
make run_fat12 # тот же рекомендуемый режим
make run_iso # ISO с El Torito floppy emulation + FAT12-диск
make test # автоматические headless-проверки QEMU
make debug_fat12 # QEMU останавливается до старта CPU
gdb bin/kernel.elf -ex 'target remote :1234'

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-образы и исходные тестовые файлы. Существующие образы не форматируются при обычном запуске, если они актуальны.

Команды shell

ls
cat readme.txt
create empty.txt
write hello.txt Hello from KintsugiOS
cat hello.txt
del hello.txt
fat12info

Поддерживаются короткие имена 8.3 (без учёта регистра), файлы корневого каталога, пустые файлы, цепочки кластеров, создание, перезапись и удаление. Неподдерживаемые имена отклоняются, а не обрезаются. Подкаталоги, LFN, MBR, FAT16/32, AHCI/NVMe и журналирование не реализованы. Запись не атомарна при сбое питания: перед работой с ценными данными нужна резервная копия.

Что проверяет <tt>make test</tt>

Тесты работают только с временными FAT12-дисками и не меняют пользовательский HDD-образ. Через QMP отправляются реальные нажатия клавиш, проверяется VGA, после завершения QEMU содержимое проверяется независимо через mtools и fsck.fat -n. Сценарии: floppy и ISO boot, чтение многокластерного файла, запись/перезапись/удаление, текст из нескольких слов; загрузка 200 секторов через границы дорожек/цилиндров/64 КиБ; отсутствие HDD и повреждённый BPB.

Загрузчик получает длину ядра из сборки, читает по одному сектору с геометрией BIOS, повторяет чтение после reset и выводит реальный статус AH при ошибке. Ядро сохраняется также в ELF с символами; BSS обнуляется перед входом в C.