分類: linux
有些時候編寫的核心模組,為了具有更高的可除錯性,通常會使用proc檔案系統。例如netfilter的layer7模組。
下面是在2.6.24下的註冊proc檔案系統,並實現讀寫功能的**。
在/proc/net下建立目錄procdir,在該目錄下註冊procfile檔案。
#
include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
ctype
.h>
#include
module_license(
"gpl");
module_author(
"ltw");
module_description(
"make proc file");
static
struct nf_hook_ops procfile;
static
int procnum=20;
static
struct proc_dir_entry* father;
unsigned
int procfile_func(
unsigned
int hooknum,
struct sk_buff *skb,
const
struct net_device *in,
const
struct net_device *out,
int(
*okfn)
(struct sk_buff*))
static
int my_atoi(
const
char
*s)}
}/* write out num_packets to userland. */
static
int procfile_read_proc(
char
* page,
char
** start, off_t off,
intcount
,int
*eof
,void
* data)
/* read in num_packets from userland */
static
int procfile_write_proc(
struct
file
*file
,const
char
* buffer,
unsigned
long
count
,void
*data)
if(copy_from_user(foo, buffer,
count))
procnum= my_atoi(foo)
;kfree (foo)
;/* this has an arbitrary limit to make the math easier. i'm lazy.
but anyway, 99 is a lot! if you want more, you're doing it wrong! */
if(procnum > 99)
else
if(procnum < 1)
return
count;}
static
void procfile_cleanup_proc(
void
)static
void procfile_init_proc(
void
)static
int __init procfile_init(
void
)static
void __exit procfile_exit(
void
)module_init(procfile_init)
;module_exit(procfile_exit)
;
Proc檔案系統
include static struct proc dir entry proc null int read proc char page,char start,off t off,int count,int eof,void data len sprintf page len,debug mod...
proc檔案系統
linux 將一切事物都看成檔案,硬體裝置在檔案系統中也有相應的條目。我們使用底層系統呼叫這樣一種特殊方式通過 dev目錄中的檔案來訪問硬體。控制硬體的軟體驅動程式通常可以以某種特定方式配置,或者能夠報告相關資訊。用於與裝置驅動程式進行通訊的工具在過去就已經十分常見,近來年,傾向於提供更一致的方式來...
proc檔案系統
proc檔案系統是由核心實現的檔案系統。當使用者態訪問 proc下檔案時,實際上是呼叫核心中和該檔案對應的特定函式。一般用proc檔案來實現核心 驅動的呼叫。大部分proc檔案是唯讀的,用於獲取核心資訊 還有一些proc檔案是可寫的,當使用者態改變了proc檔案的內容時,會呼叫核心的函式,從而改變核...