LINUX 文件系統和設備文件系統

1.文件操作的相關係統調用

 

    1.創建

                    int creat(const char *filename,mode_t mode)

                                                    文件的最終權限(mode & umask)

                    int umask(int newmask)

 

    2.打開

                    int open(const char *pathname,int flags)

                    int open(const char *pathname,int flags,mode_t mode)

 

    3.讀寫

                    int read(int fd,const void *buf,size_t length)

                    int write(int fd,const void *buf,size_t length)

 

     4.定位

                    int lseek(int fd,offset_t offset,int wherece)

 

     5.關閉

                    int close(int fd)

 

2.linux文件系統

 

 

     1.file 結構體

                    系統中每個打開的文件在內核空間都有一個相關的struct file

 

                    struct file

                    {

                         struct file_operations *f_op;//與文件相關操作

                         void    *private_data;            //文件的私有數據,指向設備驅動自定義用於描述設備的結構體

                    }

 

 

      2.inode 結構體

                    VFS inode  包含文件訪問權限等等,它是linux管理文件系統的最基本單元,也是文件系統連接任何子目錄,文件的橋樑

 

                    struct inode

                    {

                         struct    block_device    *i_bdev;

                         struct    cdev                 *i_cdev;

                         dev_t                             i_rdev;

                    }

                     unsigned   int  iminior (struct  inode   *inode) 獲取次設備號

                     unsigned   int imajor   (struct  inode   *inode) 獲取主設備號

 

       3.devfs設備文件系統    2。4內核

                    使得設備驅動程序能自主地管理它自己的設備文件

       4.udev設備文件系統      2.6內核

                  

                    1.kobject 內核對象

                             使得所有設備在底層都具有統一的接口

                             每個內核中註冊的kobject對象對應於sysfs文件系統中的一個目錄

 

                    2.kset

                             kobject通常通過kset組織成層次化的結構,kset是具有相同類型的kobject的集合

                  

                    3.subsystem 內核對象子系統

                             subsystem 是一系類kset的集合,它描述系統中某一類設備子系統

            

                    4.linux 設備模型組件

                             系統中的任一設備模塊中都由一個device 對象描述,其對應的數據結構struct device

 

                             device 結構體用於描述設備相關信息設備之間的層次關係以及設備與總線,驅動的關係

                             系統中的每個驅動程序由一個device_driver對象描述,系統中的設備類由struct  class描述,表示某一類設備。

 

 

●Arch :arch子目錄包括了所有和體系結構相關的核心代碼。它的每一個子目錄都代表一種支持的體系結構,例如i386就是關於intel cpu及與之相兼容體系結構的子目錄。PC機一般都基於此目錄;

    ●Include: include子目錄包括編譯核心所需要的大部分頭文件。與平臺無關的頭文件在 include/linux子目錄下,與 intel cpu相關的頭文件在include/asm-i386子目錄下,而include/scsi目錄則是有關scsi設備的頭文件目錄;

    ●Init: 這個目錄包含核心的初始化代碼(注:不是系統的引導代碼),包含兩個文件main.c和Version.c,這是研究核心如何工作的一個非常好的起點。

    ●Mm :這個目錄包括所有獨立於 cpu 體系結構的內存管理代碼,如頁式存儲管理內存的分配和釋放等;而和體系結構相關的內存管理代碼則位於arch/*/mm/,例如arch/i386/mm/Fault.c

    ●Kernel:主要的核心代碼,此目錄下的文件實現了大多數linux系統的內核函數,其中最重要的文件當屬sched.c;同樣,和體系結構相關的代碼在arch/*/kernel中;

    ●Drivers: 放置系統所有的設備驅動程序;每種驅動程序又各佔用一個子目錄:如,/block 下爲塊設備驅動程序,比如ide(ide.c)。如果你希望查看所有可能包含文件系統的設備是如何初始化的,你可以看drivers/block/genhd.c中的device_setup()。它不僅初始化硬盤,也初始化網絡,因爲安裝nfs文件系統的時候需要網絡其他: 如, Lib放置核心的庫代碼; Net,核心與網絡相關的代碼; Ipc,這個目錄包含核心的進程間通訊的代碼; Fs ,所有的文件系統代碼和各種類型的文件操作代碼,它的每一個子目錄支持一個文件系統,例如fat和ext2;

    ●Scripts, 此目錄包含用於配置核心的腳本文件等。

 

 

 

   

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章