Linux

Linux Çekirdeği (Kernel’ı) Nasıl Derlenir?

Merhaba arkadaşlar. Sizlere bazı durumlarda bizlere lazım olan Linux Çekirdeği’ni (Kernel’ını) derlemeyi anlatmaya çalışacağım. Bu yazıyı yazarken bu adresi referans aldım. Ben bağlantıdaki yazının güncellenmiş bir halini yazmaya çalıştım. Buradan screenshoot isimli yazara da teşekkürlerimi iletiyorum.

Normalde siz Linux çekirdeği üzerine inşa edilmiş bir dağıtım kurduğunuz zaman bu dağıtım çekirdek uygulamaları geliştirebileceğiniz şekilde gelmez. Bu nedenle siz çekirdek uygulamaları yazamazsınız. Çekirdek uygulamaları yazabilmeniz için mutlaka çekirdeği derlemeniz gerekir. Çekirdek derlemedeki bir başka amacınız da sistem performansını arttırmak istemeniz olabilir. Yalnız derleme uzun ve biraz da zor bir iş. Şimdi kendinizi hazır hissediyorsanız başlayalım. Yazımız adım adım gidecek.

  1. Buradan Linux çekirdeğinin en son stabil sürümünü indiriyoruz. Ben bu yazıyı yazarken son stabil çekirdek 3.16.5 idi.                                                                                                                                                                                    Screenshot from 2014-10-11 22:39:32Latest Stable Kernel 3.17 yazıyor ama siz işi garantiye almak için 2. satırdaki stable sürümü indirin.
  2. Ben bu dosyayı Downloads klasörüne indirdim. Siz de indirdiğiniz yere göre şu komutu düzenleyerek dosyayı /usr/src dizinine kopyalayın:
    cp /home/ilkay/Downloads/3.16.5.tar.xz /usr/src
  3. cd komutu ile /usr/src dizinine geçiş yapın:
    cd /usr/src
  4. tar.xz uzantılı dosyayı şu komutla klasöre çıkartın:
    tar -xJvf linux-3.16.3.tar.xz
  5. Klasöre çıkarttığınız dizine girin:
    cd linux-3.16.5
  6. Eski ayarları temizlemek için şu komutu verin:
    make mrproper
  7. Sisteminizi optimize etmek için yapacağımız işe geldi sıra. Ben bu aşamada hiç bir şey yapmadan geçtim. Ama siz sisteminizi optimize etmek istiyorsanız komutu kullanabilirsiniz:
    make menuconfig


    Screenshot from 2014-10-11 23:27:52

  8. Fazlalıkları temizlemek için şu komutu verin:
    make clean
  9. Sıra geldi elimizdeki çekirdeği derlemeye. Yaklaşık olarak 30 dakika sürecek bu işlem için şu komutu verin ( İşlemciniz daha iyiyse daha kısa sürebilir 🙂 ):
    make bzImage
  10. Ardından derlemenin en uzun işlemi olan modül derlemesini gerçekleştirmek için şu komutu verin:
    make modules
  11. Şu komutla çekirdek modüllerini modül kütüphanesine taşıma işlemini yapın:
    make modules_install
  12. Şu komutla modüllerin ve sistemin düzgün çalışmasını sağlıyoruz:
    mkinitramfs 3.16.5 -o /boot/initrd.img-3.16.5-generic
  13. Şimdi vereceğiniz şu komutla derlediğiniz çekirdeği boot dizinine kopyalayın:
    cp /usr/src/linux-3.16.5/arch/x86_64/boot/bzImage /boot/vmlinuz-3.16.5-generic
  14. System.map dosyasını boot dizinine kopyalayın:
    cp System.map /boot/System.map-KERNEL_VERSION
  15. Sembolik bağ oluşturmak için şu kodu girin:
    ln -s /boot/System.map-KERNEL_VERSION /boot/System.map
  16. Şimdi sıra derlediğimiz çekirdeğin grub ekranında çıkmasını sağlamaya geldi. Öncelikle şu komutla grub ayar dosyasını açın:
    sudo gedit /boot/grub/grub.cfg
  17. Yeni bir terminal açın ve şu komutu verin:
    sudo blkid

    Bu komutu verdikten sonra gelen çıktıdan UUID değerini alacaksınız ve grub dosyasını düzenlerken kullanacaksınız. Ayrıca hd0 mı yoksa hd1 mi olduğuna yine buradan karar vereceksiniz. sda ise hd0 sdb ise hd1 yazmanız gerekiyor. Bu komutu herhangi bir dizin içindeyken verebilirsiniz.
    Screenshot from 2014-10-11 23:38:38

  18. Şimdi buradan aldığımız değerler ile grub dosyasını düzenleyelim. Az önce açtığınız grub dosyasında ### BEGIN /etc/grub.d/10_linux ### satırını bulun ve altına şu metni ekleyin:
    menuentry 'Pardus, Linux 3.16.5-generic' --class ubuntu --class gnu-linux --class gnu --class os {
        recordfail
        insmod ext2
        set root='(hd0,6)'
        search --no-floppy --fs-uuid --set 57a40b28-08a8-4fe5-ba57-7fb4fc063d83
        linux    /boot/vmlinuz-3.16.5-generic root=UUID=111a05da-58b6-454a-8e29-23b7e215f382 ro   quiet splash
        initrd    /boot/initrd.img-3.16.5-generic
    }
    menuentry 'Pardus, Linux 3.16.5-generic (recovery mode)' --class ubuntu --class gnu-linux --class gnu --class os {
        recordfail
        insmod ext2
        set root='(hd0,6)'
        search --no-floppy --fs-uuid --set 111a05da-58b6-454a-8e29-23b7e215f382
        echo    'Loading Linux 3.16.5-generic ...'
        linux    /boot/vmlinuz-3.16.5-generic root=UUID=111a05da-58b6-454a-8e29-23b7e215f382 ro single 
        echo    'Loading initial ramdisk ...'
        initrd    /boot/initrd.img-3.16.5-generic
    }

     

  19. Ve son olarak şu komutu verin ve ardından sistemi yeniden başlatın. Yeniden başlattığınızda generic kelimesine sahip boot seçeneğinden sistemi boot edin:
    sudo update-grub2

