Dasturlash

Zig tilida yozilgan minimal x86 kernel: QEMU’da bir necha buyruq bilan ishga tushiring

29-mart, 2026, 14:004 ko'rish3 daqiqa o'qish
Zig tilida yozilgan minimal x86 kernel: QEMU’da bir necha buyruq bilan ishga tushiring

Zig – zamonaviy, xavfsiz va yuqori darajadagi dasturlash tili – endi operatsion tizim yadroini ham yozish imkonini beradi. Ushbu maqolada Zig yordamida yaratilgan minimal x86 kernelini qanday yaratish, uni QEMU emulyatorida sinash va Docker orqali GRUB ISO faylini tuzish jarayonlarini batafsil ko‘rib chiqamiz.

Kerneldagi asosiy komponentlar

Kernel quyidagi asosiy bo‘limlardan iborat:

  • Multiboot 1 sarlavhasi – kompyuter yuklagichiga (bootloader) kernelni qanday topish va ishga tushirishni bildiruvchi 12‑baytli ma’lumot.
  • _start – kirish nuqtasi. Bu funksiya 32‑bit himoyalangan rejimda CPUni ishga tushiradi, 16 KB hajmdagi stack (yig‘ish) yaratadi va kmain ga sakraydi.
  • kmain – yadro asosiy funksiyasi. VGA matn‑rejimiga (0xB8000 manzilida joylashgan) kirib, ekranga rangli salom beruvchi xabarni yozadi, so‘ng hlt buyrug‘i bilan CPUni to‘xtatadi.
  • VGA drayveri – hech qanday BIOS chaqirig‘i yoki qo‘shimcha drayverlarsiz, bevosita xotiraga yozish orqali matnni ko‘rsatadi.

Qurilish va ishga tushirish

Zig o‘zining LLVM asosidagi back‑end va linkerlari bilan birga keladi, shuning uchun x86-freestanding-none maqsadiga mos keluvchi ELF faylini har qanday operatsion tizimda (macOS ARM, Linux x86_64 va boshqalar) bir necha buyruq orqali yaratish mumkin.

zig build               # kernelni kompilatsiya qiladi, zig-out/bin/kernel faylini yaratadi
zig build run           # QEMU‑da avtomatik ravishda ishga tushiradi
./run.sh                # QEMU‑ga to‘g‘ridan‑to‘g‘ri Multiboot yuklagichi orqali kernelni yuklaydi
qemu-system-i386 -kernel zig-out/bin/kernel   # qo‘lda parametrlar bilan ishga tushirish

GRUB ISO yaratish uchun Docker konteyneri ichida grub-mkrescue vositasi ishlatiladi. Bu usulda run-grub.sh skripti quyidagi bosqichlarni bajaradi:

  • Kernelni zig build bilan quradi.
  • ISO fayl strukturasini (iso/boot/grub/) yaratadi va grub.cfg konfiguratsiyasini qo‘shadi.
  • Docker ichida grub-mkrescue ni ishga tushiradi, natijada zig-kernel.iso hosil bo‘ladi.
  • QEMU yordamida ISO faylini yuklaydi va ekranda “Hello from the Zig Kernel!” xabarini ko‘rsatadi.

Zig tilining afzalliklari

Bu loyiha Zig tilining bir necha muhim xususiyatlarini namoyish etadi:

  • Zero‑assembly – butun kernel C‑ga o‘xshash sintaksisda, lekin hech qanday alohida assembler fayli yo‘q.
  • Cross‑compilation – bir platformada (masalan, Apple Silicon Mac) boshqa arxitektura (x86) uchun to‘g‘ridan‑to‘g‘ri binar fayl yaratish mumkin.
  • Volatile pointer – VGA buferiga bevosita yozish uchun xotiraga “volatil” ko‘rsatkich orqali murojaat qilish, bu esa drayver yozishni soddalashtiradi.
  • Inline asm – kerak bo‘lganda, bir qator assembler kodini Zig ichida yozish imkoniyati, lekin bu misolda ham undan foydalanilmagan.

Xulosa

Zig tilida yaratilgan bu minimal x86 kernel – dasturchilar uchun operatsion tizim asoslarini o‘rganish, cross‑compilation jarayonini tushunish va QEMU emulyatori yordamida tezda natija ko‘rish uchun ajoyib namuna hisoblanadi. Kichik hajmli, to‘liq ochiq kodli loyiha bo‘lgani sababli, uni o‘zingizning eksperimentlaringizga asos sifatida qo‘llashingiz va yangi funksiyalar (masalan, klaviatura drayveri yoki fayl tizimi) qo‘shishingiz mumkin.

Manba: Hacker News
#Zig #x86 kernel #Multiboot #QEMU #cross-compilation
Telegram da muhokama qilish