Giriş
Yazarlar
- Linux Kernel Module Programming Guide, ilk olarak Ori Pomerantz tarafından Linux v2.2 için yazıldı
- Peter Jay Salzman tarafından Linux v2.4 için güncellendi
- Michael Burian tarafından Linux v2.6 için ortak bakım yapıldı
- Bob Mottram tarafından Linux v3.8 ve sonrası sürümler için örnekler güncellendi
- Jim Huang tarafından yakın dönem Linux sürümleri (v5.0 ve üzeri) için güncellendi ve LaTeX belgeleri düzeltildi
Teşekkür
- Çeşitli katkıcılar düzeltmeler ve öneriler sundu
Kernel modülü nedir?
- Linux kernel modülü, gerektiğinde kernel'e dinamik olarak yüklenip kaldırılabilen bir kod parçasıdır
- Kernel modülleri, sistemi yeniden başlatmadan kernel işlevlerini genişletir
- Modüller olmasaydı, her yeni özellik eklemede kernel'i yeniden derlemek ve sistemi yeniden başlatmak gerekirdi
Kernel modül paketleri
- Ubuntu/Debian:
sudo apt-get install build-essential kmod
- Arch Linux:
sudo pacman -S gcc kmod
Kernel'imde hangi modüller var?
lsmod komutuyla şu anda kernel'e yüklenmiş modüller görülebilir
/proc/modules dosyasından da kontrol edilebilir
Kernel'i indirip derlemek gerekir mi?
- Bu rehberi takip etmek için kernel'i indirip derlemeniz gerekmez
- Test amaçlı bir dağıtımda örnekleri çalıştırmak daha güvenlidir
Başlamadan önce
- Modül sürüm yönetimi, X Window System kullanımı, SecureBoot gibi dikkat edilmesi gereken noktalar
Header'lar
- Kernel header dosyalarının kurulması gerekir
- Ubuntu/Debian:
sudo apt-get install kmod linux-headers-$(uname -r)
- Arch Linux:
sudo pacman -S linux-headers
- Fedora:
sudo dnf install kernel-devel kernel-headers
Örnekler
- Tüm örnekler, belgedeki
examples alt dizininde bulunur
Hello World
En basit modül
hello-1.c dosyasını oluşturma ve derleme
- Modülün nasıl yükleneceği ve kaldırılacağının açıklanması
Hello ve Goodbye
module_init ve module_exit makrolarının kullanım örneği
__init ve __exit makroları
__init makrosu, başlatma işlevi tamamlandığında belleği serbest bırakır
__exit makrosu, modül kernel'e gömülü olduğunda işlevi atlar
Lisans ve modül belgelemesi
MODULE_LICENSE makrosuyla modülün lisansını belirtme
MODULE_AUTHOR, MODULE_DESCRIPTION makrolarının kullanım örneği
Komut satırı argümanları geçirme
module_param makrosuyla modüle komut satırı argümanları aktarma
MODULE_PARM_DESC makrosuyla argüman açıklaması ekleme
Birden fazla dosyaya yayılan modül
- Birden fazla kaynak dosyaya bölünmüş kernel modülü örneği
Önceden derlenmiş kernel için modül derleme
- Önceden derlenmiş kernel için modülün nasıl derleneceğinin açıklanması
GN⁺ Özeti
- Bu rehber, Linux kernel modül programlama konusunda kapsamlı bir kılavuz olup çeşitli örneklerle temel kavramlardan ileri konulara kadar ele alır
- Kernel modülleri sayesinde sistemi yeniden başlatmadan kernel işlevleri genişletilebilir; bu da geliştiriciler için önemli bir avantajdır
- Modül sürüm yönetimi, SecureBoot gibi konuların dikkatle anlaşılması ve uygulanması gerekir
- İlgili projeler arasında Linux Device Drivers, The Linux Programming Interface gibi kaynaklar bulunur
1 yorum
Hacker News yorumları
"Detecting button presses"örneğinin RPi modülünü derlemeyi gerektirdiği için zor olduğuna dair bir görüş var