Для кого инструкция: для тех, кому LFS слишком сложно и хотелось бы что-то попроще, либо для тех, кто хотел бы написать ОС с нуля (за исключением ядра)
Требования: базовое знание команд Linux, ~15 мин. времени, установленный Linux.
ОГЛАВЛЕНИЕ
- Загрузка ресурсов и подготовка
- Разработка своего shell
- Настройка ядра
- Компиляция в ISO образ
- Дальнейшие шаги
- Первоисточники
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