The website "dmilvdv.narod.ru." is not registered with uCoz.
If you are absolutely sure your website must be here,
please contact our Support Team.
If you were searching for something on the Internet and ended up here, try again:

About uCoz web-service

Community

Legal information

Драйвер “memory”: чтение устройства

Драйвер “memory”: чтение устройства

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

Для чтения устройства функцией пользователя fread или аналогичной, существует член read структуры file_operations, используемый в вызове register_chrdev. На этот раз это функция memory_read. Её аргументы: структура типа file; буфер (buf), из которого будет читать функция пользовательского пространства (fread); счётчик с числом байтов для передачи (count), который имеет такое же значение, как и обычный счётчик в функции пользовательского пространства (fread); и, наконец, позиция, с которой начинается чтение файла (f_pos). В этом простом случае функция memory_read передаёт один байт из буфера драйвера (memory_buffer) в пользовательское пространство с помощью функции copy_to_user:

 

<memory read> =

 

ssize_t memory_read(struct file *filp, char *buf,

                    size_t count, loff_t *f_pos) {

 

    /* Передаём данные в пространство пользователя */

    copy_to_user(buf,memory_buffer,1);

 

    /* Изменяем позицию чтения, как это необходимо */

    if (*f_pos == 0) {

        *f_pos+=1;

        return 1;

    } else {

        return 0;

    }

}

 

Также изменяется позиция чтения в файле (f_pos). Если позиция находится в начале файла, она увеличивается на единицу, и количество байт, которые были надлежащим образом прочитаны, отдаётся в качестве возвращаемого значения, 1. Если не в начале файла, возвращается конец файла (0), так как файл сохраняет только один байт.

 

Теперь эта функция добавлена в Таблицу 7.

 

События

Пользовательские функции

Функции ядра

Загрузка модуля

insmod

module_init()

Открытие устройства

fopen

file_operations: open

Чтение устройства

fread

file_operations: read

Запись в устройство

 

 

Закрытие устройства

fclose

file_operations: release

Удаление модуля

rmmod

module_exit()

 

Таблица 7. События драйвера устройства и связанные с ними интерфейсные функции в пространстве ядра и пользовательском пространстве.

 

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