前两篇blog已经基本熟悉了块设备的相关结构,这里来总结下ldd3中提到的一些块设备驱动例题;
1、注册:向内核注册个块设备驱动,其实就是用主设备号告诉内核这个代表块设备驱动
sbull_major = register_blkdev(sbull_major, "sbull");
if (0 >= sbull_major){
printk(KERN_WARNING "sbull: unable to get major number!\n");
return -EBUSY;
}
2、定义设备结构体:
struct sbull_dev{
int size; // 以扇区为单位,设备的大小
u8 *data; // 数据数组
short users; // 用户数目
short media_change; // 介质改变标识
spinlock_t lock; // 用于互斥
struct request_queue *queue; // 设备请求队列
struct gendisk *gd; // gendisk结构
struct timer_list time; // 用来模拟介质改变
};