struct cdev ;
dev_t dev:裝置號,32位。高12位為主裝置號,地20位為次裝置號。
使用下面巨集獲取主次裝置號:
major(dev_t dev)
minor(dev_t dev)
由主次裝置號生成裝置號:
mkdev(int major,int minor)
2:struct file_operations
struct file_operations ;
3:struct file
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
};
4:struct inode
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 )
字元驅動框架提供的重要函式實現了驅動程式和核心的無縫連線。
int alloc_chrdev_region(dev_t *dev, unsigned baseminor, unsigned count,
const char *name);
動態申請主裝置號,第二個引數起始次裝置號,第三個引數是此裝置號數目,最後乙個引數是裝置名稱,出現在/proc/devices中。
void unregister_chrdev_region(dev_t from, unsigned count)
登出主裝置號
void cdev_init(struct cdev *, const struct file_operations *);
把裝置操作集和字元裝置關聯
int cdev_add(struct cdev *, dev_t, unsigned);
裝置號和字元裝置繫結
void cdev_del(struct cdev *);
刪除乙個字元裝置
1:申請分配主裝置號
3:把介面函式與字元裝置程式的cdev抽象關聯
4:把主裝置號和驅動程式的cdev關聯
5:在/dev和/sys下建立節點
6:初始化硬體
Linux字元裝置驅動框架總結
對於linux而言,一切皆檔案,在linux系統下,所有檔案都可以像文字檔案一樣open read write,那麼對於linux裝置驅動而言,比如現在有乙個點燈的驅動程式,它的裝置節點是 dev 當應用程式執行open read write的時候,是如何呼叫到驅動程式裡的open read wri...
字元裝置驅動框架
字元裝置驅動框架 一 linux軟體系統的層次關係 乙個應用程式操作底層驅動程式的過程 1 應用程式使用庫提供的 open函式開啟某乙個裝置檔案。2.庫根據 open函式傳入的引數執行 swi 軟體中斷 指令,這會引起 cpu異常,進入核心。3 核心的異常處理函式根據這些引數找到相應的驅動程式,返回...
字元裝置驅動框架
標頭檔案 linux cdev.h linux fs.h 描述字元裝置共性資訊的結構體 struct cdev 操作方法集 struct file operations 裝置號,本質是32位無符號整型數 dev t dev 該裝置號由兩部分組成,1.主裝置號 2.次裝置號 major dev t d...