Вы не соблюдаете размер буфера, переданный в функцию dev_read
, поэтому вы можете вызывать неопределенное поведение в cat
. Попробуйте следующее:
static ssize_t dev_read( struct file *filp, char *buff, size_t len, loff_t *off )
{
size_t count = 0;
printk( KERN_ALERT"inside read %d\n", *off );
while( msg[count] != 0 && count < len )
{
put_user( msg[count], buff++ );
count++;
}
return count;
}