以下是核心提供的幾個重要的proc檔案系統介面:
(1)read_proc
int (*read_proc)(char *page, char **start, off_t offset, int count, int *eof, void *data);read_proc是proc檔案輸出資訊介面,page是將要寫入資料的緩衝區指標,start是資料將要寫入的頁面位置,offset是頁面中的偏移量;count是寫入的位元組數,eof是乙個整形數,當沒有更多資料時,必須配置這個引數,data是驅動程式特定的資料指標,可用於內部使用。函式的返回值表示實際放入頁面緩衝區的資料位元組數。
(2)create_proc_entry
struct proc_dir_entry *create_proc_entry(const char *name, mode_t mode,struct proc_dir_entry *parent);create_proc_entry用來建立proc目錄。其中name為檔名稱;mode為檔案許可權;parent為檔案的父目錄的指標,它為null時代表父目錄為/proc。
(3)remove_proc_entry
void remove_proc_entry(const char *name, struct proc_dir_entry *parent);remove_proc_entry用於刪除上面函式建立的proc條目,引數name給出要刪除的proc條目的名稱,引數parent指定建立的proc條目所在的目錄。
(4)proc_mkdir
struct proc_dir_entry *proc_mkdir(const char * name, struct proc_dir_entry *parent);該函式用於建立乙個proc目錄,引數name用於指定要建立的proc目錄的名稱,引數parent為該proc目錄所在的目錄。
在驅動程式中使用proc檔案系統,就要了解proc_dir_entry結構:
struct proc_dir_entry ;例1.9 proc檔案系統驅動程式例項
下面的例子演示了如何訪問 proc 檔案系統。**見光碟\src\1drivermodel\1-9proc。核心**如下所示:
//結點操作static struct inode_operations
******_inode_operations
= ;
int init_******_module( void )
else
else
} return ret;
} 以下是讀寫操作的框架:
int ******_read( char *page, char **start, off_t off,int count, int *eof, void *data )
size+=sprintf(page+size,
"%5d%7d%7d%7d%7c%7d%7d %s\n",
(int)p-
>
pid,
(int)p-
>
uid,
(int)p-
>
rt_priority,
(int)p-
>
policy,
state,
(int)p-
>
utime,
(int)p-
>
stime,
p->
comm);
} return (size);
} ssize_t ******_write( struct file *filp, const char __user *buff,unsigned long len, void *data )
******_buffer[len] = 0;
printk(kern_info "******_write: %s\n",******_buffer);
return len;
}
proc檔案的操作許可權控制**:
static int ******_permission(struct inode *inode, int op, struct nameidata *foo)return 0;
}
執行結果如下:
[root@urbetter /home]# insmod demo.kodemo: module loaded.
[root@urbetter /home]# cat /proc/demo
******_permission op 36
pid uid prio policy state utime stime command
1 0 0 0 s 1 398 init
2 0 0 0 s 0 0 kthreadd
3 0 0 0 s 0 0 ksoftirqd/0
4 0 99 1 s 0 0 watchdog/0
5 0 0 0 s 0 0 events/0
6 0 0 0 s 0 41 khelper
145 0 0 0 s 0 0 kblockd/0
156 0 0 0 s 0 0 khubd
159 0 0 0 s 0 0 kseriod
163 0 0 0 s 0 4 kmmcd
187 0 0 0 s 0 0 pdflush
188 0 0 0 s 0 0 pdflush
189 0 0 0 s 0 0 kswapd0
236 0 0 0 s 0 0 aio/0
244 0 0 0 s 0 18 nfsiod
924 0 0 0 s 0 0 mtdblockd
957 0 0 0 s 0 0 kpsmoused
1011 0 0 0 s 0 78 rpciod/0
1042 0 0 0 s 0 0 syslogd
1045 0 0 0 s 1 7 inetd
1079 0 0 0 s 707 468 qpe
1088 0 0 0 s 2 13 sh
1089 0 0 0 s 0 1 init
1090 0 0 0 s 0 0 init
1091 0 0 0 s 0 2 init
1109 0 0 0 s 41 20 qss
1110 0 0 0 s 141 42 quicklauncher
1118 0 0 0 r 0 2 cat
[root@urbetter /home]# echo "fgj"
>
/proc/demo
******_permission op 34
******_write: fgj
如果將itype配置為34,則遮蔽對/proc/demo的寫操作。
[root@urbetter /home]# insmod demo.koitype=34
[root@urbetter /home]# echo "fgj"
>
/proc/demo
******_permission op 34
-/bin/sh: can't create /proc/demo: permission denied
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檔案的內容時,會呼叫核心的函式,從而改變核...