50 lines
2.1 KiB
Markdown
50 lines
2.1 KiB
Markdown
### Разработка своего 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
|