這是一個新手的內核模塊的問題...我有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'調用。也就是說,無論有多少嵌套打開完成,驅動程序只在第一個回調中獲得一個回調,並且只在最後一次關閉時才接近關閉。 –