Драйвер “memory”: запись в устройство

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

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

 

<memory write> =

 

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

                      size_t count, loff_t *f_pos) {

 

    char *tmp;

 

    tmp=buf+count-1;

    copy_from_user(memory_buffer,tmp,1);

    return 1;

}

 

В этом случае данные из пользовательского пространства в пространство ядра передаёт функция copy_from_user.

 

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

 

События

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

Функции ядра

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

insmod

module_init()

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

fopen

file_operations: open

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

fread

file_operations: read

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

fwrite

file_operations: write

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

fclose

file_operations: release

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

rmmod

module_exit()

 

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

 

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