当前位置: 代码迷 >> 驱动开发 >> 关于open函数,该怎么处理
  详细解决方案

关于open函数,该怎么处理

热度:27   发布时间:2016-04-28 10:50:13.0
关于open函数
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函数到底什么时候用啊?

------解决方案--------------------
用户空间的open函数,经过系统调用,打开/dev下的文件,获得主设备号,找到在/proc下面注册的设备驱动,然后经过设备结构体找到驱动函数中的open函数。不过系统调用那一部分还包含了好多步骤,说不太清楚,包括打开设备文件时内核还创建了struct file结构体存储一些信息,在后面的read等函数中调用的file文件就是在这儿建立的
  相关解决方案