没有合适的资源?快使用搜索试试~ 我知道了~
资源详情
资源评论
资源推荐
1.字符设备与块设备 IO 操做的区别
1)
块设备只能以块为单位接收输入返回输出
,
而字符设备则以
byte
为单位
.
大多数设备是字符设备
,
他们不需
要缓冲并且不以固定块大小进行操作.
2)
块设备对于
IO
请求有对应的缓冲区
,
所以他们可以选择以什么顺序进行响应
.
字符设备无须缓冲且被直接读
写
.
3)字符设备只能被顺序读写,块设备可以随机访问.
2.block_device_operations 结构体
block_device_operations
描述了对块设备的操作的集合
struct block_device_operations {
int (*open)(struct inode *, struct file *);/*
打开
*/
int (*release)(struct inode *, struct file *);/*
释放
*/
int (*ioctl)(struct inode *, struct file *, unsigned, unsigned long);
long (*unlocked_ioctl)(struct file *, unsigned, unsigned long);
long (*compat_ioctl)(struct file *, unsigned, unsigned long);
int (*direct_access)(struct block_device *, sector_t, unsigned long *);
int (*media_changed)(struct gendisk *);/*介质被改变?*/
int (*revalidate_disk)(struct gendisk *);/*使介质改变*/
int (*getgeo)(struct block_device *, struct hd_geometry *);/*填充驱动器信息*/
struct module *owner;/*模块拥有者,一般初始化为THIS_MODULE*/
};
关于
block_device_operations
的操作
:
//open and release
int (* open)(struct inode*, struct file*);
int (* release)(struct inode*, struct file*);
//io contrl
//
系统调用实现
,
块设备包含大量的标准请求
,
由设备层处理
,
所以此函数一般相当短
int (* ioctl)(struct inode*,struct file*,unsigned int,unsigned long);
//media changed
//如果改变返回非0值,否则返回0
int (*media_changed)(struct gendisk*);
//revalidate media
//用于响应一个介质的改变,给驱动一个机会做准备工作
int (* revalidate_disk)(struct gendisk*);
//get driver informaiton
//根据驱动器的几何信息填充hd_geometry,包含磁头,柱面,扇区等信息.
int (* getgeo)(struct block_device*, struct hd_geometry*);
3.gendisk 结构体
使用 gendisk 结果提来描述一个独立的磁盘设备或分区.
//gendisk structure
struct gendisk{
/*前三个元素共同表征了一个磁盘的主,次设备号,同一个磁盘的各个分区共享一个主设备号*/
int major;/*
主设备号
*/
int first_minor;/*
第一个次设备号
*/
int minors;/*
最大的次设备数
,
如果不能分区
,
则为
1*/
char disk_name[32];
SaitoFun
- 粉丝: 4
- 资源: 6
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论1