Cihaz numarası
- C kursu
- Uzman
- Ders 10/47
- 5 dk
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
#include <stdio.h>
// print_dev fonksiyonunu tanımla
// üç cihaz için (major, minor) ile çağır
int main(void) {
return 0;
}Örnek çözüm
#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
dev_t dev = MKDEV(____, minor);
dev_t dev = MKDEV(major, minor);
Açıklama: MKDEV önce major, sonra minor alır.