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, 此目錄包含用於配置核心的腳本文件等。