在我的内核模块中,读取函数如下:
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
还是我离题了?
最佳答案
str
未在您的程序中初始化。访问 *str
是未定义的行为。
关于c - 如何从用户空间 C 读取内核模块 (/dev) 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12098167/