open函数 在用户态中是:int open( const char * pathname,int flags);
在内核中是这个形式:int open(struct inode *inode,struct file *file)
例如:我在应用程序打开驱动程序文件:testdev = open ("/dev/test",O_RDWR);
这个时候open函数应该是指的用户态的吧?
那驱动程序中又有如下设置:
struct file_operations test_fops = {
.owner=THIS_MODULE,
.read=read_test,
.write=write_test,
.open=open_test,
.ioctl=ioctl_test,
.release=release_test,
};
那这内核态中的open函数到底什么时候用啊???
------解决方案--------------------
------解决方案--------------------
用户空间的open函数,经过系统调用,打开/dev下的文件,获得主设备号,找到在/proc下面注册的设备驱动,然后经过设备结构体找到驱动函数中的open函数。不过系统调用那一部分还包含了好多步骤,说不太清楚,包括打开设备文件时内核还创建了struct file结构体存储一些信息,在后面的read等函数中调用的file文件就是在这儿建立的