Я новичёк в режиме ядра и я взял пример 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-м кольце.
В чём может быть дело ? Почему в режиме ядра я не могу напрямую обращаться к памяти пользовательского режима ?