Linux Kernel Nedir? Çekirdek Yapısı ve Modül Yönetimi

Kernel'in donanımla nasıl konuştuğunu, modüllerin nasıl yüklenip kaldırıldığını ve sürüm takibini gerçek komutlarla adım adım anlatan pratik rehber.

Linux
Linux Kernel Nedir? Çekirdek Yapısı ve Modül Yönetimi

"Linux" kelimesi teknik olarak tek bir şeyi tarif eder: çekirdek. Masaüstünde gördüğünüz pencereler, komut satırı, paket yöneticisi; bunların hepsi bu çekirdeğin üzerine sonradan eklenmiş katmanlardır. Çekirdeği anlamadan sistem yönetimi yapmak, motor kapağını hiç açmadan arabayı tamir etmeye çalışmak gibidir: bazı sorunları çözersiniz ama neyin neden çalıştığını bilmezsiniz. Bu yazıda kernel'in ne yaptığını, modüllerin nasıl işlediğini ve sürüm bilgisini nasıl okuyacağınızı somut komutlarla ele alıyoruz.

Kernel Tam Olarak Ne Yapar?

Kernel, donanım ile üstündeki her şey arasında duran tek katmandır. Bir program disk okumak, bellek ayırmak ya da ağa paket göndermek istediğinde donanıma doğrudan dokunmaz; bunun yerine sistem çağrısı (system call) denen bir kapıdan kernel'e seslenir. strace ile herhangi bir programı çalıştırıp bu çağrıları canlı görebilirsiniz:

strace -c ls /home

Bu komut, ls çalışırken kaç openat, read, close çağrısı yaptığını sayar. Kernel'in dört ana görevi vardır: süreç zamanlama (hangi programın işlemciyi ne zaman kullanacağı), bellek yönetimi, aygıt sürücüleri üzerinden donanım kontrolü ve dosya sistemi erişimi. Bu görevlerden biri çökerse tüm sistem etkilenir, çünkü kullanıcı alanındaki hiçbir program kernel'i atlayıp donanıma direkt erişemez.

Çalışan kernel'in sürümünü ve derleme bilgisini görmek için şu komutları kullanın:

uname -r
cat /proc/version

/proc dizini burada anahtar noktadır. Kernel, kendi iç durumunu (süreçler, bellek haritası, aygıtlar) bu sanal dosya sistemi üzerinden dışarı açar. /proc/cpuinfo, /proc/meminfo gibi dosyalar diskte saklanmaz; kernel'in o an ürettiği metinlerdir.

Kernel Alanı ve Kullanıcı Alanı Ayrımı

Sistem iki ayrı bölgede çalışır: kernel space ve user space. Kernel space'te çalışan kod donanıma tam yetkiyle erişir; user space'teki bir tarayıcı ya da metin editörü ise kernel'in izin verdiği kadarını görür. Bu ayrım güvenlik açısından önemlidir: bir uygulama çökse bile kernel doğrudan etkilenmez, çünkü aradaki sınırı işlemcinin kendisi (ring 0 / ring 3 ayrımı) donanımsal olarak zorlar.

Terminal ekranında uname -r ve top komutlarıyla kernel sürümü ve sistem zamanı sütunlarının görüntülenmesi

Bir sürecin ne kadar kernel zamanı, ne kadar kullanıcı zamanı harcadığını görmek pratik bir teşhis yöntemidir:

ps -o pid,pcpu,time,comm -p <PID>
top

top çıktısındaki %sy (system) sütunu kernel tarafında geçen işlemci zamanını, %us (user) sütunu ise uygulama kodunda geçen zamanı gösterir. Bir süreç sürekli yüksek %sy üretiyorsa çok fazla sistem çağrısı yapıyor demektir; yoğun disk G/Ç'si olan bir yedekleme scripti bunun tipik örneğidir.

Kernel Modülleri Nasıl Yüklenir ve Kaldırılır?

Her donanım sürücüsünü, her dosya sistemi desteğini kernel'e sabit biçimde gömmek onu gereksiz yere büyütür. Modüller bu sorunu çözer: gerektiğinde yüklenen, gerekmediğinde bellekte yer kaplamayan kod parçalarıdır. Şu an yüklü modülleri listelemek için:

