首页 > 代码库 > linux驱动开发记录
linux驱动开发记录
inode:
include/linux/fs.h
1 /* 2 * Keep mostly read-only and often accessed (especially for 3 * the RCU path lookup and ‘stat‘ data) fields at the beginning 4 * of the ‘struct inode‘ 5 */ 6 struct inode { 7 umode_t i_mode; 8 unsigned short i_opflags; 9 kuid_t i_uid; 10 kgid_t i_gid; 11 unsigned int i_flags; 12 13 #ifdef CONFIG_FS_POSIX_ACL 14 struct posix_acl *i_acl; 15 struct posix_acl *i_default_acl; 16 #endif 17 18 const struct inode_operations *i_op; 19 struct super_block *i_sb; 20 struct address_space *i_mapping; 21 22 #ifdef CONFIG_SECURITY 23 void *i_security; 24 #endif 25 26 /* Stat data, not accessed from path walking */ 27 unsigned long i_ino; 28 /* 29 * Filesystems may only read i_nlink directly. They shall use the 30 * following functions for modification: 31 * 32 * (set|clear|inc|drop)_nlink 33 * inode_(inc|dec)_link_count 34 */ 35 union { 36 const unsigned int i_nlink; 37 unsigned int __i_nlink; 38 }; 39 dev_t i_rdev; 40 loff_t i_size; 41 struct timespec i_atime; 42 struct timespec i_mtime; 43 struct timespec i_ctime; 44 spinlock_t i_lock; /* i_blocks, i_bytes, maybe i_size */ 45 unsigned short i_bytes; 46 unsigned int i_blkbits; 47 blkcnt_t i_blocks; 48 49 #ifdef __NEED_I_SIZE_ORDERED 50 seqcount_t i_size_seqcount; 51 #endif 52 53 /* Misc */ 54 unsigned long i_state; 55 struct mutex i_mutex; 56 57 unsigned long dirtied_when; /* jiffies of first dirtying */ 58 59 struct hlist_node i_hash; 60 struct list_head i_wb_list; /* backing dev IO list */ 61 struct list_head i_lru; /* inode LRU list */ 62 struct list_head i_sb_list; 63 union { 64 struct hlist_head i_dentry; 65 struct rcu_head i_rcu; 66 }; 67 u64 i_version; 68 atomic_t i_count; 69 atomic_t i_dio_count; 70 atomic_t i_writecount; 71 #ifdef CONFIG_IMA 72 atomic_t i_readcount; /* struct files open RO */ 73 #endif 74 const struct file_operations *i_fop; /* former ->i_op->default_file_ops */ 75 struct file_lock_context *i_flctx; 76 struct address_space i_data; 77 struct list_head i_devices; 78 union { 79 struct pipe_inode_info *i_pipe; 80 struct block_device *i_bdev; 81 struct cdev *i_cdev; 82 }; 83 84 __u32 i_generation; 85 86 #ifdef CONFIG_FSNOTIFY 87 __u32 i_fsnotify_mask; /* all events this inode cares about */ 88 struct hlist_head i_fsnotify_marks; 89 #endif 90 91 void *i_private; /* fs or device private pointer */ 92 };
file:
include/linux/fs.h
1 struct file { 2 union { 3 struct llist_node fu_llist; 4 struct rcu_head fu_rcuhead; 5 } f_u; 6 struct path f_path; 7 struct inode *f_inode; /* cached value */ 8 const struct file_operations *f_op; 9 10 /* 11 * Protects f_ep_links, f_flags. 12 * Must not be taken from IRQ context. 13 */ 14 spinlock_t f_lock; 15 atomic_long_t f_count; 16 unsigned int f_flags; 17 fmode_t f_mode; 18 struct mutex f_pos_lock; 19 loff_t f_pos; 20 struct fown_struct f_owner; 21 const struct cred *f_cred; 22 struct file_ra_state f_ra; 23 24 u64 f_version; 25 #ifdef CONFIG_SECURITY 26 void *f_security; 27 #endif 28 /* needed for tty driver, and maybe others */ 29 void *private_data; 30 31 #ifdef CONFIG_EPOLL 32 /* Used by fs/eventpoll.c to link all the hooks to this file */ 33 struct list_head f_ep_links; 34 struct list_head f_tfile_llink; 35 #endif /* #ifdef CONFIG_EPOLL */ 36 struct address_space *f_mapping; 37 } __attribute__((aligned(4))); /* lest something weird decides that 2 is OK */
cdev
include/linux/cdev.h
1 struct cdev { 2 13 struct kobject kobj; 3 14 struct module *owner; 4 15 const struct file_operations *ops; 5 16 struct list_head list; 6 17 dev_t dev; 7 18 unsigned int count; 8 19 };
linux驱动开发记录
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。