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