lsmod

Çıktı üç sütun verir: modül adı, kapladığı bellek miktarı ve o modülü kullanan diğer modül sayısı. Belirli bir modül hakkında ayrıntı (yazarı, parametreleri, desteklediği donanım) almak için:

modinfo e1000e

Bir modülü elle yüklemek ve kaldırmak için şu komutlar kullanılır:

sudo modprobe vfat
sudo modprobe -r vfat

modprobe, insmod'dan farklı olarak bağımlılıkları otomatik çözer: bir modül başka bir modüle ihtiyaç duyuyorsa onu da yükler. Bir modülü her açılışta otomatik yüklemek için /etc/modules-load.d/ altına bir .conf dosyası eklemeniz yeterlidir:

echo "vfat" | sudo tee /etc/modules-load.d/vfat.conf

Bir donanımın hangi modülü kullandığını bulmak, sorun giderirken en çok işe yarayan adımdır:

lspci -k
lsusb -t

lspci -k, her PCI aygıtının yanında "Kernel driver in use" satırıyla hangi modülün devrede olduğunu gösterir. Ağ kartı tanınmıyorsa ya da ses çıkmıyorsa ilk bakılacak yer burasıdır.

Kernel Sürümünü Doğru Okumak

uname -r çıktısı genelde 6.8.0-45-generic gibi bir dize verir. Bu sayı rastgele değildir: ilk iki rakam ana sürümü (major.minor), üçüncü rakam yama sürümünü, tire sonrası ise dağıtımın kendi paketleme numarasını gösterir. Ubuntu ve Debian gibi dağıtımlar kernel.org'daki upstream sürümü alıp kendi güvenlik yamalarını üstüne ekler; bu yüzden aynı "6.8" ana sürümü farklı dağıtımlarda farklı yama numaralarıyla karşınıza çıkar.

Kernel güncelleme sürecinin adımlarını gösteren akış şeması: paket güncelleme, yeni kernel kurulumu, yeniden başlatma

Kernel güncellemeleri genelde paket yöneticisiyle birlikte gelir:

sudo apt update && sudo apt upgrade

Burada önemli bir ayrıntı var: yeni kernel kurulduktan sonra devreye girmesi için sistemin yeniden başlatılması gerekir. Çalışan kernel ile diskteki en güncel kernel'in aynı olup olmadığını şu komutlarla kontrol edebilirsiniz:

uname -r
ls /boot/vmlinuz-*

İkisi eşleşmiyorsa sistem yeniden başlatmayı bekliyor demektir. Kesintisiz çalışması gereken sunucularda livepatch gibi canlı yama mekanizmaları güvenlik yamaları için bu yeniden başlatma ihtiyacını ortadan kaldırabilir, ama bu ayrı bir kurulum gerektirir ve her dağıtımda hazır gelmez.

Kendi Kernel Yapılandırmanızı Görmek

Çalışan kernel'in hangi özelliklerle derlendiğini merak ediyorsanız yapılandırma dosyasına bakabilirsiniz.

Terminal ekranında dmesg ve journalctl komutlarıyla kernel log kayıtlarının incelenmesi
zcat /proc/config.gz | grep CONFIG_
cat /boot/config-$(uname -r) | head -30

Bu dosya binlerce CONFIG_* satırı içerir; her satır, ilgili özelliğin kernel derlenirken açık (y), modül olarak (m) ya da kapalı bırakıldığını gösterir. Çoğu kullanıcının bu dosyayı açmasına gerek yoktur; ama özel bir donanım sürücüsü derleyecekseniz ya da bir güvenlik özelliğinin (örneğin AppArmor ya da SELinux desteğinin) açık olup olmadığını doğrulayacaksanız ilk bakılacak yer burasıdır.

