JustOS/instructions.md

2.1 KiB

Разработка своего shell

Директория - progs

Компиляция библиотеки на Assembler

as sys.S -o sys

Компиляция самого shell в .o (без линковки)

gcc -c shell.c

Линкуем библиотеку к нашей программе

ld -o shell shell.o sys --entry main -z noexecstack

Обеспечиваем запуск shell в ОС как главного инициализатора

mv shell init

Добавление файлов, которые нужны в системе (например бинарники)

Можно добавить своё

echo init >> files

Добавляем всё в системные архив

cat files | cpio -H newc -o > init.cpio

Настройка ядра (уже настроено в репо)

Директория - linux-6.13

Скопировать репозиторий

  1. git clone https://gitea.del.pw/justuser/JustOS.git

Установить зависимости

  1. ./install_requirements.sh

Настройка ядра

  1. cd linux-4.9
  2. make tinyconfig
  3. make menuconfig
  4. Выбрать "64-bit kernel"
  5. General setup
  6. Включить "Initial RAM filesystem and RAM disk (initramfs/initrd) support"
  7. Убрать все галочки с "Support initial ramdisks compressed using..."
  8. Выбрать "Configure standard kernel features (expert users)"
  9. Включить "Enable support for printk"
  10. Выйти на главный уровень до "General setup"
  11. "Device Drivers" -> "Character devices"
  12. Включить "Enable TTY"
  13. Выйти на главный уровень
  14. "Executable file formats / Emulations"
  15. Включить "Kernel support for ELF binaries"
  16. Выйти и сохранить изменения

Компиляция

Директория - linux-6.13

Компиляция ядра с 4 потоками

make -j 4

Сборка ISO

make isoimage FDARGS="initrd=/init.cpio" FDINITRD="../progs/init.cpio"

Запуск ISO

-smp 1 - одно ядро, иначе сбивается время

qemu-system-x86_64 -cdrom arch/x86/boot/image.iso