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