next up previous contents
Next: OBSŁUGA PLIKÓW SPECJALNYCH Up: OGÓLNIE O URZĄDZENIACH Previous: OGÓLNIE O URZĄDZENIACH   Spis rzeczy

Struktury danych i typy

Struktury opisujące urządzenie są zdefiniowane w pliku include/linux/fs.h:
  struct char_device {
        struct list_head	hash;    
        atomic_t		count;  
        dev_t			dev;
        atomic_t		openers;
        struct semaphore	sem;
  };

  struct block_device {
        struct list_head	bd_hash;
        atomic_t		bd_count;
        dev_t			bd_dev;  /* not a kdev_t - it's a search key */
        atomic_t		bd_openers;
        const struct block_device_operations *bd_op;
        struct semaphore	bd_sem;	/* open/close mutex */
  };

Istotny z punktu widzenia plików urządzeń i tablic rozdzielczych jest tutaj fakt, że w strukturze opisującej urządzenie blokowe jest dodatkowe pole bd_op, jest to wskaźnik do zestawu operacji związanych z tym urządzeniem.

Do przechowywania obu numerów danego urządzenia w jednej zmiennej służy typ dev_t. Jest to właściwie zlepek dwóch bajtów. Do jego tworzenia służy makro MKDEV(nr główny, nr podrzędny). Aby uzyskać z tego typu numer główny wykorzystujemy MAJOR(), a dla numeru podrzędnego MINOR(). Jądro nie używa numeru jednak tego typu, a korzysta z kdev_t. Do konwersji między tymi typami służą funkcje:

  dev_t kdev_t_to_nr(kdev_t dev);

  kdev_t to_kdev_t(int dev);



Marcin Czępiński 2001-12-19