Device tree nedir, neden kullanılır? .dts, .dtsi, .dtb ve overlay kavramlarını açıklayın.

Cevap

Device tree, kernel'in kendi başına keşfedemeyeceği donanımı (bellek adresleri, kesme numaraları, I2C/SPI üzerindeki cihazlar, pin ayarları) tanımlayan bir veri yapısıdır. Böylece aynı kernel imajı, sadece farklı bir .dtb ile farklı kartlarda çalışabilir; donanım bilgisi C koduna gömülmez.

DosyaAnlamı
.dtsKartın kaynak tanımı (insan okunur)
.dtsiPaylaşılan include dosyası, genelde SoC tanımı
.dtbdtc ile derlenmiş binary, bootloader kernel'e verir
.dtboOverlay: çalışma anında/boot'ta ana ağaca eklenen parça (HAT, eklenti kartları)
&i2c1 {
    status = "okay";
    clock-frequency = <400000>;

    temp_sensor: tmp102@48 {
        compatible = "ti,tmp102";
        reg = <0x48>;
        interrupt-parent = <&gpio1>;
        interrupts = <7 IRQ_TYPE_LEVEL_LOW>;
    };
};

Sürücü ile nasıl eşleşir?

Kernel, düğümdeki compatible stringini sürücünün of_match_table tablosuyla karşılaştırır. Eşleşme olursa sürücünün probe() fonksiyonu çağrılır ve sürücü reg, interrupts gibi özellikleri of_property_read_u32() vb. ile okur.

static const struct of_device_id tmp102_of_match[] = {
    { .compatible = "ti,tmp102" },
    { }
};
MODULE_DEVICE_TABLE(of, tmp102_of_match);

Pratik notlar

  • status = "disabled" olan düğüm probe edilmez; yeni bir cihaz çalışmıyorsa ilk bakılacak yer burasıdır.
  • Çalışan sistemdeki ağacı /proc/device-tree veya dtc -I fs /sys/firmware/devicetree/base ile görebilirsiniz.
  • x86 tarafında aynı işi genellikle ACPI yapar.
  1. Linux'ta user space'den GPIO kontrol etmek için sysfs mi libgpiod mu kullanılmalı? Neden?KolayGömülü LinuxEmbedded
  2. 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?ZorGömülü LinuxEmbedded
  3. 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?ZorGömülü LinuxEmbedded
  4. Cross-compilation nedir? Bir cross toolchain hangi bileşenlerden oluşur ve sysroot ne işe yarar?KolayGömülü LinuxEmbedded
  5. Yocto Project ile Buildroot arasındaki farklar nelerdir? Bir ürün için hangisini seçersiniz?OrtaGömülü LinuxEmbedded
  6. 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?OrtaGömülü LinuxEmbedded

Bu konuda başka bir soru biliyor musun?

Mülakatta karşılaştığın soruları ekle, onaylandıktan sonra yayına alınsın.

Soru ekle