设备驱动的分类和设备文件

设备驱动的分类

字符设备驱动:设备的读写访问按照一定的字符流,一个字节字节的按顺序读写,这样的是字符设备:如led,lcd,鼠标,键盘,触摸屏,各种传感器等等,驱动字符设备

块设别驱动:设备读写访问以逻辑块为单位访问,不一定按照一定顺序访问,想访问哪个逻辑块就访问,这样的设备叫块设备:SD卡,EMMC

网络设备驱动:进行通信的设备,对应驱动,在dev/目录下是找不到的

文件的定义

参考另一篇文章
https://blog.youkuaiyun.com/dongdong7_77/article/details/106391889
其中我们要知道相同的设备,他的主设备号是相同的,而次设备号是不同的

函数接口的了解

其中有一个很重要的结构体,里面封装着各种的方法,其中
struct file
{
const struct file_operations *f_op; //驱动函数的集合
void *private_data //实现一个驱动支持多个设备,指向具体设备
} ;
一个文件必然对应唯一的struct inode
struct inode
{
dev_t i_rdev;
struct cdev *i_cdev;
}
其中,操作的功能函数

1638 struct file_operations {
1639         struct module *owner;
1640         loff_t (*llseek) (struct file *, loff_t, int);
1641         ssize_t (*read) (struct file *, char __user *, size_t, loff_t *);
1642         ssize_t (*write) (struct file *, const char __user *, size_t, loff_t *);             
1643         ssize_t (*aio_read) (struct kiocb *, const struct iovec *, unsigned long, loff_t);
1644         ssize_t (*aio_write) (struct kiocb *, const struct iovec *, unsigned long, loff_t);
1645         int (*readdir) (struct file *, void *, filldir_t);
1646         unsigned int (*poll) (struct file *, struct poll_table_struct *);
1647         long (*unlocked_ioctl) (struct file *, unsigned int, unsigned long);
1648         long (*compat_ioctl) (struct file *, unsigned int, unsigned long);
1649         int (*mmap) (struct file *, struct vm_area_struct *);
1650         int (*open) (struct inode *, struct file *);
1651         int (*flush) (struct file *, fl_owner_t id);
1652         int (*release) (struct inode *, struct file *);
1653         int (*fsync) (struct file *, loff_t, loff_t, int datasync);
1654         int (*aio_fsync) (struct kiocb *, int datasync);
1655         int (*fasync) (int, struct file *, int);
1656         int (*lock) (struct file *, int, struct file_lock *);
1657         ssize_t (*sendpage) (struct file *, struct page *, int, size_t, loff_t *, int);
1658         unsigned long (*get_unmapped_area)(struct file *, unsigned long, unsigned long, unsig
1659         int (*check_flags)(int);
1660         int (*flock) (struct file *, int, struct file_lock *);
1661         ssize_t (*splice_write)(struct pipe_inode_info *, struct file *, loff_t *, size_t, un
1662         ssize_t (*splice_read)(struct file *, loff_t *, struct pipe_inode_info *, size_t, uns
1663         int (*setlease)(struct file *, long, struct file_lock **);
1664         long (*fallocate)(struct file *file, int mode, loff_t offset,
1665                           loff_t len);
1666 };

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值