2 puan yazan GN⁺ 2024-07-28 | 1 yorum | WhatsApp'ta paylaş

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

 
GN⁺ 2024-07-28
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
    • qemu'nun kernel hackleme deneyimi yaşamak için iyi bir yöntem olduğu söyleniyor
  • Linux Foundation'ın LDD (linux device driver) ve Linux kernel kitaplarının güncellenmesine sponsor olması gerektiğine dair bir görüş var
  • Bir kullanıcı, bunu ilk kez 22 yıl önce okuduğu deneyimini paylaşıyor
  • The Linux Memory Manager kitabının en son güncellemesinin Temmuz başında yapıldığı ve şu anda düzenlenmekte olduğu bilgisi var
  • Linux kernel programlama hakkında genel sorular var; örneğin dosya sistemi veya bellek yönetimi hackleme gibi
    • Robert Love'un "Linux Kernel Development" kitabı vardı, ancak muhtemelen artık güncellenmiyor
  • Doğrudan kernel modülü derlemeye yönelik ayrıntılı ve pratik öğretici övülüyor
  • Yazarın metni yazmak veya iyileştirmek için LLM kullanıp kullanmadığına dair bir soru var