Add Создание минимальной ОС на базе Linux
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" (инструкции на основе этого видео)
|
||||||
|
|
Loading…
Reference in New Issue
Block a user