首页 > 代码库 > 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驱动开发记录