2015-08-15 37 views
1

比方說,我有一個具有此功能my_open模塊:的Linux:使用模塊的功能

int my_open(struct inode *inode, struct file *filp) { 

    filp->private_data = //allocate private data 

    if(filp->f_mode & FMODE_READ) 
      //handle read opening 
    if(filp->f_mode & FMODE_WRITE) 
      //handle write opening 

    if (MINOR(inode->i_rdev)==2){ 
     filp->f_op = &my_fops2; 
    } 

    return 0; 
    } 

我怎麼使用這個功能從shell /終端?

+1

每當您嘗試使用該設備時,都會調用open()。像'echo「blahblah」>/dev/your_device_node'或'cat/dev/your_device_node'。 – 0andriy

回答

3

這是設備驅動程序的open函數, 或者它是狼的衣服[原文如此]。 萬一這是普通的,vanilla用戶級代碼 將其編譯爲可執行文件並使用它。但是,如果它是一個設備驅動程序的open功能,

  • 首先, 確定它是否編譯/鏈接到當前運行的內核。 如果不是這樣,編譯/鏈接到內核,然後重新啓動。
    • 或者, 您可能有能力動態地將其加載到內核中。 具體怎麼做取決於你的特定操作系統 ,超出了這個問題的範圍。
  • 找出是否是一個b鎖定裝置或ç haracter設備, 以及它主要設備號。 我不能告訴你具體怎麼做,無論是; 請諮詢您當地的資源。
  • OK,讓我們假設它是一個字符設備與主設備號42 期待通過/dev(與ls -l),用於與c 開始條目(「人物」),並含有42, something 在該尺寸應該是,像這樣:

    drwxr-xr-x 1 root root  512 Feb 10 2015 . 
    drwxr-xr-x 1 root root  1024 Feb 10 2015 .. 
    crw-rw-rw- 1 root root 42, 0 Aug 15 18:31 foo 
    crw-rw-rw- 1 root root 42, 2 Aug 15 18:31 fu 
    crw-rw-rw- 1 root root 42, 17 Aug 15 18:31 fubar 
    

    如果找不到,請創建一些。詳情請參閱man mknod。 您應該創建一個小設備編號爲2 ,並且至少一個編號爲 (因爲代碼將2視爲特殊情況)。

  • 根據驅動程序的預期功能對/dev/whatever文件做任何你想要的, 。 (確定駕駛員的預期功能超出範圍。) 舉例來說,你可以嘗試的東西像

    od -cb /dev/foo 
    echo "Hello, world." > /dev/fu 
    
  • 當然,如果它是一個塊設備, 與b取代c在上面的說明。