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.
- Buradan Linux çekirdeğinin en son stabil sürümünü indiriyoruz. Ben bu yazıyı yazarken son stabil çekirdek 3.16.5 idi.
Latest Stable Kernel 3.17 yazıyor ama siz işi garantiye almak için 2. satırdaki stable sürümü indirin.
- 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
- cd komutu ile /usr/src dizinine geçiş yapın:
cd /usr/src
- tar.xz uzantılı dosyayı şu komutla klasöre çıkartın:
tar -xJvf linux-3.16.3.tar.xz
- Klasöre çıkarttığınız dizine girin:
cd linux-3.16.5
- Eski ayarları temizlemek için şu komutu verin:
make mrproper
- 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
- Fazlalıkları temizlemek için şu komutu verin:
make clean
- 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
- Ardından derlemenin en uzun işlemi olan modül derlemesini gerçekleştirmek için şu komutu verin:
make modules
- Şu komutla çekirdek modüllerini modül kütüphanesine taşıma işlemini yapın:
make modules_install
- Ş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
- Ş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
- System.map dosyasını boot dizinine kopyalayın:
cp System.map /boot/System.map-KERNEL_VERSION
- Sembolik bağ oluşturmak için şu kodu girin:
ln -s /boot/System.map-KERNEL_VERSION /boot/System.map
- Ş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
- 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.
- Ş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 }
- 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.
Peki bu kerneli nasıl silebilirim? Nasıl tamamen kaldırabilirim?
Çekirdeği tamamen kaldırmaktan kastınız nedir? İşletim sistemi o çekirdek olmaksızın çalışmaz bildiğiniz üzere.
İ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.
make menuconfig komutunda hata veriyor
İ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.