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.
| Dosya | Anlamı |
|---|---|
.dts | Kartın kaynak tanımı (insan okunur) |
.dtsi | Paylaşılan include dosyası, genelde SoC tanımı |
.dtb | dtc ile derlenmiş binary, bootloader kernel'e verir |
.dtbo | Overlay: ç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-treeveyadtc -I fs /sys/firmware/devicetree/baseile görebilirsiniz. - x86 tarafında aynı işi genellikle ACPI yapar.
İ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?
- 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?
Bu konuda başka bir soru biliyor musun?
Mülakatta karşılaştığın soruları ekle, onaylandıktan sonra yayına alınsın.