- 论坛徽章:
- 0
|
回复 3# dreamzen
问题成功解决!非常感谢@Tinnal!
具体如下:
利用上面邮件列表中提到的“Allocate user-space memory with vm_mmap()”,我在Ubuntu(3.2.0)下测试的,使用do_mmap申请用户空间缓冲区,再使用O_DIRECT进行文件读写,成功读取出了加密后的内容。
代码片段如下:-
- //Some code ahead ...
- struct file *filp = NULL;
- mm_segment_t old_fs;
- ssize_t ret;
- MY_DATA *in = NULL;
- MY_DATA *out = NULL;
- unsigned long addr;
- unsigned long len;
- unsigned long prot;
- unsigned long flag;
- unsigned long offset;
- addr = 0;
- len = 1024;
- prot = PROT_READ | PROT_WRITE;
- flag = MAP_SHARED;
- offset = 0;
- //Open the file
- filp = filp_open(FILE_DIR, O_RDWR, 0);
- filp->f_flags |= O_DIRECT;
- //Mmap
- in = do_mmap_pgoff(NULL, addr, len, prot, flag, offset);
- out = do_mmap_pgoff(NULL, addr, len, prot, flag, offset);
- old_fs = get_fs();
- set_fs(get_ds());
- //Write data into device
- filp->f_op->llseek(filp,0,0);
- ret = filp->f_op->write(filp, (char *)in, 512, &filp->f_pos);
- filp->f_op->fsync(filp, 0, 512, 0);
- //Read data from device(encrypted)
- filp->f_op->llseek(filp,0,0);
- ret = filp->f_op->read(filp, out, 512, &filp->f_pos);
- //More code ...
复制代码 |
|