Bir donanım için kernel modülü (kernel space driver) mi yoksa user space driver mı yazarsınız? Artıları ve eksileri nelerdir?
Cevap
Kısa cevap: Kesme gecikmesi kritikse, birden çok süreç cihazı paylaşacaksa veya mevcut bir kernel alt sistemine (IIO, input, net, hwmon) entegre olmak gerekiyorsa kernel driver; basit, düşük hızlı ve tek uygulamanın kullandığı cihazlarda user space driver tercih edilir.
| Kriter | Kernel modülü | User space driver |
|---|---|---|
| Hata etkisi | Bug tüm sistemi çökertebilir (kernel panic) | Sadece süreç çöker |
| Geliştirme / debug | Zor (printk, kgdb, yeniden boot) | Kolay (gdb, valgrind, normal araçlar) |
| Kesme gecikmesi | Düşük, doğrudan IRQ handler | Daha yüksek (UIO/poll ile uyanma) |
| Performans | Context switch yok | Sistem çağrısı ve kopyalama maliyeti |
| Lisans | GPL uyumlu olmalı | Kapalı kaynak mümkün |
| Kernel sürüm bağımlılığı | API değişince yeniden derleme | Kararlı userspace ABI |
User space yöntemleri
- I2C:
/dev/i2c-N+ioctl(I2C_RDWR) - SPI:
/dev/spidevX.Y - GPIO:
/dev/gpiochipN+ libgpiod - Bellek eşlemeli cihaz: UIO (
/dev/uioN) veya VFIO ilemmap
Kernel modülü iskeleti
#include <linux/module.h>
#include <linux/init.h>
static int __init hello_init(void)
{
pr_info("hello: yuklendi\n");
return 0;
}
static void __exit hello_exit(void)
{
pr_info("hello: kaldirildi\n");
}
module_init(hello_init);
module_exit(hello_exit);
MODULE_LICENSE("GPL");make -C /lib/modules/$(uname -r)/build M=$PWD modules
sudo insmod hello.ko && dmesg | tail -1
sudo rmmod helloÖrnek karar: 100 Hz okunan bir I2C sıcaklık sensörü için /dev/i2c-1 üzerinden user space yeterlidir. Mikrosaniye seviyesinde kesme cevabı gereken bir motor encoder'ı için kernel driver gerekir.
İlgili Gömülü Linux soruları
- Linux'ta user space'den GPIO kontrol etmek için sysfs mi libgpiod mu kullanılmalı? Neden?
- User space'den /dev/mem ve mmap ile donanım register'larına erişmek nasıl yapılır? Riskleri ve daha iyi alternatifleri nelerdir?
- Linux kernel'de kesme işleme neden top half ve bottom half olarak ikiye ayrılır? Softirq, tasklet, workqueue ve threaded IRQ arasındaki farklar nelerdir?
- Cross-compilation nedir? Bir cross toolchain hangi bileşenlerden oluşur ve sysroot ne işe yarar?
- Yocto Project ile Buildroot arasındaki farklar nelerdir? Bir ürün için hangisini seçersiniz?
- Device tree nedir, neden kullanılır? .dts, .dtsi, .dtb ve overlay kavramlarını açıklayın.
Bu konuda başka bir soru biliyor musun?
Mülakatta karşılaştığın soruları ekle, onaylandıktan sonra yayına alınsın.