CodeBlanks Logo Icon CodeBlanks

Cihaz numarası

Cihaz numarası ve kayıt işlemini öğrenirsin.

dev_t: cihaz numarası

Linux'ta her karakter ya da blok cihaz bir cihaz numarasına (dev_t) sahiptir. Bu numara iki parçadan oluşur: major ve minor.

Major numara sürücüyü, minor numara aynı sürücü içindeki cihazı belirtir. dev_t türü <linux/types.h> başlığında tanımlanır. MKDEV(major, minor) makrosu ikisini birleştirir; MAJOR(dev) ve MINOR(dev) ayırır. ls -l /dev komutu major ve minor numaralarını gösterir. Sürücü yazarı alloc_chrdev_region ile numara ister.

Numara tahsisi

Sürücü yazarı cihaz numarasını iki yolla alır: statik register_chrdev_region veya dinamik alloc_chrdev_region. Dinamik yöntem çekirdeğin uygun bir major seçmesine izin verir.

Çakışmayı önlemek için dinamik tahsis tercih edilir. Tahsis başarılı olunca dev_t değişkeni major ve minor bilgisi taşır. Sürücü kaldırılırken unregister_chrdev_region ile numara geri verilir. Init hatası yolunda numara bırakılmalıdır; aksi halde kaynak sızıntısı olur. Numara alınmadan cihaz kaydı yapılamaz.

Uygulama Cihaz numaralarını yazdır

void print_dev(int major, int minor) fonksiyonunu tanımla; gövdesi printf("dev=%d:%d\n", major, minor); olsun. main içinde üç cihaz için çağır: (10, 0), (1, 5), (254, 1).

Başlangıç kodu

main.c
#include <stdio.h>

// print_dev fonksiyonunu tanımla
// üç cihaz için (major, minor) ile çağır

int main(void) {
    return 0;
}

Örnek çözüm

main.c
#include <stdio.h>

void print_dev(int major, int minor) {
    printf("dev=%d:%d\n", major, minor);
}

int main(void) {
    print_dev(10, 0);
    print_dev(1, 5);
    print_dev(254, 1);
    return 0;
}

Beklenen çıktı

dev=10:0
dev=1:5
dev=254:1

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 dev_t türü neyi tutar?

  • Yalnız major
  • Major ve minor Doğru cevap
  • Cihaz adını
  • Yalnız minor

Açıklama: dev_t hem major hem minor numarayı bir arada tutar.

2 Cihaz numarası makrolarını eşle

Kavram Anlamı
dev_t Cihaz numarası
MKDEV Major ve minor birleştir
MAJOR Büyük numara
MINOR Küçük numara

3 MKDEV çağrısını tamamla

Soru
dev_t dev = MKDEV(____, minor);
Cevap
dev_t dev = MKDEV(major, minor);

Açıklama: MKDEV önce major, sonra minor alır.

Uzman bölümündeki tüm dersler