Краткая справка

Предыдущая  Содержание  Следующая V*D*V

Эта глава ввела следующие символы и файлы заголовков. Списки полей в структуре 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);

Копирование данных между пользовательским пространством и пространством ядра.

 

Предыдущая  Содержание  Следующая