commit 7f20b4d114a9b87b1625c39c4283028380ec89f2 Author: justuser Date: Sat Jan 25 13:02:41 2025 +0000 Add Создание минимальной ОС на базе Linux diff --git a/%D0%A1%D0%BE%D0%B7%D0%B4%D0%B0%D0%BD%D0%B8%D0%B5-%D0%BC%D0%B8%D0%BD%D0%B8%D0%BC%D0%B0%D0%BB%D1%8C%D0%BD%D0%BE%D0%B9-%D0%9E%D0%A1-%D0%BD%D0%B0-%D0%B1%D0%B0%D0%B7%D0%B5-Linux.md b/%D0%A1%D0%BE%D0%B7%D0%B4%D0%B0%D0%BD%D0%B8%D0%B5-%D0%BC%D0%B8%D0%BD%D0%B8%D0%BC%D0%B0%D0%BB%D1%8C%D0%BD%D0%BE%D0%B9-%D0%9E%D0%A1-%D0%BD%D0%B0-%D0%B1%D0%B0%D0%B7%D0%B5-Linux.md new file mode 100644 index 0000000..f399880 --- /dev/null +++ b/%D0%A1%D0%BE%D0%B7%D0%B4%D0%B0%D0%BD%D0%B8%D0%B5-%D0%BC%D0%B8%D0%BD%D0%B8%D0%BC%D0%B0%D0%BB%D1%8C%D0%BD%D0%BE%D0%B9-%D0%9E%D0%A1-%D0%BD%D0%B0-%D0%B1%D0%B0%D0%B7%D0%B5-Linux.md @@ -0,0 +1,99 @@ +Для кого инструкция: для тех, кому 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.1.0.tar.gz +tar -xzf JustOS-v1.1.0.tar.gz # Распаковка +cd justos +``` +Установка зависимостей: +``` +./install_requirements.sh +``` + +### 2. Разработка свего shell + +Директория - progs + +Сборка +```bash +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-{ВЕРСИЯ} + +Клонировать репозиторий: +``` +git clone https://gitea.del.pw/justuser/JustOS.git +``` +Запуск графической настройки: +``` +cd linux-4.9 +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" +Выйти на главный уровень до "General setup" + +Выбрать "Device Drivers" -> "Character devices" +Включить "Enable TTY" +Выйти на главный уровень + +Выбрать "Executable file formats / Emulations" +Включить "Kernel support for ELF binaries" +Выйти и сохранить изменения + +### 4. Компиляция в ISO образ +Директория - linux-6.13 +Компиляция ядра с 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), что позволит без геммороя разрабатывать что-то своё дальше. + +Для более глубокого изучения рекомендую канал - @nirlichtman + +### 6. Первоисточники +- Nir Lichtman - "Making Smallest Possible Linux Distro" (инструкции на основе этого видео) +