Linux核心驅動(五):4、proc檔案系統

來源:互聯網
上載者:User

一、proc檔案系統概述

         1、proc檔案系統是  核心  和   使用者  互動的一種機制;通過proc檔案系統,可以下使用者態下查看linux核心的一些狀態,也可以通過proc檔案系統對核心做一些配置

              比如:  通過 /proc/meminfo,查詢記憶體使用量的情況

二、proc檔案/子目錄  介紹

       1、apm   :  進階電源管理資訊

       2、bus : 匯流排以及匯流排上的裝置

       3、devices :可用的設別資訊

       4、driver : 已經啟用的驅動資訊

       5、interrupts:中斷資訊

       6、ioports:連接埠使用資訊

       7、version:核心版本

三、proc檔案系統的特點

        1、每個檔案都規定了嚴格的許可權:嚴格規定了---可讀?可寫?哪個使用者可讀?哪個使用者可寫

        2、可以用文本編輯程式讀取:more、cat、vi等

        3、不僅可以有檔案還可以有子目錄

        4、可以自己編寫核心程式添加一個 /proc 目錄下的檔案

        5、檔案的內容都是動態建立的,並不存在於磁碟上

四、proc檔案系統的操作

        1、在proc檔案系統中,一個檔案是由 一個proc_dir_entry的結構體描述的

struct proc_dir_entry{     ... ...          read_proc_t  * read_proc;   //當使用者讀這個proc檔案時,這個回呼函數會被調用     write_proc_t * write_proc;  //當使用者寫這個proc檔案時,這個回呼函數會被調用     ... ...}

         2、建立一個proc檔案

               

struct  proc_dir_entry * create_proc_entry(const char * name,mode_t mode,struct proc_dir_entry * parent);

                ==參數:

                      (1)name:要建立的檔案名稱

                      (2)mode:要建立的檔案的屬性  預設0755

                      (3)parent:這個檔案的父目錄,就是說建立的這個檔案要放在哪裡

        3、建立目錄

struct  proc_dir_entry * proc_mkdir(const char * name,mode_t mode,struct proc_dir_entry * parent);

                ==參數:

                    (1)name:要建立的目錄名

                    (2)parent:這個目錄的父目錄

        4、刪除目錄/檔案

void remove_proc_entry(const char * name ,struct proc_dir_entry * parent);

              ==參數:

                  (1)name:要刪除的檔案或目錄名

                  (2)parent:該檔案所在的目錄名

        5、讀寫:為了能讓使用者讀寫添加的proc檔案,需要掛接上讀寫回呼函數,即--> read_proc,write_proc

        6、讀操作

int read_func(char * buffer,char **stat,off_t off,int count,int * peof,void *data);

             ==參數:

                 (1)buff:把要返回給使用者的資訊寫在buffer裡,最大不能超過PAGE_SIZE

                 (2)stat:一般不用

                 (3)off:位移量

                 (4)count:使用者要讀取的位元組數

                 (5)peof:讀到檔案尾時,需要把*peof置1

                 (6)data:一般不用

          7、寫操作

int write_func(struct file *file,const char * buffer,unsigned long count,void * data);

               ==參數:

                 (1)file:該proc檔案對應的file結構,一般忽略

                 (2)buffer:待寫的資料所在的位置

                 (3)count:待寫資料的大小

                 (4)data:一般不用                   

五、實現一個proc檔案的流程

          1、調用create_proc_entry建立一個  struct proc_dir_entry

          2、對建立的  struct proc_dir_entry 進行賦值:read_proc,mode,owner,size,write_proc等等

                

六、proc在開發中的應用:

       1、我們可以在驅動中提供一個proc介面,這樣就可以讓使用者來配置驅動程式,對裝置進行配置。這就是一種讓使用者來配置核心的機制

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.