Информация об изменениях

Сообщение Модуль ядра Linux от 04.06.2024 20:55

Изменено 04.06.2024 20:57 maks1180

Модуль ядра Linux
взял я пример chrdev модуля Linux, работает нормально.
При чтении устройста данные пользователю отправляет через put_user, в функции
static ssize_t device_read(struct file *flip, char *buffer, size_t len, loff_t *offset)

если я в этой функции попытаюсь записать или прочитать из buffer, то получаю ошибку в ядре,
хотя я проверил: указатель buffer валидный и он одинаковый и в режиме ядра и в режиме пользователя.
перед вызовом read() в режиме ядра буфер проинициализировал.

Сначала я подумал, что модуль работает не в 0-кольце, но проверил два младших бита регистра CS, всё в порядке, модуль в 0 кольце, программа в 3-м кольце.

В чём может быть дело ? Почему в режиме ядра я не могу напрямую обращаться к памяти пользовательского режима ?
Модуль ядра Linux
Я новичёк в режиме ядра и я взял пример chrdev модуля Linux, работает нормально.
При чтении устройста данные пользователю отправляет через put_user, в функции
static ssize_t device_read(struct file *flip, char *buffer, size_t len, loff_t *offset)

если я в этой функции попытаюсь записать или прочитать из buffer, то получаю ошибку в ядре,
хотя я проверил: указатель buffer валидный и он одинаковый и в режиме ядра и в режиме пользователя.
перед вызовом read() в режиме ядра буфер проинициализировал.

Сначала я подумал, что модуль работает не в 0-кольце, но проверил два младших бита регистра CS, всё в порядке, модуль в 0 кольце, программа в 3-м кольце.

В чём может быть дело ? Почему в режиме ядра я не могу напрямую обращаться к памяти пользовательского режима ?