суббота, 4 декабря 2010 г.

3.9. Краткий обзор

Перевод с английского на русский

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

Эта глава ввела следующие символы и файлы заголовков. Список полей в структуре file_operations и структуре file здесь не повторяются.

#include 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 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 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 kernel.h>
container_of(pointer, type, field);

Удобный макрос, который может быть использован для получения указателя на структуру из указателя на другие структуры, содержащиеся в нём.

#include 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);

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

Переведено на сайте www.notabenoid.com

http://notabenoid.com/book/11832/38277

Внимание! Этот перевод, возможно, ещё не готов,
так как модераторы установили для него статус
"перевод редактируется"

Комментариев нет:

Отправить комментарий

Примечание. Отправлять комментарии могут только участники этого блога.