10 Создание минимальной ОС на базе Linux
justuser edited this page 2025-01-25 15:16:41 +00:00

Для кого инструкция: для тех, кому LFS слишком сложно и хотелось бы что-то попроще, либо для тех, кто хотел бы написать ОС с нуля (за исключением ядра)

Требования: базовое знание команд Linux, ~15 мин. времени, установленный Linux.

ОГЛАВЛЕНИЕ

  1. Загрузка ресурсов и подготовка
  2. Разработка своего shell
  3. Настройка ядра
  4. Компиляция в ISO образ
  5. Дальнейшие шаги
  6. Первоисточники

1. Загрузка ресурсов и подготовка

Вся сборка проводилась на последней версии Debian (Devuan)
Процедура не требовательна к месту на диске/ОЗУ/CPU.

Загрузка ресурсов:

wget https://gitea.del.pw/justuser/JustOS/archive/v1.0.0.tar.gz
tar -xzf JustOS-v1.0.0.tar.gz # Распаковка
cd justos

Установка зависимостей:

./install_requirements.sh

2. Разработка свего shell

Директория - progs

Сборка

as sys.S -o sys # Компиляция библиотеки на Assembler
gcc -c shell.c # Компиляция самого shell в .o (без линковки)
ld -o shell shell.o sys --entry main -z noexecstack # Линкуем самописную библиотеку

mv shell init # Обеспечиваем запуск shell в ОС
# Добавление файлов, которые нужны в системе (например бинарники)
# Можно добавить своё
echo init > files
cat files | cpio -H newc -o > init.cpio #Добавляем всё в системные архив

3. Настройка ядра

Директория - linux-{ВЕРСИЯ}

Запуск графической настройки:

make tinyconfig
make menuconfig

Включить "64-bit kernel"

Выбрать General setup
Включить "Initial RAM filesystem and RAM disk (initramfs/initrd) support"
Убрать все галочки с "Support initial ramdisks compressed using..."

Выбрать "Configure standard kernel features (expert users)"
Включить "Enable support for printk"
Выйти на главный уровень

Выбрать "Executable file formats / Emulations"
Включить "Kernel support for ELF binaries"
Выйти на главный уровень

Выбрать "Device Drivers" -> "Character devices"
Включить "Enable TTY"
Выйти и сохранить изменения

4. Компиляция в ISO образ

Директория - linux-{ВЕРСИЯ}
Компиляция ядра с 4 потоками (больше - быстрее):

make -j 4

Сборка ISO:

make isoimage FDARGS="initrd=/init.cpio" FDINITRD="../progs/init.cpio"

Запуск ISO:

qemu-system-x86_64 -cdrom arch/x86/boot/image.iso

5. Дальнейшие шаги

Рекомендую взять за основу последнюю версию JustOS (с указанием авторства), там уже есть нормальный shell и базовые утилиты (Busybox), что позволит без геммороя разрабатывать что-то своё дальше. Для сокращения размера бинарников С используйте musl-gcc (~75% и выше)

Для более глубокого изучения рекомендую канал - @nirlichtman

6. Первоисточники