From 7f20b4d114a9b87b1625c39c4283028380ec89f2 Mon Sep 17 00:00:00 2001 From: justuser Date: Sat, 25 Jan 2025 13:02:41 +0000 Subject: [PATCH] =?UTF-8?q?Add=20=D0=A1=D0=BE=D0=B7=D0=B4=D0=B0=D0=BD?= =?UTF-8?q?=D0=B8=D0=B5=20=D0=BC=D0=B8=D0=BD=D0=B8=D0=BC=D0=B0=D0=BB=D1=8C?= =?UTF-8?q?=D0=BD=D0=BE=D0=B9=20=D0=9E=D0=A1=20=D0=BD=D0=B0=20=D0=B1=D0=B0?= =?UTF-8?q?=D0=B7=D0=B5=20Linux?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...BD%D0%B0-%D0%B1%D0%B0%D0%B7%D0%B5-Linux.md | 99 +++++++++++++++++++ 1 file changed, 99 insertions(+) create mode 100644 %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 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" (инструкции на основе этого видео) +