如何从用户空间C读取内核模块(/ dev)文件

时间:2012-08-23 18:47:26

标签: c file-io linux-kernel

在我的内核模块中,read函数如下:

ssize_t aes_read(struct file *filp, char *buf, size_t count, loff_t *f_pos) { 

  unsigned long aes_reg[4];
  aes_reg[0] = leon_load_reg(output_mem_loc);
  aes_reg[1] = leon_load_reg(output_mem_loc+4);
  aes_reg[2] = leon_load_reg(output_mem_loc+8);
  aes_reg[3] = leon_load_reg(output_mem_loc+12);
  copy_to_user(buf, (char *)aes_reg, 16);
  ....

在内核模块中出现buf正确设置。在用户空间方面,我写了这个:

int main(int argc, char* argv[]){
    FILE *fpaes;
    char *str;
    int buf[4];

    fpaes = fopen("/dev/aes", "r");
    fread(str, 16, 1, fpaes);
    p_long = (unsigned long *)str;
    ....

但是str没有使用我期望的值进行更新。我是允许以这种方式做fread还是我离开?

1 个答案:

答案 0 :(得分:3)

str未在您的计划中初始化。访问*str是未定义的行为。