2.1 KiB
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
Скопировать репозиторий
- git clone https://gitea.del.pw/justuser/JustOS.git
Установить зависимости
- ./install_requirements.sh
Настройка ядра
- 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"
- Выйти и сохранить изменения
Компиляция
Директория - 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