驅動載入到proc檔案下
kernel的除錯方法一般常用的有jtag ,printk,proc,sys ,debugfile.. 關於這些的對比準備專門寫一個,這裡就主要介紹proc的除錯方法。
/proc檔案系統是一種特殊的,由軟體建立的檔案系統,核心使用它向外界匯出資訊。 /proc下面的每個檔案都繫結一個核心函式,使用者讀取其中的檔案時,該函式動態的生成檔案的“內容”。
這樣其實是給了我們一個函式的介面,在這個介面我們可以呼叫底層我們自己寫的驅動函式,可以在其中加入自己想的列印什麼的。有了這個介面我們就可以將驅動執行產生的中間值,區域性變數輸出出來供debug實用。他的缺點也很明顯 已存在大量檔案,不能呼叫太大的檔案列印 函式必須已經寫入到要除錯的驅動中去。對比與產生的哈出這些缺點他的除錯方法還是又存在的價值的。畢竟提供了一個上下層聯絡的介面。
proc 自己定義了讀寫函式,定義了註冊函式,這些都是全域性的。
int (*read_proc)(char *page, char **start, off_t offset, int count,
int *eof, void *data);
引數說明:
page : 用來寫入資料的緩衝區;也就是說從/proc檔案中讀到的資料都寫入到page指向的緩衝區中.
start: 用於指定實際的資料寫入到page指向的記憶體頁的具體的那個位置.
offset : 和read引數中的相同
count : 和read函式中的引數意義相同
eof : 當沒有資料返回時,必須設定該引數為一個整數,例如: *eof = 1;
data : 該引數是核心提供給驅動程式的專用指標,可以用於內部記錄
*建立只讀/proc檔案的函式
struct proc_dir_entry *create_proc_read_entry(const char *name,
mode_t mode, struct proc_dir_entry *base,
read_proc_t *read_proc, void * data)
引數說明:
name : 要建立的/proc下的檔名
mode : 建立的檔案許可權的掩碼,若為0,則使用系統預設的許可權
base : 該檔案所在的父目錄,若該引數為null,則該檔案將會被建立在/proc的根目錄下
read_proc : 讀取/proc下的檔案時呼叫的函式,也就是前面講解的那個函式
data : 核心會忽略data,但會把該引數傳遞給read_proc函式
刪除/proc系統檔案的函式
void remove_proc_entry(const char *name, struct proc_dir_entry *parent)
引數說明:
name : 在/proc檔案系統中建立的檔名
parent : 父目錄名
參照上面的介紹我們就可以看是我們創造自己的proc/proc_test了
// test proc
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/proc_fs.h>
int proc_read_memory_drv(char *page, char **start, off_t off, int count,
int *eof, void *data);
void memory_drv_exit(void);
int memory_drv_init(void);
module_init(memory_drv_init);
module_exit(memory_drv_exit);
struct proc_dir_entry *memory_drv_file;
int proc_read_memory_drv(char *page, char **start, off_t off, int count,
int *eof, void *data)
{
int len;
len = sprintf(page, "test ok");
return len;
}
int memory_drv_init(void)
{
memory_drv_file = create_proc_entry("proc_test", S_IRUGO, NULL);
memory_drv_file->read_proc = proc_read_memory_drv;
return 0;
}
void memory_drv_exit(void)
{
remove_proc_entry("proc_test", NULL);
}
這樣我們就完成了proc/proc_test 檔案的建立
這樣我們就可以把它加在我們想除錯的驅動檔案裡面了
然後進入rootfs
進入proc
cd proc
列出檔案
ll
可以看到proc_test
cat proc_test
就可以顯示出來了我們列印的內容
test ok
相關文章
- 載入驅動
- Linux裝置驅動框架、配置檔案及載入(轉)Linux框架
- proc_create_data函式建立/proc/目錄下的檔案函式
- windows載入驅動Windows
- <解說linux下proc檔案系統>Linux
- Helloworld 驅動模組載入
- 如何動態載入js檔案JS
- js動態載入 js檔案和 css檔案JSCSS
- Linux中/proc目錄下檔案詳解Linux
- Linux /proc 目錄下檔案粗談(轉)Linux
- 下載內表到本地.CSV檔案中
- 載入驅動三種execute
- windows驅動載入順序Windows
- javascript如何動態載入js檔案JavaScriptJS
- php手動載入檢視檔案PHP
- MySQL驅動的下載方法MySql
- 將Xml檔案遞迴載入到TreeView中XML遞迴View
- 檔案下載
- AIX啟動自動載入檔案系統AI
- 網頁檔案自動下載入庫指令碼_shell_sqlldr網頁指令碼SQL
- 載入Java專案中scr下的properties檔案Java
- Java實現上傳檔案到Oracle及從Oracle下載檔案JavaOracle
- Linux驅動模組載入方法和如何判斷Linux驅動是否載入成功Linux
- linux /proc/cpuinfo檔案分析LinuxUI
- 理解 Proc 檔案系統(轉)
- 檔案包含之/proc/self/environ
- UEFI載入程式 & 驅動模組化
- 載入點陣圖檔案到DirectDraw的方法(轉)
- 配置crontab+ftp自動下載檔案FTP
- Android 下載Zip檔案,並解壓到本地Android
- 利用tftp和nfs下載檔案到開發板FTPNFS
- PHP:檔案載入PHP
- 00、下載檔案
- Ajax 下載檔案
- FastApi下載檔案ASTAPI
- MVC 下載檔案MVC
- js 檔案下載JS
- Servlet下載檔案Servlet