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
在 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
留言
張貼留言