Add Создание минимальной ОС на базе Linux

justuser 2025-01-25 13:02:41 +00:00
commit 7f20b4d114

@ -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" (инструкции на основе этого видео)