Краткая справка |
Предыдущая Содержание Следующая |
Эта глава ввела следующие символы и файлы заголовков. Списки полей в структуре file_operations и структуре file здесь не повторяются.
#include <linux/types.h> dev_t dev_t является типом, используемым для представления в ядре номера устройства. int MAJOR(dev_t dev); int MINOR(dev_t dev); Макросы для получения старших и младших чисел из номера устройства. dev_t MKDEV(unsigned int major, unsigned int minor); Макрос, который строит элемент данных dev_t из старших и младших чисел.
#include <linux/fs.h> Заголовок “filesystem” является заголовком, необходимым для написания драйверов устройств. Здесь декларируются многие важные функции и структуры данных. int register_chrdev_region(dev_t first, unsigned int count, char *name) int alloc_chrdev_region(dev_t *dev, unsigned int firstminor, unsigned int count, char *name) void unregister_chrdev_region(dev_t first, unsigned int count); Функции, которые позволяют драйверу выделять и освобождать диапазоны номеров устройств. register_chrdev_region должна быть использована, если старший желаемый номер известен заранее, для динамического выделения взамен используйте alloc_chrdev_region. int register_chrdev(unsigned int major, const char *name, struct file_operations *fops); Старая процедура (до 2.6) регистрации символьного устройства. Она эмулируется в ядре 2.6, но не должна быть использована для нового кода. Если старший номер не 0, он используется без изменений; в противном случае устройству присваивается динамический номер. int unregister_chrdev(unsigned int major, const char *name); Функция, которая отменяет регистрацию, сделанную с помощью register_chrdev. Обе величины, major и строка name, должны содержать те же значения, которые были использованы для регистрации драйвера. struct file_operations; struct file; struct inode; Три важные структуры данных, используемые большинством драйверов устройств. Структура file_operations содержит методы символьного драйвера; структура file представляет собой открытый файл, а структура inode представляет собой файл на диске.
#include <linux/cdev.h> struct cdev *cdev_alloc(void); void cdev_init(struct cdev *dev, struct file_operations *fops); int cdev_add(struct cdev *dev, dev_t num, unsigned int count); void cdev_del(struct cdev *dev); Функции управления структурами cdev, которые представляют в ядре символьные устройства.
#include <linux/kernel.h> container_of(pointer, type, field); Удобный макрос, который может быть использован для получения указателя на структуру из указателя на другие структуры, содержащиеся в нём.
#include <asm/uaccess.h> Подключает декларации файлов функций, используемых кодом ядра для перемещения данных в и из пространства пользователя. unsigned long copy_from_user (void *to, const void *from, unsigned long count); unsigned long copy_to_user (void *to, const void *from, unsigned long count); Копирование данных между пользовательским пространством и пространством ядра.
|
Предыдущая Содержание Следующая |