Sıfırdan işletim sistemi yazmak | 3 | xv6 OS kurulumu ve çalıştırılması

10:38 AM ,

xv6 Nedir?

xv6, Dennis Ritchie 'nin ve Ken Thompson 'ın yazdığı Unix'in v6 versiyonunun modern x86 tabanlı işlemciler için ANSI  C ile tekrardan yazılması projesidir. 

Neden xv6?

Bu noktada Linux'un veya MINIX projesinin en ilkel versiyonlarını ele alıp deneysel çalışmalar yapmak yerine xv6'nın üzerinde çalışma yapmak daha verimli olacağını düşünüyorum.  Özellikle yeni başlayanlar için Linux'un kaynak kodlarını alıp incelemek biraz meşakkatli hale gelmiştir. Geriye doğru gidip en ilkel derlenebilir halini bulmakta biraz zaman gerektiren bir konu olduğundan dolayı işletim sisteminin temellerini öğrenmek isteyenlere xv6 'yı tavsiye ederim.

xv6 Kurulum ve Çalıştırılması?

  • sudo apt-get update
  • sudo apt-get install build-essential
  • sudo apt-get install gcc-multilib
  • sudo apt-get install qemu
  • sudo apt-get install git
ile eksik olan kurulumlar yapılmalıdır. Ardından xv6 'nın son kaynak kodlarını indirmek için aşağıdaki komut girilmelidir.
  • git clone https://github.com/asanka-code/xv6.git
Ardından dizin hakları ile ilgili problemlerin önüne geçmek için aşağıdaki komut girilmelidir.
  • chmod 700 -R xv6
Ardından kaynak kodun bulunduğu dizine girilir.
  • cd xv6
Ardından make komutu ile derleme işlemi yapılır.
  • make
Derleme işlemi ile ilgili bir hata ile karşılaşmadıysak ardından işletim sistemini çalıştırmak için make komutu yanına istediğimiz emulator 'ü parametre olarak vermemiz gerekmektedir.
  • make <qemu-nox>


ilk terminal ekranına düştüysek bu noktada Dennis Ritchie 'nin ve Ken Thompson'ın yazdığı işletim sistemini keşfetme serüvenine başlayabiliriz.

Notlar:

  • mkfs.c içerisindeki #define static_assert(a, b) do { switch (0) case 0: case (a): ; } while (0) tanımlamasının tekrardan yapıldığını söylediği için bu satırı yorum satırı yaparak problemi aştım. Eğer siz de benzer hatayla karşılaşırsanız yorum satırı haline getirebilirsiniz.
  • Derleme sürecinde eğer eksik dosya hatası alıyorsanız bu kurulumu yapmanız gerekebilir.
    sudo apt-get install libc6-dev:i386

Sıfırdan işletim sistemi yazmak | 2 | Bootloader Yazımı

5:50 AM ,

Gerekenler

Derleme ve çalıştırma yapabilmek için nasm (Netwide Assembler, a portable 80x86 assembler), dd (copy a file, converting and formatting) ve qemu (emulator) programlarının kurulu olması gerekmektedir. dd zaten linux dağıtımlarında varsayılan olarak gelmektedir. Diğer iki program ise;
  • sudo apt-get install nasm
  • sudo apt-get install qemu
ile kurulumları yapılabilir.

Bootloader kodumuz

POC olarak yazdığımız bootloader örneği aşağıdaki gibidir.

Bootloader'ın kaynak kodu
Yazdığımız bootloader assembly programı içinde komutların neler yaptığı tek tek açıklanmıştır. Şimdi derleme ve çalıştırma sürecine geçebiliriz.

Derleme&Çalıştırma

Build işlemi 3 basamaktan oluşmakta 
  • nasm -f bin -o boot.bin boot.asm
    Nasm ile flat binary türünde output üretebilmek için -f bin parametresinin kullanılması gerekir.
  • dd status=noxfer conv=notrunc if=boot.bin of=boot.flp
    dd ile floppy disk imajı oluşturmak için yukarıdaki komut kullanılır.
  • qemu-system-i386 boot.flp
    emulatör ile imajı ayağı kaldırmak için yukarıdaki gibi bir komut yürütülür.

