C 在Linux内核模块编程中更改变量的值

C 在Linux内核模块编程中更改变量的值,c,struct,linux-kernel,C,Struct,Linux Kernel,我在尝试编程字符设备模块时遇到问题 我有一个结构,其中包含一个名为“data”的无符号字符数组 我使用kmalloc为数组分配内存,它工作得很好。我使用copy_from_user和copy_to_user,一切正常 当我试图逐个字节地更改数组中的值时,问题就出现了: for(i = 0;i<count;i++) { printk(KERN_INFO "data[%d] is changing from %d to ", i, ((struct my_cha

我在尝试编程字符设备模块时遇到问题

我有一个结构,其中包含一个名为“data”的无符号字符数组

我使用kmalloc为数组分配内存,它工作得很好。我使用copy_from_user和copy_to_user,一切正常

当我试图逐个字节地更改数组中的值时,问题就出现了:

    for(i = 0;i<count;i++)
    {
        printk(KERN_INFO "data[%d] is changing from %d to ", i, ((struct my_char_device *)filp->private_data)->data[i]);
        ((struct my_char_device *)filp->private_data)->data[i] =(unsigned char) (((unsigned int)((((struct my_char_device *)filp->private_data)->enc_key * 3) + ((struct my_char_device *)filp->private_data)->data[i])) % 127);
        printk(KERN_INFO "%d\n",((struct my_char_device *)filp->private_data)->data[i]);
    }

我从未见过这种类型的输出。这是什么意思?为什么我不能更改值?

如果在第一个
printk
的末尾没有换行,那么在第二个
printk
中使用
KERN\u CONT
。最好在每行输出中使用一个
printk
。在最新的内核中,v4.x尖括号不再用于表示严重性。OP有一些更古老的东西。在任何情况下,问题实际上是关于打印的,而不是标题和正文中所述的变量修改。它根本不是关于打印的。这些值不会改变。是吗?什么是加密键?如果其
0
,则结果是正确的。当打印以
结束时,您如何打印此语句<代码>“数据[%d]正在从%d更改为”
,如果您没有在第一个
printk
的末尾添加换行符,则对第二个
printk
使用
KERN\u CONT
。最好在每行输出中使用一个
printk
。在最新的内核中,v4.x尖括号不再用于表示严重性。OP有一些更古老的东西。在任何情况下,问题实际上是关于打印的,而不是标题和正文中所述的变量修改。它根本不是关于打印的。这些值不会改变。是吗?什么是加密键?如果其
0
,则结果是正确的。当打印以
结束时,您如何打印此语句<代码>“数据[%d]正在从%d更改为”
    for(i = 0;i<count;i++)
    {
        printk(KERN_INFO "data[%d] is changing from %d to ", i, ((struct my_char_device *)filp->private_data)->data[i]);
        ((struct my_char_device *)filp->private_data)->data[i] =(unsigned char) (((unsigned int)((((struct my_char_device *)filp->private_data)->enc_key * 3) + ((struct my_char_device *)filp->private_data)->data[i])) % 127);
        printk(KERN_INFO "%d\n",((struct my_char_device *)filp->private_data)->data[i]);
    }
Encrypting 2 characters using first method
data[0] is changing from 97 to <6>97
data[1] is changing from 98 to <6>98