Linux檔案系統與裝置驅動

2021-08-22 10:09:49 字數 2964 閱讀 9615

應用程式與vfs(virtual filesystem)之間的介面是系統呼叫。

vfs與檔案系統及裝置檔案之間的介面是file_operation 結構體成員函式。(結構成員函式過多,基本上程式設計用到的有.read  .write .open .owner = this_module)。

在對file_opreation 結構體成員函式進行編寫時,主要的用到的file ,incode這兩個結構體。

struct file  f_u;

struct path f_path;

#define f_dentry f_path.dentry

#define f_vfsmnt f_path.mnt

const struct file_operations *f_op;

spinlock_t f_lock; /* f_ep_links, f_flags, no irq */

#ifdef config_smp

int f_sb_list_cpu;

#endif

atomic_long_t f_count;

unsigned int f_flags;

fmode_t f_mode;

loff_t f_pos;

struct fown_struct f_owner;

const struct cred *f_cred;

struct file_ra_state f_ra;

u64 f_version;

#ifdef config_security

void *f_security;

#endif

/* needed for tty driver, and maybe others */

void *private_data;

#ifdef config_epoll

/* used by fs/eventpoll.c to link all the hooks to this file */

struct list_head f_ep_links;

#endif /* #ifdef config_epoll */

#ifdef config_debug_writecount

unsigned long f_mnt_write_state;

#endif

};

在file結構體裡f_mode讀/寫模式,f_flags標誌是裝置驅動的實際考慮要點。

/* needed for tty driver, and maybe others */

void            *private_data;//用來指向裝置驅動自定義用來描述裝置的結構體。

struct inode ;

unsigned long i_ino;

atomic_t i_count;

unsigned int i_nlink;

dev_t i_rdev;

unsigned int i_blkbits;

u64 i_version;

loff_t i_size;

#ifdef __need_i_size_ordered

seqcount_t i_size_seqcount;

#endif

struct timespec i_atime;

struct timespec i_mtime;

struct timespec i_ctime;

blkcnt_t i_blocks;

unsigned short i_bytes;

struct rw_semaphore i_alloc_sem;

const struct file_operations *i_fop; /* former ->i_op->default_file_ops */

struct file_lock *i_flock;

struct address_space i_data;

#ifdef config_quota

struct dquot *i_dquot[maxquotas];

#endif

struct list_head i_devices;

union ;

__u32 i_generation;

#ifdef config_fsnotify

__u32 i_fsnotify_mask; /* all events this inode cares about */

struct hlist_head i_fsnotify_marks;

#endif

#ifdef config_ima

atomic_t i_readcount; /* struct files open ro */

#endif

atomic_t i_writecount;

#ifdef config_fs_posix_acl

struct posix_acl *i_acl;

struct posix_acl *i_default_acl;

#endif

void *i_private; /* fs or device private pointer */

};

在vfs inode結構體包含檔案訪問許可權,屬性,組,大小,生成時間,訪問時間,最後修改時間等資訊。是檔案系統連線任何子目錄、檔案的橋梁。

dev_t            i_rdev;//i_rdev欄位包含裝置編號、分為主裝置編號,和次裝置編號。前者為高12位,後者為低20位。

從乙個inode中獲取到主裝置號,次裝置號。

unsigned int iminor(struct incode  *inode);

unsigned int imajor(struct incode  *inode);

Linux 檔案系統與驅動

之前做應用程式的開發,就知道linux系統的一大特點就是一切皆檔案,一直以來對所有裝置的操作都是使用系統函式open read write close來實現的,就沒關心過系統裡面是怎麼實現對各種裝置的區分和控制櫃,直到開始看linux裝置驅動方面的知識以後,感覺像發現了新大陸一樣的神奇,故把相關知識...

dev loop與裝置檔案系統

摘要 在進行測試的時候,我們往往需要新建一些磁碟分割槽或者裝置等,此時對硬碟進行重新劃分往往不太方面。這種情況下,我們可以通過偽裝置來實現迴圈掛載,從而達到目的。本文主要為你講解什麼是迴圈掛載,什麼是虛擬裝置,裝置和檔案系統有什麼關係。在類unix系統中,dev loop 或稱vnd vnode d...

Linux 驅動相關檔案系統

1.dev 裝置檔案目錄,存放所有系統中device 裝置 的相關資訊。dev snd 音效卡裝置 2.etc 系統配置檔案 3.opt 表示可選擇,自定義軟體安裝的地方 4.proc 作業系統執行時,程序相關資訊,由系統動態生成。proc ioports 可以檢視i o埠使用情況。proc mod...