Note:

  • Düz kod dosyası (flat binary) : Başlık kısmı olmayan, tanımlayıcı (descriptors) gibi bilgilerin olmadığı makine kodlarıdır.

Sıfırdan işletim sistemi yazmak | 1 | BIOS ve MBR Nedir?

İşletim sistemlerinin açılış süreçleri temelde benzer işlemektedir. Bu noktada biz açılış sürecini açık kaynaklı bir işletim sistemi olan GNU/Linux işletim sistemi üzerinden anlatmaya çalışacağız. Linux işletim sisteminin açılış süreci 6 kategoride incelenebilir. Bunlar kısaca aşağıda listelenmiştir.

Linux işletim sistemi açılış süreci
Bu yazımızda ise açılış sürecinin ilk iki basamağı incelenecek ve ardından MBR içinde yer alacak bootloader'ı diğer yazımızda yazarak işletim sisteminin ilk temelini atmış olacağız.

BIOS (Basic Input/Output System

  • BIOS sistemde bulunan donanımların kontrolünü yapar. Temel görevlerinden biri budur.
  • BIOS'un diğer temel görevi ise Bootloader'ı arar (usb, cd-rom, sabit diskte, vb. yerlerde bootloader programını arar), yükler ve yürütür.
  • BIOS bootloader'ı yürüttükten sonra kontrolü ona bırakır.
  • Kısaca şunu diyebilirz: BIOS MBR bootloader’ı çalıştırmakla görevlidir.

MBR (Master Boot Record)

MBR'un iç yapısı
  • MBR, 512 byte uzunluğundadır. İç yapısında 3 bileşenden oluşur:
    • İlk 446 byte içinde bootloader bulunur. 
    • Sonraki 64 byte'de partition table bilgisi bulunur.
    • Son 2 byte'ta magic number denilen doğrulama bilgileri yer alır.
  • Kısaca şunu diyebilirz: MBR'un görevi GRUB (veya eski sistemlerde LILO) ’ı çalıştırmakla görevlidir.
Bir sonraki yazımızda Bootloader yazımını anlatacağı.

Note

  • Disk Sector: Sistemlerde disk sektör, bir manyetik diskte veya optik diskte bir parçanın alt bölümüdür. Her bir sektör, sabit disk sürücüleri (HDD'ler) için geleneksel olarak 512 byte ve CD-ROM'lar ve DVD-ROM'lar için 2048 byte olmak üzere kullanıcı tarafından erişilebilen sabit bir miktarda veriyi saklayabilir. Daha yeni sabit diskler, gelişmiş Biçim (AF) olarak bilinen 4096 byte (4 KiB) sektör kullanır.
  • Master Boot Sector: Disk içerisindeki her bir partition 'nın ilk sector 'üne Boot Sector denir fakat tüm diskin ilk sector 'üne ise Master Boot Sector denir.


jmp $

5:43 AM
Vefanın, sevginin kısaca insan olmanın hakkını veren Muhsin Bey gibilerin, Anadolu 'da bir zamanlar çokca bulunduğunu ve zamanla iyi atlara binip gittiklerini düşünmüştük. Yaşadığımız çağı Anadolunun zemherisi olduğunu ve tekrar baharın geleceğiyle ümitvar olmuştuk. Kendimizi böylece zinde tutmamız mümkün oluyordu ama geldiğimiz şu noktada galiba Anadolu'ya hiç insan baharı gelmemiş. Muhsin Bey 'ler hep yılkı atları gibi kıyıda köşede kalmışlar, hep ezilen olmuşlar ama kendilerini bozmadan da durabilmişler. 


Bir gün kimin kayığına binerse onun türküsünü söyleyen insan cehennemi topraklara baharın gelmesi ümidiyle.

En azından bozulmadan kalmak ümidiyle