这是一个新手的内核模块的问题...我有mymodule.c的一个功能:Linux内核模块如何知道它的文件何时被打开?
static int mymodule_open(struct inode *inode, struct file *filp)
{
//printk(KERN_INFO "open called\n");
/* Success */
return 0;
}
和用户级程序,其中变量初始化后的第一行是:
FILE *pFile = fopen("/dev/mymodule", "r+");
当我运行用户级程序这fopen
莫名其妙地调用mymodule.c的的mymodule_open
命令(编译mymodule.ko)。它如何知道这样做?关于mymodule_open()
如何知道当fopen
打开/dev/mymodule
时,我无法连接点。
您联系'mymodule_open'以'file_operations'结构,对不对?从那里连接点... – nneonneo
阅读非常好的[Linux设备驱动程序](http://shop.oreilly.com/product/9780596000080.do)。具体来说,请参阅[主要和次要数字]一节(http://www.xml.com/ldd/chapter/book/ch03.html#t2) – kaylum
需要注意的事项:内核维护一个打开的“refcount “为每个设备。如果你做'xf1 = fopen(“/ dev/mymodule”,...); xf2 = fopen(“/ dev/mymodule”,...);'然后'fclose(xf2); fclose(xf1)',你的'mymodule_open'将只为'xf1'调用,'mymodule_close'只为'xf1'调用。也就是说,无论有多少嵌套打开完成,驱动程序只在第一个回调中获得一个回调,并且只在最后一次关闭时才接近关闭。 –