[英]Access on kernel module
我編寫了一個Linux內核模塊char設備(SuSE 13.2 Kernel 3.16.6),以及一個使用該設備的應用程序。
原則上,驅動程序,應用程序和通信均有效。 該應用程序可以打開,讀取,寫入和關閉char設備。
但是有一個零星的問題,即應用程序的“ Somtime”“丟失”了對模塊寫功能的引用。 在3到4(有時更多)將命令從應用程序寫入模塊后,將不會執行模塊的寫功能。
我減少了模塊內部的write函數:
static ssize_t fWrite(struct file *file, const char *buffer, size_t length, loff_t *offset)
{
printk(KERN_ERR "INSIDE\n");
return 0;
}
而且我還減少了申請:
int main (int argc, char **argv)
{
unsigned short buffer=0xffff;
fd = open ("/dev/MYPCI" , O_SYNC | O_RDWR );
OUTPW (0, buffer ,fd );
OUTPW (2, buffer,fd );
OUTPW (4, buffer,fd );
OUTPW (196, buffer,fd );
OUTPW (70000, buffer,fd );
OUTPW (400, buffer,fd );
printf("DEV-Handle: %d\n", fd);
close (fd );
}
int OUTPW (unsigned short ByteAddr, unsigned short value, int fd)
{
int x;
int size = (ByteAddr/2) <<16;
size +=2;
printf ("\nByteAddr:0x%08hX value:0x%08hX size:0x%08hX WRITE-Handle: 0x%04hX\n" , ByteAddr,value,size, &write);
x= write(fd, &value, size) ;
return x;
}
輸出看起來很奇怪。 有時我可以閱讀3次,有時我可以閱讀4次,有時甚至更多。
寫入功能句柄仍然有效。 如果一個寫命令失敗,則隨后的所有操作也會失敗。 如果我再次關閉並打開設備(在應用程序內部),則寫入是暫時固定的。
讀取命令上存在相同的行為。
有任何想法嗎?
在驅動程序函數fWrite()中返回長度而不是0。
static ssize_t fWrite(struct file *file, const char *buffer, size_t length, loff_t *offset)
{
printk(KERN_ERR "INSIDE\n");
return length;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.