Çekirdek(kernel) derleme yazım burada bitiyor. Başka bir yazıda görüşmek üzere sağlıcakla kalın.

7 Yorum

  • İlkay Bey merhaba,
    make modules_install işleminden sonra make install komutunu verdiğimizde sonraki aşamaalrı otomatik olarak gerçekleştiğini okudum. Öncelikle bu bilginin doğruluğunu öğrenmek istiyorum. ayrıca make install işleminin ardından grub ayar dosyasını açtığımda içi boş görünüyor. reboot işleminden sonra da init ramdisk kısmında pc donuyor ve boot işlemini tamamlayamıyor. benzer bir sorunla karşılaştınız mı veya öneriniz var mı?

    • Merhabalar.
      Benim bildiğim kadarı ile make install komutunu verdikten sonra işlemler otomatik yürümüyor. Yine manuel olarak devam ettirmeniz gerekiyor.
      Diğer yandan Grub dosyasının boş olması bir soruna dikkat ediyor. Path yazımlarında bir / vs. eksikse asıl dosya yerine kendisi boş bir dosya oluşturup onu gösteriyor.

  • İlkay Bey merhaba,

    make menuconfig komutunda hata veriyor
    root@genclik-VirtualBox:/usr/src/linux-4.3.5# make menuconfig
    HOSTCC scripts/basic/fixdep
    HOSTCC scripts/kconfig/mconf.o
    In file included from scripts/kconfig/mconf.c:23:0:
    scripts/kconfig/lxdialog/dialog.h:38:20: fatal error: curses.h: Böyle bir dosya ya da dizin yok
    #include CURSES_LOC
    ^
    compilation terminated.
    make[1]: *** [scripts/kconfig/mconf.o] Hata 1
    make: *** [menuconfig] Hata 2

    • Merhabalar.
      O komut donanım optimizasyonu için kullanılıyor. Yazıda da belirtildiği üzere ben o komutu optimizasyon yapmadığım için bir işlem yapmadan geçmiştim.
      Eğer bilginiz yoksa ya da donanım optimizasyonu yapmayacaksınız o komutu geçebilirsiniz.
      Öte yandan Linux Çekirdeği’nin şu anda 4.4.1 sürümü çıkmış. Ben yazdığımda 3.16.5 sürümü vardı, çekirdek derleme adımları çok değişkenlik gösterebiliyor.
      Kolay gelsin.

Yorum Yap