簡體   English   中英

訪問內核模塊

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM