Linux核心模組程式設計--替代printk系列(轉)
代替 printk
在本書開始的時候,我說過 X 和核心模組程式設計不能混合。在開發核心模組時那是對的,但在實際使用中你想可以向任何向模組傳送命令的終端(Teletype, 最初是用於和Unix系統溝通的鍵盤和印表機的組合,而今天它是用於Unix程式的文字流的抽象,無論它是一個物理的終端、X顯示器上的 xterm 還是用telnet 的網路連線,等等。)傳送訊息。這對在核心模組被釋放後識別錯誤是很重要的,因為它將被所有模組使用。
實現這個的一個辦法是使用指向當前執行作業的指標 current得到當前作業的終端結構。然後我們在那個終端結構裡面找指向字串寫函式的指標,我們可以用它向終端寫字串。
範例 printk.c
/* printk.c - 向你正在執行的終端輸出文字,無論它是否透過 X11, telnet, 等等。 *//* Copyright (C) 1998 by Ori Pomerantz *//* 必要標頭檔案 *//* 標準標頭檔案 */#include /* 核心工作 */#include /* 明確指定是模組 *//* 處理 CONFIG_MODVERSIONS */#if CONFIG_MODVERSIONS==1#define MODVERSIONS#include#endif/* 必要的 */#include /* 為了 current */#include /* 為了終端宣告 *//* 向當前作業使用的終端列印字串 */void print_string(char *str){struct tty_struct *my_tty;/* 當前作業終端 */my_tty = current->tty;/* 如果 my_tty 為 NULL則意味著當前作用沒有你可以列印的終端。* (這是可能的,例如它是一個守護程式)* 在這中情況下我們不能做任何事。 */if (my_tty != NULL) {/* my_tty->driver 是包含終端函式的結構,它們中的一個(寫)用於向終端寫字串。* 它可以用於從使用者記憶體段或核心記憶體段取字串。** 函式的第一個引數是要寫向的終端,因為同一函式通常用於所有的屬某種型別的終端。* 第二個引數控制是從核心記憶體段(false,0)還是從使用者記憶體段(true,非零)接收字串。* 第三個引數是指向字串的指標,第四個是字串的長度。*/(*(my_tty->driver).write)(my_tty, /* 終端自己 */0, /* 我們不從使用者空間取字串 */str, /* 字串 */strlen(str)); /* 長度 *//* 終端是最初的硬體裝置,它(通常)嚴格的堅持 ASCII 標準。* 根據 ASCII,換行需要兩個字元,回車和走行。另一方面,在Unix 中,* ASCII 走行符用於這兩個目的-因此我們不能僅僅用 ,因為它沒有回車,* 下一行將在上面那行後的走行符的右邊的那列開始而非行首。** 順便說一下,這就是為什麼 Unix 和 Windows的文字檔案不同的原因。* 在 CP/M 和它的派生產品,例如 MS-DOS 和 Windows, ASCII 被嚴格的堅持,因此* 新行需要走行和回車。*/(*(my_tty->driver).write)(my_tty,0,"1512",2);}}/* 初始化和清除模組 ****************** *//* 初始化模組-登記 proc 檔案 */int init_module(){print_string("Module Inserted");return 0;}/* 清除 - 從/proc中登出我們的檔案 */void cleanup_module(){print_string("Module Removed");}
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752043/viewspace-940220/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Linux核心模組程式設計--阻塞程式(轉)Linux程式設計
- Linux核心模組程式設計指南(轉)Linux程式設計
- Linux核心模組程式設計指南(一)(轉)Linux程式設計
- Linux核心模組的程式設計方法(轉)Linux程式設計
- Linux核心模組程式設計--系統呼叫(轉)Linux程式設計
- Linux核心模組程式設計--中斷處理程式(轉)Linux程式設計
- Linux核心模組程式設計--啟動引數(轉)Linux程式設計
- Linux核心模組程式設計--替任務排程(轉)Linux程式設計
- Linux核心模組程式設計/proc 檔案系統(轉)Linux程式設計
- Linux核心模組程式設計-將/proc作為輸入(轉)Linux程式設計
- Linux核心程式設計(阻塞程式)(轉)Linux程式設計
- Linux核心模組程式設計之和裝置檔案對話(轉)Linux程式設計
- Linux核心程式設計(結論)(轉)Linux程式設計
- linux核心系列之程式管理(轉)Linux
- 讀《Linux核心程式設計》Linux程式設計
- Linux核心程式設計實戰經驗談(轉)Linux程式設計
- Linux核心程式設計(字元裝置檔案)(轉)Linux程式設計字元
- 使用GDK7除錯Linux核心之printk函式除錯Linux函式
- 深入學習Linux系統,Linux核心程式設計風格(轉)Linux程式設計
- Debian/Ubuntu Linux下核心程式設計者必備(轉)UbuntuLinux程式設計
- Linux核心程式設計(和裝置檔案對話)(轉)Linux程式設計
- Linux 程式設計之Shell程式設計(轉)Linux程式設計
- Linux系統應用程式和核心模組的區別(轉)Linux
- Linux核心模組Linux
- Linux 核心將用 Nftables 替代 iptablesLinux
- 用Mgaic Linux的核心和模組代替Debian的核心(轉)AILinux
- Linux上不安全的程式及替代程式(轉)Linux
- windows核心程式設計--程式Windows程式設計
- 透過 Linux 核心看無鎖程式設計Linux程式設計
- 初識Linux核心-DIY核心模組Linux
- 《程式設計時間簡史系列》JavaScript 模組化的歷史程式程式設計JavaScript
- linux驅動程式設計(轉)Linux程式設計
- Linux程式設計之一(轉)Linux程式設計
- Linux程式設計之三(轉)Linux程式設計
- Linux程式設計之四(轉)Linux程式設計
- Linux防火牆程式設計(轉)Linux防火牆程式設計
- Linux Unicode 程式設計(轉)LinuxUnicode程式設計
- windows核心程式設計--核心物件Windows程式設計物件