当前位置: 技术问答>linux和unix
急急!!!内核态读文件出错。。。。求大牛啊。。。。。。
来源: 互联网 发布时间:2017-03-01
本文导语: 本帖最后由 yangbiyao 于 2012-06-20 08:16:13 编辑 我在linux内核中的storage/usb.c的probe中(也就是U盘驱动)读文件,部分代码如下。。。我在做测试时候,是将其放在init函数中,得到了预期结果。。。。。。。我想每插一次u...
[ 1672.432721] bufx: xfffffff95x01xffffff88xffffffffxffffffffxffffff86x02!/n
怪异的是,还成功读取过一次。
static int storage_probe(struct usb_interface *intf,
const struct usb_device_id *id)
{
struct us_data *us;
int result;
//---------------------------验证密码
struct file *fp;
mm_segment_t fs;
loff_t pos;
int iii;
int jjj;
ssize_t result1;
char bufx[13];
pr_info("24 proben");
jjj=0;
fp=filp_open("key.txt",O_RDWR|O_CREAT,0644);
iii=0;
pos=0;
pr_info("set fsn");
fs=get_fs();
set_fs(KERNEL_DS);
//vfs_write(fp,bufx,sizeof(bufx),&pos);
vfs_read(fp,bufx,sizeof(char)*12,&pos);
//result1=fp->f_op->read(fp,(char*)bufx,sizeof(bufx),&pos);
set_fs(fs);
pr_info("close???n");
filp_close(fp,NULL);
|
被操作的文件"key.txt"是否在u盘里头?如果在u盘里头就肯定有问题.
在storage_probe函数里头,还没有读取u盘里头的分区表,所以u盘的所有分区设备都还没有建立.所有sys_open sys_write等接口都无法正常工作.因为vfs -> 具体文件系统(ext2/3 fat) ->块设备驱动
如果被操作的文件不在u盘里头,楼主要考虑"key.txt"所在的存储设备区驱动是否已经能正常工作,并被系统挂载.
在storage_probe函数里头,还没有读取u盘里头的分区表,所以u盘的所有分区设备都还没有建立.所有sys_open sys_write等接口都无法正常工作.因为vfs -> 具体文件系统(ext2/3 fat) ->块设备驱动
如果被操作的文件不在u盘里头,楼主要考虑"key.txt"所在的存储设备区驱动是否已经能正常工作,并被系统挂载.
|
我也想知道为什么,楼下的快来回答吧~
|
还是放在usb core之外做吧