YöntemNe zaman kullanılırRisk seviyesi
Dağıtımın paket yöneticisiGünlük kullanım, standart sunucularDüşük
Farklı kernel sürümü kurma (apt install linux-image-*)Belirli donanım/özellik desteği gerektiğindeOrta
Kendi kernel'ini derlemeGömülü sistem, çok özel gereksinimYüksek

Çoğu durumda ilk satırdaki yöntem yeterlidir. Kendi kernel'inizi derlemek saatler sürebilir, yanlış yapılandırma ise sistemi açılamaz hale getirebilir; bu yüzden gerçekten gerekmedikçe tavsiye edilmez.

Modül Sorunlarını Teşhis Etmek

Bir modül yüklenemediğinde ya da beklenmedik davrandığında kernel bunu kendi log halkasına yazar. Bu kaydı okumak için:

dmesg | tail -50
dmesg | grep -i firmware

dmesg, kernel'in açılıştan itibaren ürettiği tüm mesajları tutar; bir USB takıldığında, bir sürücü hata verdiğinde ya da bellek yetersizliği yüzünden OOM killer bir süreci sonlandırdığında ilk iz burada görünür. Kalıcı log için journalctl -k komutu aynı bilgiyi systemd günlüğünden çeker ve önceki açılışları da listeler:

journalctl -k -b -1

-b -1 bir önceki açılış oturumunu gösterir; sistem beklenmedik şekilde yeniden başladıysa çökme anındaki son satırları buradan okuyabilirsiniz. Modül yüklenirken "Unknown symbol" hatası alıyorsanız modülün derlendiği kernel sürümü ile şu an çalışan sürüm genelde uyuşmuyordur; modinfo çıktısındaki vermagic satırı bunu doğrular.

Sık karşılaşılan üç modül hatası ve tipik nedeni şöyle sıralanabilir:

  • "Module not found": modül adı yanlış yazılmıştır ya da depmod çalıştırılmamıştır (yeni derlenen modüllerden sonra sudo depmod -a gerekir).
  • "Operation not permitted": Secure Boot açıktır ve modül imzasızdır; imzalı olmayan üçüncü parti sürücüler bu durumda yüklenmez.
  • "Unknown symbol": modül, çalışan kernel'den farklı bir sürüm için derlenmiştir.

Bu üç durumu ayırt etmek, saatlerce rastgele komut denemek yerine doğru düzeltmeye doğrudan gitmenizi sağlar.

Pratikte İşe Yarayan Kernel Bilgisi

Kernel'i günlük kullanımda elle yönetmeniz gerekmez; dağıtımınız bunu sizin için halleder. Ama bir donanım tanınmadığında, bir sürücü hata verdiğinde ya da sunucu beklenmedik şekilde yeniden başladığında yukarıdaki komutlar (lsmod, lspci -k, dmesg, journalctl -k) sorunu dakikalar içinde daraltmanızı sağlar. Bu komutları bir kez elle deneyip çıktılarına aşina olmak, ezberlemekten çok daha değerlidir; gerçek bir arıza anında fark yaratan da budur.

Resmî kernel belgelerine ve sürüm notlarına kernel.org üzerinden ulaşabilirsiniz; Ubuntu kullanıyorsanız dağıtıma özgü kernel paketleme ayrıntıları Ubuntu belgelerinde yer alır.

Celil Uyanikoglu

Yazan Celil Uyanikoglu

Bilgisayar mühendisiyim; 25 yılı aşkın süredir bilgi işlem sektörünün içindeyim. Bu blogu 2020'de, işimde her gün karşılaştığım sorunların çözümlerini bir yere yazmak için açtım: Linux, güvenlik, tarayıcılar, yapay zeka araçları. Yazdığım her rehberi önce kendi bilgisayarımda ya da sunucumda deniyorum; çalıştığını görmediğim adımı yayınlamam. Hatalı ya da eskimiş bir şey görürsen iletişim sayfasından yaz — düzeltirim.

Yorum

Henüz yorum yok.

Sohbete katıl. Yorumlar yayınlanmadan önce moderasyondan geçer.

Yorum yap

E-posta adresin yayınlanmaz. Yorumlar moderasyondan sonra yayınlanır.

Sırada

İlgili notlar