Linux Device Driver - proc

前篇 : Linux Device Driver - printk_rateliit

在 Linux Device Driver 3rd 的 4.3.1 章節開始, 介紹到 /proc.
用之前範例程式 修改, 寫了一個 example :

https://github.com/neojou/linuxdevicedriver/tree/master/testwifi-proc-1

如前篇所提, /proc 是 Linux 的虛擬目錄檔案.
這邊介紹如何建立和刪除這檔案

4.3.1.3 創建 /proc

書上第三版還是舊的 API : create_proc_entry()
從 2.6.26 之後, 已經改用 proc_create_data()

範例檔案 : os_dep/linux/rtw_proc.c


- proc_mkdir_data()
   這個函式 會在 /proc/net 下建立一個 目錄.
   第一個參數 : 這個目錄的名稱字串
   第二個參數 : 目錄屬性
   第三個參數 : /proc/net : 用 kernel 參數 init_net.proc_net 帶入 struct proc_dir_entry *

- proc_create_data()
   這個函式, 會在上面所建立的 proc 目錄下, 建立 虛擬檔案.
   第一個參數 : 檔案名稱 - ver_info
   第二個參數 : 檔案屬性
   第三個參數 :  rtw_proc , 上一個 所建立的目錄回傳值, 型態 struct proc_dir_entry *
   第四個參數 : seq 接口 file operations, 如書中 4.3.1.4 所提


這邊對於只有一頁的輸出來說, 書中的 seq_file start()/next()/stop() 就會顯得比較複雜.
這時候可以用 single_open() 來實現, 須注意是 如果用 single_open(), 則 release 時也要用 single_release()

single_open() 使用時, 僅需要定義一個 show 函數, 這邊範例是 proc_get_drv_version()
用到 seq_printf() 函式 來輸入實現 show() 函式


模塊卸載時, 一樣使用 remove_proc_entry()


執行 :

    $ sudo insmod 88x2bu.ko
    $ cat /proc/net/rtl88x2bu/ver_info
       rtl88x2bu : MYTEST
   

留言

熱門文章